RSSPaper

~ My static generate newspaper ~


Valve presenta Steam Deck, su consola híbrida con Linux

MuyLinux

Pues ya es una realidad. Después de que se filtrara información durante el transcurso de la pasada primavera, Valve ha anunciado Steam Deck, su nueva consola de videojuegos con la que pretende adentrarse en el sector del hardware usando Linux[...]

Clojure Deref (July 16, 2021)

Clojure News

Welcome to the Clojure Deref! This is a weekly link/news roundup for the Clojure ecosystem. (@ClojureDeref RSS)

Highlights

Big congrats to Amperity on their Series D financing and valuation of $1B, making them another "unicorn" built substantially on Clojure and ClojureScript, approaching 100 Clojure developers. It is great to see these Clojure success stories at scale! Amperity has also been a great contributor to the Clojure ecosystem, so many thanks to them.

Podcasts and videos

Libraries and tools

Some interesting library and tool updates and posts this week:

  • Datomic Cloud 884-9095 - new lower pricing tiers, API Gateway automation, and simplified operation

  • data.json 2.4.0 - no dependency JSON parser/writer in Clojure

  • tools.reader 1.3.6 - Clojure reader in Clojure

  • tools.build 0.1.3 - Building artifacts in Clojure

  • holy-lambda 0.2.3 - micro-framework that integrates Clojure with AWS Lambda

  • rcf - (NEW) turn your Rich Comment Forms into tests

  • datalevin 0.4.40 - simple, fast and durable Datalog database

  • bootleg 0.1.9 - simple template processing command line tool to help build static websites

  • depstar 2.1.267 - builds JARs, uberjars, does AOT, manifest generation, etc for deps.edn projects

  • pathom 2021.07.10-alpha - logic programming through attribute relationships.

  • pathom-viz 2021.7.11 - visualization tools for Pathom

  • pathom-viz-connector 2021.07.15-1 - connect Pathom parsers with the Pathom Viz Electron standalone tool

  • mirabelle 0.3.0 - stream processing engine for monitoring

  • clojure-lsp 2021.07.12-12.30.59 - Language Server (LSP) for Clojure

  • Calva 2.0.204 - Clojure for VS Code

  • babashka 0.5.0 - native, fast starting Clojure interpreter for scripting

  • eastwood 0.8.1 - Clojure lint tool

  • antq 0.16.0 - point out your outdated dependencies

Video throwback

If you haven’t seen it, the classic Every Clojure Talk Ever by Alex Engelberg and Derek Slager does a pretty good job of lovingly capturing the foibles and curiosities of the Clojure community. Enjoy!

Aprende a estructurar un test

Aprende a estructurar un test

Programador Web Valencia

Comisión

Usar un flujo de testing de algún tipo (TDD, BDD, E2E…) es una buena medida de calidad. No porque te asegure que la función u objeto funcione como esperas, sino porque indica que el proyecto posee una buena arquitectura y detrás hay buenos desarrolladores.

Hacer testing no trata solo sobre crear código que compruebe otro código, sino una metodología de trabajo profesional que amplia la visión del código. Escribes un preciso guión de que buscas, dejando claro como debe comportarse y de que manera reaccionará en casos extraordinarios. Todo ello sin tan siquiera escribir la funcionalidad. Además, de manera indirecta, dejas documentado el funcionamiento.

Suele decirse que hacer testing es artesanal, que todos los casos son únicos. No es cierto, disponemos de patrones o plantillas que nos ayudan a empezar y estructurar. Y entre las más sencillas y conocidos son encontramos con Given-When-Then.

Plantilla Given-When-Then

Creado por Daniel Terhorst-North y Chris Matts como parte de BDD (Behavior-Driven Development), son sugieren un patrón de 3 bloques informales de comentarios para dividir el código.

  1. Given (Dado): Preparas el escenario del test, como la base de datos, variables o condiciones propicias.
  2. When (Cuando): Condiciones que transformarán el contenido.
  3. Then (Entonces): Verificas el resultado final, que se ha cumplido todo lo que esperabas o los casos propuestos.

Pongamos sobre la mesa un ejemplo en prosa. Vamos a escribir un test para el cuento de “los 3 cerditos”. El objetivo es comprobar que están a salvo del lobo.

Dado 3 casas, [‘paja’, ‘madera’, ‘ladrillos’]…

Cuando sople el lobo sobre cada una…

Entonces debe existir 1 o más casas en pie.

Ahora vamos a crear un ejemplo real en JavaScript pero muy simple. Queremos una función que nos informe si una anchura y una altura de una imagen iguales. Tal solo indicaremos cuanto es la anchura y altura, devolviendo un true, false o null dependiendo la situación.

Primero definimos la función, pero sin contenido, en imagenes.js. Podrías considerar que estas documentando.

// imagenes.js

/**
 * Comprueba si es una medida cuadrada o contiene la misma anchura y altura
 * @param float anchura
 * @param float altura
 * @return boolean, en caso de no disponer de argumentos con el tipo correcto devolverá un null
 */
function esAnchuraYAlturaCuadrada(anchura, altura) {
}

// Exportamos para que pueda ser invocado desde otros lugares
module.exports = {
    esAnchuraYAlturaCuadrada
};

Ahora hacemos uso de Jest para hace el test. Creamos siguiente archivo imagenes.test.js.

// imagenes.test.js

const {esAnchuraYAlturaCuadrada} = require('./imagenes');

/* Given */

anchura_1 = 500;
altura_1 = 250;

anchura_2 = 400;
altura_2 = 400;

anchura_3 = 400.2;
altura_3 = 400;

anchura_4 = "foo";
altura_4 = 150;

anchura_5 = false;
altura_5 = "boo";


/* When */

resultados_1 = esAnchuraYAlturaCuadrada(anchura_1, altura_1);
resultados_2 = esAnchuraYAlturaCuadrada(anchura_2, altura_2);
resultados_3 = esAnchuraYAlturaCuadrada(anchura_3, altura_3);
resultados_4 = esAnchuraYAlturaCuadrada(anchura_4, altura_4);
resultados_5 = esAnchuraYAlturaCuadrada(anchura_5, altura_5);


/* Then */

test('No son iguales', () => {
    expect(resultados_1).toBe(false);
});

test('Son iguales', () => {
    expect(resultados_2).toBe(true);
});

test('No son iguales', () => {
    expect(resultados_3).toBe(false);
});

test('No se puede comparar un texto con un número', () => {
    expect(resultados_4).toBe(null);
});

test('No se puede comparar un boolean con un texto', () => {
    expect(resultados_5).toBe(null);
});

Instalamos la librería Jest que será la encargada de realizar los test.

npm install --save-dev jest

Y lo ejecutamos.

./node_modules/jest/bin/jest.js

Obviamente fallarán todas.

Ya sabemos que buscamos, y que debe devolver. Es hora de definir la función.

// imagenes.js

/**
 * Comprueba si es una medida cuadrada o contiene la misma anchura y altura
 * @param float anchura
 * @param float altura
 * @return boolean, en caso de no disponer de argumentos con el tipo correcto devolverá un null
 */
function esAnchuraYAlturaCuadrada(anchura, altura) {
    // Es un número?
    if (anchura === parseFloat(anchura) && altura === parseFloat(altura)) {
        // Es igual?
        return anchura == altura;
    }
    return null;
}

// Exportamos para que pueda ser invocado desde otros lugares
module.exports = {
    esAnchuraYAlturaCuadrada
};

Cuando se vuelva a testear comprobarás que pasa todos los casos.

 PASS  ./imagenes.test.js
  ✓ No son iguales (2 ms)
  ✓ Son iguales (1 ms)
  ✓ No son iguales
  ✓ No se puede comparar un texto con un número (1 ms)
  ✓ No se puede comparar un boolean con un texto

Test Suites: 1 passed, 1 total
Tests:       5 passed, 5 total
Snapshots:   0 total
Time:        0.317 s, estimated 1 s
Ran all test suites.

Has sido testigo de todos los pasos típicos en un desarrollo con la metodología TDD.

  1. Documentar.
  2. Crear test.
  3. Ejecutar el test, recibiendo que falla.
  4. Crear la funcionalidad.
  5. Volver a ejecutar, recibiendo un éxito.

Si quieres profundizar, puedes explorar mi curso gratuito de testing donde podrás conocer otras técnicas e implementaciones en otros lenguajes.

Aprende a estructurar un test

Aprende a estructurar un test

Programador Web Valencia

Comisión

Usar un flujo de testing de algún tipo (TDD, BDD, E2E…) es una buena medida de calidad. No porque te asegure que la función u objeto funcione como esperas, sino porque indica que el proyecto posee una buena arquitectura y detrás hay buenos desarrolladores.

Hacer testing no trata solo sobre crear código que compruebe otro código, sino una metodología de trabajo profesional que amplia la visión del código. Escribes un preciso guión de que buscas, dejando claro como debe comportarse y de que manera reaccionará en casos extraordinarios. Todo ello sin tan siquiera escribir la funcionalidad. Además, de manera indirecta, dejas documentado el funcionamiento.

Suele decirse que hacer testing es artesanal, que todos los casos son únicos. No es cierto, disponemos de patrones o plantillas que nos ayudan a empezar y estructurar. Y entre las más sencillas y conocidos son encontramos con Given-When-Then.

Plantilla Given-When-Then

Creado por Daniel Terhorst-North y Chris Matts como parte de BDD (Behavior-Driven Development), son sugieren un patrón de 3 bloques informales de comentarios para dividir el código.

  1. Given (Dado): Preparas el escenario del test, como la base de datos, variables o condiciones propicias.
  2. When (Cuando): Condiciones que transformarán el contenido.
  3. Then (Entonces): Verificas el resultado final, que se ha cumplido todo lo que esperabas o los casos propuestos.

Pongamos sobre la mesa un ejemplo en prosa. Vamos a escribir un test para el cuento de “los 3 cerditos”. El objetivo es comprobar que están a salvo del lobo.

Dado 3 casas, [‘paja’, ‘madera’, ‘ladrillos’]…

Cuando sople el lobo sobre cada una…

Entonces debe existir 1 o más casas en pie.

Ahora vamos a crear un ejemplo real en JavaScript pero muy simple. Queremos una función que nos informe si una anchura y una altura de una imagen iguales. Tal solo indicaremos cuanto es la anchura y altura, devolviendo un true, false o null dependiendo la situación.

Primero definimos la función, pero sin contenido, en imagenes.js. Podrías considerar que estas documentando.

// imagenes.js

/**
 * Comprueba si es una medida cuadrada o contiene la misma anchura y altura
 * @param float anchura
 * @param float altura
 * @return boolean, en caso de no disponer de argumentos con el tipo correcto devolverá un null
 */
function esAnchuraYAlturaCuadrada(anchura, altura) {
}

// Exportamos para que pueda ser invocado desde otros lugares
module.exports = {
    esAnchuraYAlturaCuadrada
};

Ahora hacemos uso de Jest para hace el test. Creamos siguiente archivo imagenes.test.js.

// imagenes.test.js

const {esAnchuraYAlturaCuadrada} = require('./imagenes');

/* Given */

anchura_1 = 500;
altura_1 = 250;

anchura_2 = 400;
altura_2 = 400;

anchura_3 = 400.2;
altura_3 = 400;

anchura_4 = "foo";
altura_4 = 150;

anchura_5 = false;
altura_5 = "boo";


/* When */

resultados_1 = esAnchuraYAlturaCuadrada(anchura_1, altura_1);
resultados_2 = esAnchuraYAlturaCuadrada(anchura_2, altura_2);
resultados_3 = esAnchuraYAlturaCuadrada(anchura_3, altura_3);
resultados_4 = esAnchuraYAlturaCuadrada(anchura_4, altura_4);
resultados_5 = esAnchuraYAlturaCuadrada(anchura_5, altura_5);


/* Then */

test('No son iguales', () => {
    expect(resultados_1).toBe(false);
});

test('Son iguales', () => {
    expect(resultados_2).toBe(true);
});

test('No son iguales', () => {
    expect(resultados_3).toBe(false);
});

test('No se puede comparar un texto con un número', () => {
    expect(resultados_4).toBe(null);
});

test('No se puede comparar un boolean con un texto', () => {
    expect(resultados_5).toBe(null);
});

Instalamos la librería Jest que será la encargada de realizar los test.

npm install --save-dev jest

Y lo ejecutamos.

./node_modules/jest/bin/jest.js

Obviamente fallarán todas.

Ya sabemos que buscamos, y que debe devolver. Es hora de definir la función.

// imagenes.js

/**
 * Comprueba si es una medida cuadrada o contiene la misma anchura y altura
 * @param float anchura
 * @param float altura
 * @return boolean, en caso de no disponer de argumentos con el tipo correcto devolverá un null
 */
function esAnchuraYAlturaCuadrada(anchura, altura) {
    // Es un número?
    if (anchura === parseFloat(anchura) && altura === parseFloat(altura)) {
        // Es igual?
        return anchura == altura;
    }
    return null;
}

// Exportamos para que pueda ser invocado desde otros lugares
module.exports = {
    esAnchuraYAlturaCuadrada
};

Cuando se vuelva a testear comprobarás que pasa todos los casos.

 PASS  ./imagenes.test.js
  ✓ No son iguales (2 ms)
  ✓ Son iguales (1 ms)
  ✓ No son iguales
  ✓ No se puede comparar un texto con un número (1 ms)
  ✓ No se puede comparar un boolean con un texto

Test Suites: 1 passed, 1 total
Tests:       5 passed, 5 total
Snapshots:   0 total
Time:        0.317 s, estimated 1 s
Ran all test suites.

Has sido testigo de todos los pasos típicos en un desarrollo con la metodología TDD.

  1. Documentar.
  2. Crear test.
  3. Ejecutar el test, recibiendo que falla.
  4. Crear la funcionalidad.
  5. Volver a ejecutar, recibiendo un éxito.

Si quieres profundizar, puedes explorar mi curso gratuito de testing donde podrás conocer otras técnicas e implementaciones en otros lenguajes.

Evercade Announces Renovation Collection 1 – Coming Early 2022

Evercade Announces Renovation Collection 1 – Coming Early 2022

Evercade

Evercade is delighted to announce another new collection for the Evercade family of systems, and a new publisher! Renovation Collection 1 will bring twelve incredible 16-bit games from Japanese publisher Telenet and its US subsidiary Renovation. With the collection to be labeled number 23, this will be the first cartridge in our 2022 lineup with... View Article

The post Evercade Announces Renovation Collection 1 – Coming Early 2022 appeared first on Evercade.

Tails 4.20 refuerza su conexión a la red Tor

MuyLinux

Ya os advertíamos hace unos días que detrás del uno va el dos y siempre que sale una nueva versión de Tor Browser, le sigue poco después una nueva versión de Tails, la distribución Linux para los amantes del anonimato en Internet o,[...]

Reuse Dired buffers

Manuel Uberti

This is going to be a really quick one, mainly a “thank you!” to Lars Ingebrigtsen. Lars has recently added a new option on the Emacs master branch: dired-kill-when-opening-new-dired-buffer. I will let the documentation speak for itself:

dired-kill-when-opening-new-dired-buffer is a variable defined in ‘dired.el’.

Its value is t
Original value was nil

You can customize this variable. This variable was introduced, or its default value was changed, in version 28.1 of Emacs. Probably introduced at or before Emacs version 28.1.

If non-nil, kill the current buffer when selecting a new directory.

Setting this new option to t means that pressing RET or ^ in a Dired buffer will reuse the existing buffer. This is something I required a while ago (#20598) and that up until today I had been hacking up poorly in my .init.el.

I know the Emacs developers have more urgent bugs to work on, but this is such a nice improvement I am pretty sure you can see me happily smiling right now.

Reuse Dired buffers

Manuel Uberti

This is going to be a really quick one, mainly a “thank you!” to Lars Ingebrigtsen. Lars has recently added a new option on the Emacs master branch: dired-kill-when-opening-new-dired-buffer. I will let the documentation speak for itself:

dired-kill-when-opening-new-dired-buffer is a variable defined in ‘dired.el’.

Its value is t
Original value was nil

You can customize this variable. This variable was introduced, or its default value was changed, in version 28.1 of Emacs. Probably introduced at or before Emacs version 28.1.

If non-nil, kill the current buffer when selecting a new directory.

Setting this new option to t means that pressing RET or ^ in a Dired buffer will reuse the existing buffer. This is something I required a while ago (#20598) and that up until today I had been hacking up poorly in my .init.el.

I know the Emacs developers have more urgent bugs to work on, but this is such a nice improvement I am pretty sure you can see me happily smiling right now.

Una cápsula del tiempo para Lucy

NeoFronteras

Colocan una placa con mensajes para los humanos del futuro en la sonda Lucy La ciencia es racional. Es una herramienta que nos permite saber más sobre lo que nos rodea y sobre nosotros mismos, lo que nos ha permitido explorar el Universo a una escala sobre la que ni soñábamos hasta hace no tanto. […]

Indie Heroes – The Games

Indie Heroes – The Games

Evercade

  The ‘Indie Heroes’ Collection 1 Cartridge brings 14 independently developed games to Evercade. Originally made for classic systems, this specially curated line-up showcases talented developers from around the world. From platformers to story-driven horrors – this collection has plenty of depth and variety. So what exactly are you going to be able to play... View Article

The post Indie Heroes – The Games appeared first on Evercade.

L’incontrolat

AU Agenda

La entrada L’incontrolat aparece primero en AU Agenda.

L’ETNO. Corona, 36 A l’estiu el cinema es gaudeix a la fresca, ja siga al claustre de La Nau, al llit del Túria o al pati del museu valencià d’etnologia L’Etno, on es posa en marxa la primera edició d’un cicle titulat L’incontrolat que explora les relacions entre el documental, l’etnologia i l’antropologia. Es projectaran […]

La entrada L’incontrolat aparece primero en AU Agenda.

MEMENTO MORI

MEMENTO MORI

Diario Estoico

Se hacen bromas sobre la muerte, «me muero de risa», «esta comida está de muerte» , «hace un calor para morirse» pero cuando la tenemos de cerca se acaban las bromas. El trato hacia la muerte es algo cultural, y depende del lugar del mundo, se percibe de una manera o de otra, la muerte […]