mirror of
https://github.com/tanrax/RSSPAPER.git
synced 2025-01-31 00:16:02 -05:00
1648 lines
96 KiB
HTML
1648 lines
96 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>RSSPaper</title>
|
||
<link rel="icon" type="image/png" href="favicon.png">
|
||
<meta name="theme-color" content="#3c790a">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no">
|
||
<meta name="author" content="Tu nombre">
|
||
<meta name="generator" content="RSSpaper">
|
||
<meta name="keywords" content="html, css, javascript">
|
||
<meta name="description" content="My news">
|
||
<meta property="og:image" content="img/screenshot.png">
|
||
<meta property="og:title" content="The Rock">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:url" content="">
|
||
<meta name="twitter:card" content="summary">
|
||
<meta name="twitter:site" content="@cuenta">
|
||
<meta name="twitter:creator" content="@cuenta">
|
||
<meta property="og:image:secure_url" content="https://...">
|
||
<meta property="og:image:type" content="image/jpeg">
|
||
<meta property="og:image:width" content="400">
|
||
<meta property="og:image:height" content="300">
|
||
<meta property="og:image:alt" content="">
|
||
<!-- Normalize -->
|
||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css">
|
||
<!-- End Normalize -->
|
||
<!-- Fonts -->
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Newsreader:ital,wght@0,400;0,700;1,400&display=swap" rel="stylesheet">
|
||
<!-- End Fonts -->
|
||
<!-- CSS -->
|
||
<style>
|
||
/* Global */
|
||
:root {
|
||
--color-black: black;
|
||
--color-gray: gray;
|
||
--height-img: 10rem;
|
||
}
|
||
body {
|
||
margin: 0;
|
||
padding: 0;
|
||
font-family: 'Newsreader', serif;
|
||
color: var(--color-black);
|
||
}
|
||
img {
|
||
object-fit: cover;
|
||
object-position: center;
|
||
}
|
||
img, video, iframe {
|
||
width: 100%;
|
||
}
|
||
a {
|
||
color: var(--color-black);
|
||
text-decoration: none;
|
||
}
|
||
pre {
|
||
overflow-x: auto;
|
||
}
|
||
.container {
|
||
max-width: 62rem;
|
||
margin: 0 auto;
|
||
padding: 1rem;
|
||
}
|
||
|
||
.header {
|
||
margin-bottom: 2rem;
|
||
}
|
||
|
||
.title {
|
||
text-align: center;
|
||
font-size: 4rem;
|
||
font-weight: normal;
|
||
margin-bottom: 0;
|
||
margin-top: 1rem;
|
||
}
|
||
.subtitle {
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
margin-top: -1rem;
|
||
font-weight: normal;
|
||
font-size: 1.5rem;
|
||
}
|
||
.subtitle__separator {
|
||
font-size: 3rem;
|
||
font-weight: bold;
|
||
}
|
||
.separator {
|
||
border: 0;
|
||
background: var(--color-black);
|
||
height: 1px;
|
||
}
|
||
.footer__text {
|
||
text-align: center;
|
||
padding: 1rem 0;
|
||
}
|
||
.footer__link {
|
||
font-weight: bold;
|
||
}
|
||
.footer__heard {
|
||
display: inline-block;
|
||
margin-left: .3rem;
|
||
}
|
||
.article__title, .article__feed {
|
||
font-weight: normal;
|
||
}
|
||
|
||
.article__header-img > a > img {
|
||
height: var(--height-img);
|
||
object-position: center;
|
||
object-fit: contain;
|
||
}
|
||
.article__random-background {
|
||
height: 100%;
|
||
width: 100%;
|
||
}
|
||
</style>
|
||
<style media="all and (max-width: 600px)">
|
||
/* Mobile */
|
||
</style>
|
||
<style media="all and (min-width: 601px)">
|
||
/* Desktop */
|
||
.main {
|
||
display: grid;
|
||
grid-gap: 1rem;
|
||
grid-template-columns: repeat(12, 1fr);
|
||
}
|
||
|
||
/* First column. */
|
||
.feed__article:nth-child(3n-2){
|
||
grid-column: 9 / 13;
|
||
}
|
||
|
||
/* Second column */
|
||
.feed__article:nth-child(3n+2){
|
||
grid-column: 1 / 5;
|
||
}
|
||
|
||
/* Third column */
|
||
.feed__article:nth-child(3n+3) {
|
||
grid-column: 5 / 9;
|
||
}
|
||
|
||
.article__title {
|
||
font-size: 1.5rem;
|
||
}
|
||
|
||
.article__feed {
|
||
font-size: 1rem;
|
||
}
|
||
|
||
.article__date {
|
||
font-size: .9rem;
|
||
color: var(--color-gray);
|
||
}
|
||
|
||
.feed__article:nth-child(1) .article__title {
|
||
font-size: 2rem;
|
||
}
|
||
|
||
.feed__article:nth-child(1) .article__feed {
|
||
font-size: 1rem;
|
||
}
|
||
|
||
.feed__article:nth-child(1) {
|
||
grid-column: 1 / 9;
|
||
grid-row: 1 / 4;
|
||
text-align: center;
|
||
}
|
||
|
||
.feed__article:nth-child(2) {
|
||
grid-column: 9 / 13;
|
||
grid-row: 1 / 2;
|
||
|
||
}
|
||
|
||
.feed__article:nth-child(3) {
|
||
grid-column: 9 / 13;
|
||
grid-row: 2 / 3;
|
||
|
||
}
|
||
|
||
.feed__article:nth-child(4) {
|
||
grid-column: 9 / 13;
|
||
grid-row: 3 / 4;
|
||
}
|
||
|
||
.feed__article:nth-child(2) .article__header,
|
||
.feed__article:nth-child(3) .article__header,
|
||
.feed__article:nth-child(4) .article__header
|
||
{
|
||
display: flex;
|
||
justify-content: space-between;
|
||
flex-direction: row-reverse;
|
||
grid-gap: 1rem;
|
||
}
|
||
|
||
.article__header > p {
|
||
margin: 0;
|
||
}
|
||
|
||
.article__header-img > img {
|
||
height: var(--height-img);
|
||
}
|
||
|
||
.feed__article:nth-child(1) .article__header-img > img,
|
||
.feed__article:nth-child(2) .article__header-img > img,
|
||
.feed__article:nth-child(3) .article__header-img > img,
|
||
.feed__article:nth-child(4) .article__header-img > img
|
||
{
|
||
height: initial;
|
||
}
|
||
|
||
.feed__article:nth-child(2) .article__titles,
|
||
.feed__article:nth-child(3) .article__titles,
|
||
.feed__article:nth-child(4) .article__titles,
|
||
.feed__article:nth-child(2) .article__header-img,
|
||
.feed__article:nth-child(3) .article__header-img,
|
||
.feed__article:nth-child(4) .article__header-img
|
||
{
|
||
width: 50%;
|
||
}
|
||
|
||
.feed__article:nth-child(2) .article__title,
|
||
.feed__article:nth-child(3) .article__title,
|
||
.feed__article:nth-child(4) .article__title
|
||
{
|
||
font-size: 1.2rem;
|
||
}
|
||
|
||
.feed__article:nth-child(2) .article__feed,
|
||
.feed__article:nth-child(3) .article__feed,
|
||
.feed__article:nth-child(4) .article__feed
|
||
{
|
||
font-size: 1rem;
|
||
}
|
||
.article__main {
|
||
position: fixed;
|
||
left: -100%;
|
||
top: 0;
|
||
bottom: 0;
|
||
overflow-y: auto;
|
||
|
||
}
|
||
.feed__article:nth-child(1) .article__header {
|
||
display: flex;
|
||
flex-direction: column;
|
||
height: 100%;
|
||
}
|
||
.feed__article:nth-child(1) .article__header-img {
|
||
height: 100%;
|
||
}
|
||
</style>
|
||
<!-- End CSS -->
|
||
</head>
|
||
<body>
|
||
<div class="container">
|
||
<header class="header">
|
||
<h1 class="title">RSSPaper</h1>
|
||
<h2 class="subtitle"><span class="subtitle__separator">~</span> <span class="subtitle__text">My static generate newspaper</span> <span class="subtitle__separator">~</span></h2>
|
||
<hr class="separator">
|
||
</header>
|
||
<main class="main">
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/las-3.800-ps4-confiscadas-en-ucrania-no-minaban-criptomonedas-eran-bots-fifa.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/las-3.800-ps4-confiscadas-en-ucrania-no-minaban-criptomonedas-eran-bots-fifa.html">Las 3.800 PS4 confiscadas en Ucrania no minaban criptomonedas, eran bots de FIFA Ultimate Team</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">18 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/microsoft-revela-que-ciudadanos-en-cataluna-fueron-espiados.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/microsoft-revela-que-ciudadanos-en-cataluna-fueron-espiados.html">Microsoft revela que ciudadanos en Cataluña han sido víctimas de un programa de espionaje para gobiernos</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">17 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/hackean-las-cuentas-de-twitter-y.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/hackean-las-cuentas-de-twitter-y.html">Hackean las cuentas de Twitter y Facebook de La Sexta TV</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">17 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/16/steam-deck/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/16/steam-deck/">Valve presenta Steam Deck, su consola híbrida con Linux</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://www.muylinux.com">MuyLinux</a> <span class="article__date">16 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
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[...]
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blogs.windows.com/msedgedev/2021/07/16/easier-debugging-developer-tools-in-visual-studio-code/">
|
||
|
||
<img loading="lazy" src="https://blogs.windows.com/wp-content/uploads/prod/sites/33/2021/06/cropped-browser-icon-logo-32x32.jpg" alt="Easier browser debugging with Developer Tools integration in Visual Studio Code">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blogs.windows.com/msedgedev/2021/07/16/easier-debugging-developer-tools-in-visual-studio-code/">Easier browser debugging with Developer Tools integration in Visual Studio Code</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blogs.windows.com/msedgedev">Microsoft Edge Blog</a> <span class="article__date">16 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
<p>If you're debugging JavaScript in <a href="https://code.visualstudio.com">Visual Studio Code</a> you probably have used either the <a href="https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome">Chrome Debugger</a> or the <
|
||
</p>
|
||
<p>The post <a rel="nofollow" href="https://blogs.windows.com/msedgedev/2021/07/16/easier-debugging-developer-tools-in-visual-studio-code/">Easier browser debugging with Developer Tools integration in Visual Studio Code</a> appeared first on <a rel="nofollow" href="https://blogs.windows.com/msedgedev">Microsoft Edge Blog</a>.</p>
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/steam-deck-valve-presenta-consola-portatil-juegos-pc-.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/steam-deck-valve-presenta-consola-portatil-juegos-pc-.html">Steam Deck: Valve presenta consola portátil para juegos PC por 419€</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">16 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/documentos-maliciosos-excel-4-macros.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/documentos-maliciosos-excel-4-macros.html">Documentos maliciosos Excel 4.0 XLM Macros</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">16 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://clojure.org/news/2021/07/16/deref">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://clojure.org/news/2021/07/16/deref">Clojure Deref (July 16, 2021)</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://clojure.org">Clojure News</a> <span class="article__date">16 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
<div id="preamble">
|
||
<div class="sectionbody">
|
||
<div class="paragraph">
|
||
<p>Welcome to the Clojure Deref! This is a weekly link/news roundup for the Clojure ecosystem. (<a href="https://twitter.com/ClojureDeref">@ClojureDeref</a> <a href="https://clojure.org/feed.xml">RSS</a>)</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_highlights"><a class="anchor" href="#_highlights"></a>Highlights</h2>
|
||
<div class="sectionbody">
|
||
<div class="paragraph">
|
||
<p>Big congrats to <a href="https://amperity.com/">Amperity</a> on their <a href="https://amperity.com/blog/amped-up-announcing-amperitys-usd100m-series-d-financing">Series D financing</a> 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.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_podcasts_and_videos"><a class="anchor" href="#_podcasts_and_videos"></a>Podcasts and videos</h2>
|
||
<div class="sectionbody">
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><a href="https://lispcast.com/why-is-data-so-powerful/">LispCast</a> - Eric Normand on the power of data</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://www.youtube.com/watch?v=DaVrEYIhRFA">clojure-lsp</a> - Eric Dallo showcases clojure-lsp</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://www.youtube.com/watch?v=KOzi-YBq3aI">sudoku solver</a> - Dutch Clojure Meetup #133</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_blogs_discussions_tutorials"><a class="anchor" href="#_blogs_discussions_tutorials"></a>Blogs, discussions, tutorials</h2>
|
||
<div class="sectionbody">
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><a href="https://tonsky.me/blog/icfpc-2021/">Zig, Skia, Clojure, Geometry and the Japanese TV Show: ICFP Contest 2021</a> by Nikita Prokopov</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://www.juxt.pro/blog/maven-central">How-to: Clojure libraries on Maven Central
|
||
</a> by Juxt</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://www.notamonadtutorial.com/clojerl-an-implementation-of-the-clojure-language-that-runs-on-the-beam/">BEAM all the things! ClojErl, an implementation of Clojure on the Erlang Virtual Machine</a> - an interview with Juan Facorro, it’s creator</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://geokon-gh.github.io/literate-clojure.html">Projectless literate Clojure with embedded SVG</a> by George Kontsevich</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_libraries_and_tools"><a class="anchor" href="#_libraries_and_tools"></a>Libraries and tools</h2>
|
||
<div class="sectionbody">
|
||
<div class="paragraph">
|
||
<p>Some interesting library and tool updates and posts this week:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><a href="https://blog.datomic.com/2021/07/Datomic-Cloud-884-9095-New-tiers-and-internet-access.html">Datomic Cloud</a> 884-9095 - new lower pricing tiers, API Gateway automation, and simplified operation</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/clojure/data.json">data.json</a> 2.4.0 - no dependency JSON parser/writer in Clojure</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/clojure/tools.reader">tools.reader</a> 1.3.6 - Clojure reader in Clojure</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/clojure/tools.build">tools.build</a> 0.1.3 - Building artifacts in Clojure</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/FieryCod/holy-lambda">holy-lambda</a> 0.2.3 - micro-framework that integrates Clojure with AWS Lambda</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/hyperfiddle/rcf">rcf</a> - (NEW) turn your Rich Comment Forms into tests</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/juji-io/datalevin">datalevin</a> 0.4.40 - simple, fast and durable Datalog database</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/retrogradeorbit/bootleg">bootleg</a> 0.1.9 - simple template processing command line tool to help build static websites</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/seancorfield/depstar">depstar</a> 2.1.267 - builds JARs, uberjars, does AOT, manifest generation, etc for deps.edn projects</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://pathom3.wsscode.com/">pathom</a> 2021.07.10-alpha - logic programming through attribute relationships.</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/wilkerlucio/pathom-viz">pathom-viz</a> 2021.7.11 - visualization tools for Pathom</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/wilkerlucio/pathom-viz-connector">pathom-viz-connector</a> 2021.07.15-1 - connect Pathom parsers with the Pathom Viz Electron standalone tool</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://www.mirabelle.mcorbin.fr/">mirabelle</a> 0.3.0 - stream processing engine for monitoring</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/clojure-lsp/clojure-lsp">clojure-lsp</a> 2021.07.12-12.30.59 - Language Server (LSP) for Clojure</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://calva.io/">Calva</a> 2.0.204 - Clojure for VS Code</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/babashka/babashka">babashka</a> 0.5.0 - native, fast starting Clojure interpreter for scripting</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/jonase/eastwood">eastwood</a> 0.8.1 - Clojure lint tool</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://github.com/liquidz/antq">antq</a> 0.16.0 - point out your outdated dependencies</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_video_throwback"><a class="anchor" href="#_video_throwback"></a>Video throwback</h2>
|
||
<div class="sectionbody">
|
||
<div class="paragraph">
|
||
<p>If you haven’t seen it, the classic <a href="https://www.youtube.com/watch?v=jlPaby7suOc">Every Clojure Talk Ever</a> by Alex Engelberg and Derek Slager does a pretty good job of lovingly capturing the foibles and curiosities of the Clojure community. Enjoy!</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://programadorwebvalencia.com/aprende-a-estructurar-un-test/">
|
||
|
||
<img loading="lazy" src="https://programadorwebvalencia.com/img/blog/2021/07/testing.png" alt="Aprende a estructurar un test">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://programadorwebvalencia.com/aprende-a-estructurar-un-test/">Aprende a estructurar un test</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://programadorwebvalencia.com/">Programador Web Valencia</a> <span class="article__date">15 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
<p><img src="https://programadorwebvalencia.com/img/blog/2021/07/testing.png" alt="Comisión" /></p>
|
||
|
||
<p>Usar un flujo de testing de algún tipo (TDD, BDD, E2E…) es una buena <strong>medida de calidad</strong>. No porque te asegure que la función u objeto funcione como esperas, sino porque indica que el proyecto posee una <strong>buena arquitectura</strong> y detrás hay buenos desarrolladores.</p>
|
||
|
||
<p>Hacer testing <strong>no trata solo sobre crear código</strong> que compruebe otro código, sino una <strong>metodología de trabajo profesional</strong> 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.</p>
|
||
|
||
<p>Suele decirse que hacer testing es artesanal, que todos los casos son únicos. No es cierto, disponemos de <strong>patrones o plantillas que nos ayudan</strong> a empezar y estructurar. Y entre las más sencillas y conocidos son encontramos con <strong>Given-When-Then</strong>.</p>
|
||
|
||
<h2 id="plantilla-given-when-then">Plantilla Given-When-Then</h2>
|
||
|
||
<p>Creado por Daniel Terhorst-North y Chris Matts como parte de <strong>BDD</strong> (Behavior-Driven Development), son sugieren un patrón de <strong>3 bloques informales de comentarios</strong> para dividir el código.</p>
|
||
|
||
<ol>
|
||
<li><strong>Given</strong> (Dado): Preparas el escenario del test, como la base de datos, variables o condiciones propicias.</li>
|
||
<li><strong>When</strong> (Cuando): Condiciones que transformarán el contenido.</li>
|
||
<li><strong>Then</strong> (Entonces): Verificas el resultado final, que se ha cumplido todo lo que esperabas o los casos propuestos.</li>
|
||
</ol>
|
||
|
||
<p>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.</p>
|
||
|
||
<p><strong>Dado</strong> 3 casas, [‘paja’, ‘madera’, ‘ladrillos’]…</p>
|
||
|
||
<p><strong>Cuando</strong> sople el lobo sobre cada una…</p>
|
||
|
||
<p><strong>Entonces</strong> debe existir 1 o más casas en pie.</p>
|
||
|
||
<p>Ahora vamos a crear un <strong>ejemplo real en JavaScript</strong> 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 <code class="highlighter-rouge">true</code>, <code class="highlighter-rouge">false</code> o <code class="highlighter-rouge">null</code> dependiendo la situación.</p>
|
||
|
||
<p>Primero definimos la función, pero sin contenido, en <code class="highlighter-rouge">imagenes.js</code>. Podrías considerar que estas documentando.</p>
|
||
|
||
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// imagenes.js</span>
|
||
|
||
<span class="cm">/**
|
||
* 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
|
||
*/</span>
|
||
<span class="kd">function</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura</span><span class="p">,</span> <span class="nx">altura</span><span class="p">)</span> <span class="p">{</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="c1">// Exportamos para que pueda ser invocado desde otros lugares</span>
|
||
<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="nx">esAnchuraYAlturaCuadrada</span>
|
||
<span class="p">};</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>Ahora hacemos uso de <strong>Jest</strong> para hace el test. Creamos siguiente archivo <code class="highlighter-rouge">imagenes.test.js</code>.</p>
|
||
|
||
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// imagenes.test.js</span>
|
||
|
||
<span class="kd">const</span> <span class="p">{</span><span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">./imagenes</span><span class="dl">'</span><span class="p">);</span>
|
||
|
||
<span class="cm">/* Given */</span>
|
||
|
||
<span class="nx">anchura_1</span> <span class="o">=</span> <span class="mi">500</span><span class="p">;</span>
|
||
<span class="nx">altura_1</span> <span class="o">=</span> <span class="mi">250</span><span class="p">;</span>
|
||
|
||
<span class="nx">anchura_2</span> <span class="o">=</span> <span class="mi">400</span><span class="p">;</span>
|
||
<span class="nx">altura_2</span> <span class="o">=</span> <span class="mi">400</span><span class="p">;</span>
|
||
|
||
<span class="nx">anchura_3</span> <span class="o">=</span> <span class="mf">400.2</span><span class="p">;</span>
|
||
<span class="nx">altura_3</span> <span class="o">=</span> <span class="mi">400</span><span class="p">;</span>
|
||
|
||
<span class="nx">anchura_4</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">foo</span><span class="dl">"</span><span class="p">;</span>
|
||
<span class="nx">altura_4</span> <span class="o">=</span> <span class="mi">150</span><span class="p">;</span>
|
||
|
||
<span class="nx">anchura_5</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span>
|
||
<span class="nx">altura_5</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">boo</span><span class="dl">"</span><span class="p">;</span>
|
||
|
||
|
||
<span class="cm">/* When */</span>
|
||
|
||
<span class="nx">resultados_1</span> <span class="o">=</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura_1</span><span class="p">,</span> <span class="nx">altura_1</span><span class="p">);</span>
|
||
<span class="nx">resultados_2</span> <span class="o">=</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura_2</span><span class="p">,</span> <span class="nx">altura_2</span><span class="p">);</span>
|
||
<span class="nx">resultados_3</span> <span class="o">=</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura_3</span><span class="p">,</span> <span class="nx">altura_3</span><span class="p">);</span>
|
||
<span class="nx">resultados_4</span> <span class="o">=</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura_4</span><span class="p">,</span> <span class="nx">altura_4</span><span class="p">);</span>
|
||
<span class="nx">resultados_5</span> <span class="o">=</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura_5</span><span class="p">,</span> <span class="nx">altura_5</span><span class="p">);</span>
|
||
|
||
|
||
<span class="cm">/* Then */</span>
|
||
|
||
<span class="nx">test</span><span class="p">(</span><span class="dl">'</span><span class="s1">No son iguales</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
||
<span class="nx">expect</span><span class="p">(</span><span class="nx">resultados_1</span><span class="p">).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">false</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
|
||
<span class="nx">test</span><span class="p">(</span><span class="dl">'</span><span class="s1">Son iguales</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
||
<span class="nx">expect</span><span class="p">(</span><span class="nx">resultados_2</span><span class="p">).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
|
||
<span class="nx">test</span><span class="p">(</span><span class="dl">'</span><span class="s1">No son iguales</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
||
<span class="nx">expect</span><span class="p">(</span><span class="nx">resultados_3</span><span class="p">).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">false</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
|
||
<span class="nx">test</span><span class="p">(</span><span class="dl">'</span><span class="s1">No se puede comparar un texto con un número</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
||
<span class="nx">expect</span><span class="p">(</span><span class="nx">resultados_4</span><span class="p">).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">null</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
|
||
<span class="nx">test</span><span class="p">(</span><span class="dl">'</span><span class="s1">No se puede comparar un boolean con un texto</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
||
<span class="nx">expect</span><span class="p">(</span><span class="nx">resultados_5</span><span class="p">).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">null</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>Instalamos la librería <strong>Jest</strong> que será la encargada de realizar los test.</p>
|
||
|
||
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">install</span> <span class="nt">--save-dev</span> jest
|
||
</code></pre></div></div>
|
||
|
||
<p>Y lo ejecutamos.</p>
|
||
|
||
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./node_modules/jest/bin/jest.js
|
||
</code></pre></div></div>
|
||
|
||
<p>Obviamente fallarán todas.</p>
|
||
|
||
<p>Ya sabemos que buscamos, y que debe devolver. Es hora de definir la función.</p>
|
||
|
||
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// imagenes.js</span>
|
||
|
||
<span class="cm">/**
|
||
* 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
|
||
*/</span>
|
||
<span class="kd">function</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura</span><span class="p">,</span> <span class="nx">altura</span><span class="p">)</span> <span class="p">{</span>
|
||
<span class="c1">// Es un número?</span>
|
||
<span class="k">if</span> <span class="p">(</span><span class="nx">anchura</span> <span class="o">===</span> <span class="nb">parseFloat</span><span class="p">(</span><span class="nx">anchura</span><span class="p">)</span> <span class="o">&&</span> <span class="nx">altura</span> <span class="o">===</span> <span class="nb">parseFloat</span><span class="p">(</span><span class="nx">altura</span><span class="p">))</span> <span class="p">{</span>
|
||
<span class="c1">// Es igual?</span>
|
||
<span class="k">return</span> <span class="nx">anchura</span> <span class="o">==</span> <span class="nx">altura</span><span class="p">;</span>
|
||
<span class="p">}</span>
|
||
<span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="c1">// Exportamos para que pueda ser invocado desde otros lugares</span>
|
||
<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="nx">esAnchuraYAlturaCuadrada</span>
|
||
<span class="p">};</span>
|
||
|
||
</code></pre></div></div>
|
||
|
||
<p>Cuando se vuelva a testear comprobarás que pasa todos los casos.</p>
|
||
|
||
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> PASS ./imagenes.test.js
|
||
✓ No son iguales <span class="o">(</span>2 ms<span class="o">)</span>
|
||
✓ Son iguales <span class="o">(</span>1 ms<span class="o">)</span>
|
||
✓ No son iguales
|
||
✓ No se puede comparar un texto con un número <span class="o">(</span>1 ms<span class="o">)</span>
|
||
✓ 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 <span class="nb">test </span>suites.
|
||
</code></pre></div></div>
|
||
|
||
<p>Has sido testigo de todos los pasos típicos en un desarrollo con la metodología TDD.</p>
|
||
|
||
<ol>
|
||
<li>Documentar.</li>
|
||
<li>Crear test.</li>
|
||
<li>Ejecutar el test, recibiendo que falla.</li>
|
||
<li>Crear la funcionalidad.</li>
|
||
<li>Volver a ejecutar, recibiendo un éxito.</li>
|
||
</ol>
|
||
|
||
<p>Si quieres profundizar, puedes explorar mi <a href="/cursos/testing/introducción/">curso gratuito de testing</a> donde podrás conocer otras técnicas e implementaciones en otros lenguajes.</p>
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://programadorwebvalencia.com/aprende-a-estructurar-un-test/">
|
||
|
||
<img loading="lazy" src="https://programadorwebvalencia.com/img/blog/2021/07/testing.png" alt="Aprende a estructurar un test">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://programadorwebvalencia.com/aprende-a-estructurar-un-test/">Aprende a estructurar un test</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://programadorwebvalencia.com/">Programador Web Valencia</a> <span class="article__date">15 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
<p><img src="https://programadorwebvalencia.com/img/blog/2021/07/testing.png" alt="Comisión" /></p>
|
||
|
||
<p>Usar un flujo de testing de algún tipo (TDD, BDD, E2E…) es una buena <strong>medida de calidad</strong>. No porque te asegure que la función u objeto funcione como esperas, sino porque indica que el proyecto posee una <strong>buena arquitectura</strong> y detrás hay buenos desarrolladores.</p>
|
||
|
||
<p>Hacer testing <strong>no trata solo sobre crear código</strong> que compruebe otro código, sino una <strong>metodología de trabajo profesional</strong> 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.</p>
|
||
|
||
<p>Suele decirse que hacer testing es artesanal, que todos los casos son únicos. No es cierto, disponemos de <strong>patrones o plantillas que nos ayudan</strong> a empezar y estructurar. Y entre las más sencillas y conocidos son encontramos con <strong>Given-When-Then</strong>.</p>
|
||
|
||
<h2 id="plantilla-given-when-then">Plantilla Given-When-Then</h2>
|
||
|
||
<p>Creado por Daniel Terhorst-North y Chris Matts como parte de <strong>BDD</strong> (Behavior-Driven Development), son sugieren un patrón de <strong>3 bloques informales de comentarios</strong> para dividir el código.</p>
|
||
|
||
<ol>
|
||
<li><strong>Given</strong> (Dado): Preparas el escenario del test, como la base de datos, variables o condiciones propicias.</li>
|
||
<li><strong>When</strong> (Cuando): Condiciones que transformarán el contenido.</li>
|
||
<li><strong>Then</strong> (Entonces): Verificas el resultado final, que se ha cumplido todo lo que esperabas o los casos propuestos.</li>
|
||
</ol>
|
||
|
||
<p>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.</p>
|
||
|
||
<p><strong>Dado</strong> 3 casas, [‘paja’, ‘madera’, ‘ladrillos’]…</p>
|
||
|
||
<p><strong>Cuando</strong> sople el lobo sobre cada una…</p>
|
||
|
||
<p><strong>Entonces</strong> debe existir 1 o más casas en pie.</p>
|
||
|
||
<p>Ahora vamos a crear un <strong>ejemplo real en JavaScript</strong> 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 <code class="highlighter-rouge">true</code>, <code class="highlighter-rouge">false</code> o <code class="highlighter-rouge">null</code> dependiendo la situación.</p>
|
||
|
||
<p>Primero definimos la función, pero sin contenido, en <code class="highlighter-rouge">imagenes.js</code>. Podrías considerar que estas documentando.</p>
|
||
|
||
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// imagenes.js</span>
|
||
|
||
<span class="cm">/**
|
||
* 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
|
||
*/</span>
|
||
<span class="kd">function</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura</span><span class="p">,</span> <span class="nx">altura</span><span class="p">)</span> <span class="p">{</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="c1">// Exportamos para que pueda ser invocado desde otros lugares</span>
|
||
<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="nx">esAnchuraYAlturaCuadrada</span>
|
||
<span class="p">};</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>Ahora hacemos uso de <strong>Jest</strong> para hace el test. Creamos siguiente archivo <code class="highlighter-rouge">imagenes.test.js</code>.</p>
|
||
|
||
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// imagenes.test.js</span>
|
||
|
||
<span class="kd">const</span> <span class="p">{</span><span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">./imagenes</span><span class="dl">'</span><span class="p">);</span>
|
||
|
||
<span class="cm">/* Given */</span>
|
||
|
||
<span class="nx">anchura_1</span> <span class="o">=</span> <span class="mi">500</span><span class="p">;</span>
|
||
<span class="nx">altura_1</span> <span class="o">=</span> <span class="mi">250</span><span class="p">;</span>
|
||
|
||
<span class="nx">anchura_2</span> <span class="o">=</span> <span class="mi">400</span><span class="p">;</span>
|
||
<span class="nx">altura_2</span> <span class="o">=</span> <span class="mi">400</span><span class="p">;</span>
|
||
|
||
<span class="nx">anchura_3</span> <span class="o">=</span> <span class="mf">400.2</span><span class="p">;</span>
|
||
<span class="nx">altura_3</span> <span class="o">=</span> <span class="mi">400</span><span class="p">;</span>
|
||
|
||
<span class="nx">anchura_4</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">foo</span><span class="dl">"</span><span class="p">;</span>
|
||
<span class="nx">altura_4</span> <span class="o">=</span> <span class="mi">150</span><span class="p">;</span>
|
||
|
||
<span class="nx">anchura_5</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span>
|
||
<span class="nx">altura_5</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">boo</span><span class="dl">"</span><span class="p">;</span>
|
||
|
||
|
||
<span class="cm">/* When */</span>
|
||
|
||
<span class="nx">resultados_1</span> <span class="o">=</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura_1</span><span class="p">,</span> <span class="nx">altura_1</span><span class="p">);</span>
|
||
<span class="nx">resultados_2</span> <span class="o">=</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura_2</span><span class="p">,</span> <span class="nx">altura_2</span><span class="p">);</span>
|
||
<span class="nx">resultados_3</span> <span class="o">=</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura_3</span><span class="p">,</span> <span class="nx">altura_3</span><span class="p">);</span>
|
||
<span class="nx">resultados_4</span> <span class="o">=</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura_4</span><span class="p">,</span> <span class="nx">altura_4</span><span class="p">);</span>
|
||
<span class="nx">resultados_5</span> <span class="o">=</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura_5</span><span class="p">,</span> <span class="nx">altura_5</span><span class="p">);</span>
|
||
|
||
|
||
<span class="cm">/* Then */</span>
|
||
|
||
<span class="nx">test</span><span class="p">(</span><span class="dl">'</span><span class="s1">No son iguales</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
||
<span class="nx">expect</span><span class="p">(</span><span class="nx">resultados_1</span><span class="p">).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">false</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
|
||
<span class="nx">test</span><span class="p">(</span><span class="dl">'</span><span class="s1">Son iguales</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
||
<span class="nx">expect</span><span class="p">(</span><span class="nx">resultados_2</span><span class="p">).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
|
||
<span class="nx">test</span><span class="p">(</span><span class="dl">'</span><span class="s1">No son iguales</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
||
<span class="nx">expect</span><span class="p">(</span><span class="nx">resultados_3</span><span class="p">).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">false</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
|
||
<span class="nx">test</span><span class="p">(</span><span class="dl">'</span><span class="s1">No se puede comparar un texto con un número</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
||
<span class="nx">expect</span><span class="p">(</span><span class="nx">resultados_4</span><span class="p">).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">null</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
|
||
<span class="nx">test</span><span class="p">(</span><span class="dl">'</span><span class="s1">No se puede comparar un boolean con un texto</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
||
<span class="nx">expect</span><span class="p">(</span><span class="nx">resultados_5</span><span class="p">).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">null</span><span class="p">);</span>
|
||
<span class="p">});</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>Instalamos la librería <strong>Jest</strong> que será la encargada de realizar los test.</p>
|
||
|
||
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">install</span> <span class="nt">--save-dev</span> jest
|
||
</code></pre></div></div>
|
||
|
||
<p>Y lo ejecutamos.</p>
|
||
|
||
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./node_modules/jest/bin/jest.js
|
||
</code></pre></div></div>
|
||
|
||
<p>Obviamente fallarán todas.</p>
|
||
|
||
<p>Ya sabemos que buscamos, y que debe devolver. Es hora de definir la función.</p>
|
||
|
||
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// imagenes.js</span>
|
||
|
||
<span class="cm">/**
|
||
* 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
|
||
*/</span>
|
||
<span class="kd">function</span> <span class="nx">esAnchuraYAlturaCuadrada</span><span class="p">(</span><span class="nx">anchura</span><span class="p">,</span> <span class="nx">altura</span><span class="p">)</span> <span class="p">{</span>
|
||
<span class="c1">// Es un número?</span>
|
||
<span class="k">if</span> <span class="p">(</span><span class="nx">anchura</span> <span class="o">===</span> <span class="nb">parseFloat</span><span class="p">(</span><span class="nx">anchura</span><span class="p">)</span> <span class="o">&&</span> <span class="nx">altura</span> <span class="o">===</span> <span class="nb">parseFloat</span><span class="p">(</span><span class="nx">altura</span><span class="p">))</span> <span class="p">{</span>
|
||
<span class="c1">// Es igual?</span>
|
||
<span class="k">return</span> <span class="nx">anchura</span> <span class="o">==</span> <span class="nx">altura</span><span class="p">;</span>
|
||
<span class="p">}</span>
|
||
<span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="c1">// Exportamos para que pueda ser invocado desde otros lugares</span>
|
||
<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="nx">esAnchuraYAlturaCuadrada</span>
|
||
<span class="p">};</span>
|
||
|
||
</code></pre></div></div>
|
||
|
||
<p>Cuando se vuelva a testear comprobarás que pasa todos los casos.</p>
|
||
|
||
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> PASS ./imagenes.test.js
|
||
✓ No son iguales <span class="o">(</span>2 ms<span class="o">)</span>
|
||
✓ Son iguales <span class="o">(</span>1 ms<span class="o">)</span>
|
||
✓ No son iguales
|
||
✓ No se puede comparar un texto con un número <span class="o">(</span>1 ms<span class="o">)</span>
|
||
✓ 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 <span class="nb">test </span>suites.
|
||
</code></pre></div></div>
|
||
|
||
<p>Has sido testigo de todos los pasos típicos en un desarrollo con la metodología TDD.</p>
|
||
|
||
<ol>
|
||
<li>Documentar.</li>
|
||
<li>Crear test.</li>
|
||
<li>Ejecutar el test, recibiendo que falla.</li>
|
||
<li>Crear la funcionalidad.</li>
|
||
<li>Volver a ejecutar, recibiendo un éxito.</li>
|
||
</ol>
|
||
|
||
<p>Si quieres profundizar, puedes explorar mi <a href="/cursos/testing/introducción/">curso gratuito de testing</a> donde podrás conocer otras técnicas e implementaciones en otros lenguajes.</p>
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/15/ubuntu-touch-ota-18/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/15/ubuntu-touch-ota-18/">Ubuntu Touch OTA-18 mejora la optimización y el uso del teclado</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://www.muylinux.com">MuyLinux</a> <span class="article__date">15 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
Ubuntu Touch OTA-18 ya está disponible con mejoras en la optimización y la corrección de algunos fallos y carencias, pero manteniendo la base de Ubuntu 16.04 mientras los desarrolladores siguen trabajando en la transición hacia 20.04. En lo que respecta[...]
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blogs.windows.com/msedgedev/2021/07/15/opt-in-extended-stable-release-cycle/">
|
||
|
||
<img loading="lazy" src="https://blogs.windows.com/wp-content/uploads/prod/sites/33/2021/06/cropped-browser-icon-logo-32x32.jpg" alt="How to opt-in to the Extended Stable release cycle option beginning with Microsoft Edge 94">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blogs.windows.com/msedgedev/2021/07/15/opt-in-extended-stable-release-cycle/">How to opt-in to the Extended Stable release cycle option beginning with Microsoft Edge 94</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blogs.windows.com/msedgedev">Microsoft Edge Blog</a> <span class="article__date">15 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
<p>In March, we announced that Microsoft Edge would be moving from a <a href="https://blogs.windows.com/msedgedev/2021/03/12/new-release-cycles-microsoft-edge-extended-stable/">6-week to a 4-week release cycle cadence</a> to deliver more innovation to u</p>
|
||
<p>The post <a rel="nofollow" href="https://blogs.windows.com/msedgedev/2021/07/15/opt-in-extended-stable-release-cycle/">How to opt-in to the Extended Stable release cycle option beginning with Microsoft Edge 94</a> appeared first on <a rel="nofollow" href="https://blogs.windows.com/msedgedev">Microsoft Edge Blog</a>.</p>
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://github.blog/2021-07-15-student-leaders-github-campus-tv-next-level/">
|
||
|
||
<img loading="lazy" src="https://github.blog/wp-content/uploads/2019/01/cropped-github-favicon-512.png?fit=32%2C32" alt="Student leaders are taking GitHub Campus TV to the next level">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://github.blog/2021-07-15-student-leaders-github-campus-tv-next-level/">Student leaders are taking GitHub Campus TV to the next level</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://github.blog">The GitHub Blog</a> <span class="article__date">15 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
The GitHub Education Stream Team is adding new shows. Job-hunting graduate? New to coding? No matter where you are, there's a show for you.
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/detenidas-en-espana-16-personas-por-malware-bancario-estafa.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/detenidas-en-espana-16-personas-por-malware-bancario-estafa.html">Detenidas en España 16 personas por estafar 3,5 millones de euros con malware Grandoreiro y Mekotio</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">15 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/actualizaciones-de-seguridad-criticas-productos-microsoft-y-otros.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/actualizaciones-de-seguridad-criticas-productos-microsoft-y-otros.html">Actualizaciones de seguridad productos Microsoft, Adobe, Android, TomCat, Cisco, et</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">15 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/gmail-quiere-acabar-con-el-phishing-gracias-BIMI.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/gmail-quiere-acabar-con-el-phishing-gracias-BIMI.html">Gmail quiere acabar con el phishing gracias al BIMI</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">15 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/14/le9-poca-ram-linux/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/14/le9-poca-ram-linux/">‘le9’, un parche para mitigar la escasez de RAM en Linux</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://www.muylinux.com">MuyLinux</a> <span class="article__date">14 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
El escritorio Linux se enfrenta desde hace tiempo (puede que desde siempre) a una extraña paradoja. Por un lado, es un sistema al que se recurre bastante para resucitar hardware antiguo gracias a su menor consumo de recursos frente a[...]
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://www.exocomics.com/669">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://www.exocomics.com/669">669</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://www.exocomics.com">Extra Ordinary</a> <span class="article__date">14 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://evercade.co.uk/evercade-announces-renovation-collection-1/">
|
||
|
||
<img loading="lazy" src="https://evercade.co.uk/wp-content/uploads/2021/04/cropped-heart-32x32-1.png" alt="Evercade Announces Renovation Collection 1 – Coming Early 2022">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://evercade.co.uk/evercade-announces-renovation-collection-1/">Evercade Announces Renovation Collection 1 – Coming Early 2022</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://evercade.co.uk">Evercade</a> <span class="article__date">14 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
<p>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... <a class="view-article" href="https://evercade.co.uk/evercade-announces-renovation-collection-1/">View Article</a></p>
|
||
<p>The post <a rel="nofollow" href="https://evercade.co.uk/evercade-announces-renovation-collection-1/">Evercade Announces Renovation Collection 1 – Coming Early 2022</a> appeared first on <a rel="nofollow" href="https://evercade.co.uk">Evercade</a>.</p>
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/14/tails-4-20/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/14/tails-4-20/">Tails 4.20 refuerza su conexión a la red Tor</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://www.muylinux.com">MuyLinux</a> <span class="article__date">14 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
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,[...]
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/intervenido-en-malaga-un-dron-profesional-transporte-drogas.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/intervenido-en-malaga-un-dron-profesional-transporte-drogas.html">Intervenido en Málaga un dron de 4,35 metros de envergadura acondicionado para el transporte de droga entre Marruecos y España</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">14 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/mozilla-vpn-ya-esta-disponible-en-espana.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/mozilla-vpn-ya-esta-disponible-en-espana.html">Mozilla VPN ya está disponible en España</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">14 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://www.manueluberti.eu//emacs/2021/07/14/dired/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://www.manueluberti.eu//emacs/2021/07/14/dired/">Reuse Dired buffers</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://www.manueluberti.eu">Manuel Uberti</a> <span class="article__date">14 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
<p>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:
|
||
<code class="language-plaintext highlighter-rouge">dired-kill-when-opening-new-dired-buffer</code>. I will let the documentation speak for
|
||
itself:</p>
|
||
|
||
<blockquote>
|
||
<p>dired-kill-when-opening-new-dired-buffer is a variable defined in ‘dired.el’.</p>
|
||
|
||
<p>Its value is t<br />
|
||
Original value was nil</p>
|
||
|
||
<p>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.</p>
|
||
|
||
<p>If non-nil, kill the current buffer when selecting a new directory.</p>
|
||
</blockquote>
|
||
|
||
<p>Setting this new option to <code class="language-plaintext highlighter-rouge">t</code> means that pressing <kbd>RET</kbd> or <kbd>^</kbd> in a Dired buffer will
|
||
reuse the existing buffer. This is something I required a while ago (<a href="https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20598">#20598</a>) and
|
||
that up until today I had been hacking up poorly in my <code class="language-plaintext highlighter-rouge">.init.el</code>.</p>
|
||
|
||
<p>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.</p>
|
||
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://www.manueluberti.eu//emacs/2021/07/14/dired/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://www.manueluberti.eu//emacs/2021/07/14/dired/">Reuse Dired buffers</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://www.manueluberti.eu">Manuel Uberti</a> <span class="article__date">14 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
<p>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:
|
||
<code class="language-plaintext highlighter-rouge">dired-kill-when-opening-new-dired-buffer</code>. I will let the documentation speak for
|
||
itself:</p>
|
||
|
||
<blockquote>
|
||
<p>dired-kill-when-opening-new-dired-buffer is a variable defined in ‘dired.el’.</p>
|
||
|
||
<p>Its value is t<br />
|
||
Original value was nil</p>
|
||
|
||
<p>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.</p>
|
||
|
||
<p>If non-nil, kill the current buffer when selecting a new directory.</p>
|
||
</blockquote>
|
||
|
||
<p>Setting this new option to <code class="language-plaintext highlighter-rouge">t</code> means that pressing <kbd>RET</kbd> or <kbd>^</kbd> in a Dired buffer will
|
||
reuse the existing buffer. This is something I required a while ago (<a href="https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20598">#20598</a>) and
|
||
that up until today I had been hacking up poorly in my <code class="language-plaintext highlighter-rouge">.init.el</code>.</p>
|
||
|
||
<p>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.</p>
|
||
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="http://neofronteras.com/?p=7491">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="http://neofronteras.com/?p=7491">Una cápsula del tiempo para Lucy</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="http://neofronteras.com">NeoFronteras</a> <span class="article__date">13 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
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. […]
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/13/the-gnome-way/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/13/the-gnome-way/">«The GNOME Way»: Flatpak es el futuro, el escritorio tradicional ha muerto</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://www.muylinux.com">MuyLinux</a> <span class="article__date">13 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
Tobias Bernard, diseñador de Purism que contribuye a GNOME, ha publicado una interesante entrada en los blogs oficiales del entorno en la que explica, según su punto de vista, la dirección que ha tomado el proyecto, además de recordar sus[...]
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://github.blog/2021-07-13-whats-new-github-changelog-june-2021/">
|
||
|
||
<img loading="lazy" src="https://github.blog/wp-content/uploads/2019/01/cropped-github-favicon-512.png?fit=32%2C32" alt="What’s new from GitHub Changelog? June 2021 Recap">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://github.blog/2021-07-13-whats-new-github-changelog-june-2021/">What’s new from GitHub Changelog? June 2021 Recap</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://github.blog">The GitHub Blog</a> <span class="article__date">13 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
This month, we have some exciting updates to share. A lot of you have welcomed the improvements to your ability to sync a forked repo with upstream from the web UI, add video on issues
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/fallo-de-seguridad-en-la-web-vacunacion-covid-catalunya-datos-privados.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/fallo-de-seguridad-en-la-web-vacunacion-covid-catalunya-datos-privados.html">Fallo de seguridad en la web Vacunación Covid de Cataluña expone datos privados pacientes</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">13 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://evercade.co.uk/indie-heroes-the-games/">
|
||
|
||
<img loading="lazy" src="https://evercade.co.uk/wp-content/uploads/2021/04/cropped-heart-32x32-1.png" alt="Indie Heroes – The Games">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://evercade.co.uk/indie-heroes-the-games/">Indie Heroes – The Games</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://evercade.co.uk">Evercade</a> <span class="article__date">13 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
<p>  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... <a class="view-article" href="https://evercade.co.uk/indie-heroes-the-games/">View Article</a></p>
|
||
<p>The post <a rel="nofollow" href="https://evercade.co.uk/indie-heroes-the-games/">Indie Heroes – The Games</a> appeared first on <a rel="nofollow" href="https://evercade.co.uk">Evercade</a>.</p>
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/herramientas-EDR-endpoint-detection-and-response.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/herramientas-EDR-endpoint-detection-and-response.html">Herramientas Endpoint Detection and Response EDR</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">13 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="http://ishadeed.com/article/compare-design-to-code-result/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="http://ishadeed.com/article/compare-design-to-code-result/">Comparing Design Mockups To Code Result</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="http://ishadeed.com/">Ahmad Shadeed Blog</a> <span class="article__date">13 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://www.freebsd.org/news/newsflash/#2021-07-13:1">
|
||
|
||
<img loading="lazy" src="https://www.FreeBSD.org/logo/logo-full.png" alt="">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://www.freebsd.org/news/newsflash/#2021-07-13:1"></a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://www.FreeBSD.org/news/">FreeBSD News Flash</a> <span class="article__date">13 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
|
||
|
||
Enhanced commit privileges: Philip Paeps (src, ports, doc)
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://thoughtbot.com/blog/new-case-study-a-look-at-discovery-questions">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://thoughtbot.com/blog/new-case-study-a-look-at-discovery-questions">New Case Study & A Look at Discovery Questions</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://thoughtbot.com/blog">Giant Robots Smashing Into Other Giant Robots</a> <span class="article__date">13 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
We are exited to share a new case study featuring our work with Grandstand and also highlighting the Discovery work that helped them quickly plan the right approach.
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://github.blog/2021-07-12-adding-support-cross-cluster-associations-rails-7/">
|
||
|
||
<img loading="lazy" src="https://github.blog/wp-content/uploads/2019/01/cropped-github-favicon-512.png?fit=32%2C32" alt="Adding support for cross-cluster associations to Rails 7">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://github.blog/2021-07-12-adding-support-cross-cluster-associations-rails-7/">Adding support for cross-cluster associations to Rails 7</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://github.blog">The GitHub Blog</a> <span class="article__date">12 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
At GitHub, we recently added a new feature to Rails that will be available in 7.0: support for handling associations across database clusters.
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/12/solus-4-3/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://www.muylinux.com/2021/07/12/solus-4-3/">Disponible Solus 4.3 con soporte para Radeon RX 6000 y el DualSense</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://www.muylinux.com">MuyLinux</a> <span class="article__date">12 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
Solus 4.3 ha sido publicado con muchas mejoras de interés que abarcan las gráficas Radeon de última generación (RX 6000), el soporte multimedia, el interesante Firefox 89 ofrecido de manera predeterminada y la versión más reciente (10.5.3) del escritorio Budgie,[...]
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://au-agenda.com/lincontrolat/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://au-agenda.com/lincontrolat/">L’incontrolat</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://au-agenda.com">AU Agenda</a> <span class="article__date">12 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
<p>La entrada <a rel="nofollow" href="https://au-agenda.com/lincontrolat/">L’incontrolat</a> aparece primero en <a rel="nofollow" href="https://au-agenda.com">AU Agenda</a>.</p>
|
||
<p>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 […]</p>
|
||
<p>La entrada <a rel="nofollow" href="https://au-agenda.com/lincontrolat/">L’incontrolat</a> aparece primero en <a rel="nofollow" href="https://au-agenda.com">AU Agenda</a>.</p>
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://tonsky.me/blog/icfpc-2021/">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://tonsky.me/blog/icfpc-2021/">Zig, Skia, Clojure, Geometry and the Japanese TV Show: ICFP Contest 2021</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://tonsky.me/">tonsky.me</a> <span class="article__date">12 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
4-day coding marathon
|
||
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://diarioestoico.com/memento-mori-estoicismo/">
|
||
|
||
<img loading="lazy" src="https://diarioestoico.com/wp-content/uploads/2020/03/cropped-logo-estoico-footer-150x150-1-32x32.png" alt="MEMENTO MORI">
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://diarioestoico.com/memento-mori-estoicismo/">MEMENTO MORI</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://diarioestoico.com">Diario Estoico</a> <span class="article__date">11 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
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 […]
|
||
</main>
|
||
</article>
|
||
|
||
<article class="feed__article article">
|
||
<header class="article__header">
|
||
<p class="article__header-img">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/alternativas-correo-gmail-basadas-en-la-privacidad-primero.html">
|
||
|
||
<canvas class="article__random-background"></canvas>
|
||
|
||
</a>
|
||
</p>
|
||
<div class="article__titles">
|
||
<h1 class="article__title">
|
||
<a target="_blank" href="https://blog.elhacker.net/2021/07/alternativas-correo-gmail-basadas-en-la-privacidad-primero.html">Alternativas correo Gmail basadas en la privacidad</a>
|
||
</h1>
|
||
<h2 class="article__feed"><a target="_blank" href="https://blog.elhacker.net/">Blog elhacker.NET</a> <span class="article__date">11 07 2021</span></h2>
|
||
</div>
|
||
</header>
|
||
<main class="container article__main">
|
||
|
||
</main>
|
||
</article>
|
||
|
||
</main>
|
||
</div>
|
||
<footer class="footer">
|
||
<hr class="separator">
|
||
<p class="footer__text">
|
||
Generated with <a class="footer__link" href="https://github.com/tanrax/RSSpaper">RSSpaper</a> and a lot of <span class="footer__heard">❤️</span>️
|
||
</p>
|
||
</footer>
|
||
<script defer>
|
||
|
||
function getRandomNumber(min, max) {
|
||
return Math.random() * (max - min) + min;
|
||
}
|
||
|
||
function getRandomHexColor() {
|
||
return '#'.concat(Math.floor(Math.random() * 16777215).toString(16));
|
||
}
|
||
|
||
// Random background
|
||
document.querySelectorAll('.article__random-background').forEach((canvas) => {
|
||
canvas.style.backgroundImage = `linear-gradient(${getRandomNumber(0, 360)}deg, ${getRandomHexColor()}, ${getRandomHexColor()})`;
|
||
});
|
||
|
||
</script>
|
||
</body>
|
||
</html>
|