diff options
Diffstat (limited to 'articles')
68 files changed, 1415 insertions, 105 deletions
diff --git a/articles/asciideck/index.html b/articles/asciideck/index.html index 60c5caa7..cc8489dd 100644 --- a/articles/asciideck/index.html +++ b/articles/asciideck/index.html @@ -109,6 +109,14 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.0.0-pre.4/index.html b/articles/cowboy-2.0.0-pre.4/index.html index bc90fa98..485cd940 100644 --- a/articles/cowboy-2.0.0-pre.4/index.html +++ b/articles/cowboy-2.0.0-pre.4/index.html @@ -128,6 +128,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.0.0-rc.1/index.html b/articles/cowboy-2.0.0-rc.1/index.html index 592a64e2..a12f6317 100644 --- a/articles/cowboy-2.0.0-rc.1/index.html +++ b/articles/cowboy-2.0.0-rc.1/index.html @@ -99,6 +99,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.0.0-rc.2/index.html b/articles/cowboy-2.0.0-rc.2/index.html index 50911725..4a1f11af 100644 --- a/articles/cowboy-2.0.0-rc.2/index.html +++ b/articles/cowboy-2.0.0-rc.2/index.html @@ -92,6 +92,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.0.0/index.html b/articles/cowboy-2.0.0/index.html index 513d86c8..f3ef2a8a 100644 --- a/articles/cowboy-2.0.0/index.html +++ b/articles/cowboy-2.0.0/index.html @@ -98,6 +98,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.1.0/index.html b/articles/cowboy-2.1.0/index.html index 2d45e0cd..2880ce5d 100644 --- a/articles/cowboy-2.1.0/index.html +++ b/articles/cowboy-2.1.0/index.html @@ -95,6 +95,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.11.0/index.html b/articles/cowboy-2.11.0/index.html index 561c3622..e9e52b70 100644 --- a/articles/cowboy-2.11.0/index.html +++ b/articles/cowboy-2.11.0/index.html @@ -88,6 +88,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.12.0/index.html b/articles/cowboy-2.12.0/index.html index b0f22169..9f8d123c 100644 --- a/articles/cowboy-2.12.0/index.html +++ b/articles/cowboy-2.12.0/index.html @@ -89,6 +89,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.13.0-performance/index.html b/articles/cowboy-2.13.0-performance/index.html index e1f3d183..178c78ae 100644 --- a/articles/cowboy-2.13.0-performance/index.html +++ b/articles/cowboy-2.13.0-performance/index.html @@ -103,6 +103,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.13.0/index.html b/articles/cowboy-2.13.0/index.html new file mode 100644 index 00000000..cbbb4a86 --- /dev/null +++ b/articles/cowboy-2.13.0/index.html @@ -0,0 +1,377 @@ +<!DOCTYPE html> +<html lang="en"> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="description" content=""> + <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara"> + + <title>Nine Nines: Cowboy 2.13</title> + + <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'> + <link href="/css/99s.css?r=7" rel="stylesheet"> + + <link rel="shortcut icon" href="/img/ico/favicon.ico"> + <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png"> + <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png"> + <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png"> + + </head> + + +<body class=""> + <header id="page-head"> + <div id="topbar" class="container"> + <div class="row"> + <div class="span2"> + <h1 id="logo"><a href="/" title="99s">99s</a></h1> + </div> + <div class="span10"> + + <div id="side-header"> + <nav> + <ul> + <li class="active"><a title="Hear my thoughts" href="/articles">Articles</a></li> + <li><a title="Watch my talks" href="/talks">Talks</a></li> + <li><a title="Read the docs" href="/docs">Documentation</a></li> + <li><a title="Request my services" href="/services">Consulting & Training</a></li> + </ul> + </nav> + <ul id="social"> + <li> + <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a> + </li> + <li> + <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a> + </li> + </ul> + </div> + </div> + </div> + </div> + + +</header> + +<div id="contents"> +<div class="container"> +<div class="row"> +<div class="span9 maincol"> + +<article class="blog_item"> +<header> + <h1 class="lined-header"><span>Cowboy 2.13</span></h1> + <p class="date"> + <span class="year">2025</span> + <span class="day-month">18 Feb</span> + </p> +</header> + +<p>Cowboy <code>2.13.0</code> has been released!</p> +<p>Cowboy 2.13 focuses on improving the performance of Websocket, as well as the HTTP protocols. It also contains a variety of new features and bug fixes.</p> +<p>The performance improvements were detailed in the <a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a> article.</p> +<p>Cowboy 2.13 is the first release to feature experimental support for the HTTP/3 protocol, including Websocket over HTTP/3.</p> +<p>Cowboy 2.13 requires Erlang/OTP 24.0 or greater. It is tested and supported on Linux, macOS and Windows.</p> +<p>A complete list of changes can be found in the migration guide: <a href="https://ninenines.eu/docs/en/cowboy/2.13/guide/migrating_from_2.12/">Migrating from Cowboy 2.12 to 2.13</a>.</p> +<p>You can donate to this project via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>.</p> +<p>As usual, feedback is appreciated, and issues or questions should be sent via Github tickets or discussions. We also have a new Discord server. <a href="https://discord.gg/x25nNq2fFE">Join Erlang OSS Discord now!</a></p> + + +</article> +</div> + +<div class="span3 sidecol"> +<h3>More articles</h3> +<ul id="articles-nav" class="extra_margin"> + + + + + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.12.0/">Cowboy 2.12</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.11.0/">Cowboy 2.11</a></li> + + + + <li><a href="https://ninenines.eu/articles/otp-26/">Erlang/OTP 26</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0/">Gun 2.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0-rc.1/">Gun 2.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.0.0/">Ranch 2.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.8.0/">Cowboy 2.8</a></li> + + + + <li><a href="https://ninenines.eu/articles/the-gateway-trilogy/">The Gateway Trilogy</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li> + + + + <li><a href="https://ninenines.eu/articles/merry-christmas-2019/">Merry Christmas 2019: New Beginnings</a></li> + + + + <li><a href="https://ninenines.eu/articles/github-sponsors/">GitHub Sponsors</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.7.0/">Cowboy 2.7</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.1/">Gun 2.0 pre-release 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.0.0-rc.1/">Ranch 2.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/joe_the_rubber_duck/">Joe Armstrong the rubber duck</a></li> + + + + <li><a href="https://ninenines.eu/articles/merry-christmas-2018/">Merry Christmas 2018: A Recap</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.6.0/">Cowboy 2.6</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-1.7.0/">Ranch 1.7</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.5.0/">Cowboy 2.5</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.3.0/">Gun 1.3</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.2.0/">Gun 1.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-1.6.0/">Ranch 1.6</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.0.0/">Gun 1.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/asciideck/">Asciideck: Asciidoc for Erlang</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.0.0-rc.1/">Gun 1.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.4.0/">Cowboy 2.4</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.3.0/">Cowboy 2.3</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.2.0/">Cowboy 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.1.0/">Cowboy 2.1</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0/">Cowboy 2.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.2/">Cowboy 2.0 release candidate 2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.1/">Cowboy 2.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/the-elephant-in-the-room/">The elephant in the room</a></li> + + + + <li><a href="https://ninenines.eu/articles/dont-let-it-crash/">Don't let it crash</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-pre.4/">Cowboy 2.0 pre-release 4</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-1.3/">Ranch 1.3</a></li> + + + + <li><a href="https://ninenines.eu/articles/ml-archives/">Mailing list archived</a></li> + + + + <li><a href="https://ninenines.eu/articles/website-update/">Website update</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang-validate-utf8/">Validating UTF-8 binaries with Erlang</a></li> + + + + <li><a href="https://ninenines.eu/articles/on-open-source/">On open source</a></li> + + + + <li><a href="https://ninenines.eu/articles/the-story-so-far/">The story so far</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy2-qs/">Cowboy 2.0 and query strings</a></li> + + + + <li><a href="https://ninenines.eu/articles/january-2014-status/">January 2014 status</a></li> + + + + <li><a href="https://ninenines.eu/articles/farwest-funded/">Farwest got funded!</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang.mk-and-relx/">Build Erlang releases with Erlang.mk and Relx</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Xerl: intermediate module</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.4-expression-separator/">Xerl: expression separator</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang-scalability/">Erlang Scalability</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.3-atomic-expressions/">Xerl: atomic expressions</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.2-two-modules/">Xerl: two modules</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Xerl: empty modules</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-ftp/">Build an FTP Server with Ranch in 30 Minutes</a></li> + + + + <li><a href="https://ninenines.eu/articles/tictactoe/">Erlang Tic Tac Toe</a></li> + + +</ul> + +<h3>Feedback</h3> +<p>Feel free to <a href="mailto:[email protected]">email us</a> +if you found any mistake or need clarification on any of the +articles.</p> + +</div> +</div> +</div> +</div> + + <footer> + <div class="container"> + <div class="row"> + <div class="span6"> + <p id="scroll-top"><a href="#">↑ Scroll to top</a></p> + <nav> + <ul> + <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li> + </ul> + </nav> + </div> + <div class="span6 credits"> + <p><img src="/img/footer_logo.png"></p> + <p>Copyright © Loïc Hoguin 2012-2018</p> + </div> + </div> + </div> + </footer> + + + <script src="/js/custom.js"></script> + </body> +</html> + diff --git a/articles/cowboy-2.2.0/index.html b/articles/cowboy-2.2.0/index.html index 49684942..e7d3bf2d 100644 --- a/articles/cowboy-2.2.0/index.html +++ b/articles/cowboy-2.2.0/index.html @@ -93,6 +93,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.3.0/index.html b/articles/cowboy-2.3.0/index.html index c15697e2..c47739af 100644 --- a/articles/cowboy-2.3.0/index.html +++ b/articles/cowboy-2.3.0/index.html @@ -85,6 +85,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.4.0/index.html b/articles/cowboy-2.4.0/index.html index c2974367..efb0b980 100644 --- a/articles/cowboy-2.4.0/index.html +++ b/articles/cowboy-2.4.0/index.html @@ -87,6 +87,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.5.0/index.html b/articles/cowboy-2.5.0/index.html index 02e99619..6bb89dc8 100644 --- a/articles/cowboy-2.5.0/index.html +++ b/articles/cowboy-2.5.0/index.html @@ -91,6 +91,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.6.0/index.html b/articles/cowboy-2.6.0/index.html index b662f884..97dc5d90 100644 --- a/articles/cowboy-2.6.0/index.html +++ b/articles/cowboy-2.6.0/index.html @@ -88,6 +88,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.7.0/index.html b/articles/cowboy-2.7.0/index.html index 719b4506..325dc752 100644 --- a/articles/cowboy-2.7.0/index.html +++ b/articles/cowboy-2.7.0/index.html @@ -89,6 +89,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.8.0/index.html b/articles/cowboy-2.8.0/index.html index ef5fe655..ab6562f3 100644 --- a/articles/cowboy-2.8.0/index.html +++ b/articles/cowboy-2.8.0/index.html @@ -88,6 +88,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy-2.9.0/index.html b/articles/cowboy-2.9.0/index.html index c54f858a..d915ec37 100644 --- a/articles/cowboy-2.9.0/index.html +++ b/articles/cowboy-2.9.0/index.html @@ -87,6 +87,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/cowboy2-qs/index.html b/articles/cowboy2-qs/index.html index 1d7c38a4..0807bf78 100644 --- a/articles/cowboy2-qs/index.html +++ b/articles/cowboy2-qs/index.html @@ -129,6 +129,14 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/discord-server/index.html b/articles/discord-server/index.html index fac351ca..013679b6 100644 --- a/articles/discord-server/index.html +++ b/articles/discord-server/index.html @@ -85,6 +85,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/dont-let-it-crash/index.html b/articles/dont-let-it-crash/index.html index d5e9ed8b..ddb01724 100644 --- a/articles/dont-let-it-crash/index.html +++ b/articles/dont-let-it-crash/index.html @@ -104,6 +104,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/erlang-meetup-10-septembre-2019/index.html b/articles/erlang-meetup-10-septembre-2019/index.html index 6e75b007..f6901661 100644 --- a/articles/erlang-meetup-10-septembre-2019/index.html +++ b/articles/erlang-meetup-10-septembre-2019/index.html @@ -84,6 +84,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/erlang-scalability/index.html b/articles/erlang-scalability/index.html index 1de58a9e..77064a99 100644 --- a/articles/erlang-scalability/index.html +++ b/articles/erlang-scalability/index.html @@ -116,6 +116,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/erlang-validate-utf8/index.html b/articles/erlang-validate-utf8/index.html index 1122acc5..23ac359c 100644 --- a/articles/erlang-validate-utf8/index.html +++ b/articles/erlang-validate-utf8/index.html @@ -232,6 +232,14 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/erlang.mk-and-relx/index.html b/articles/erlang.mk-and-relx/index.html index 1faf7d59..464d3fe2 100644 --- a/articles/erlang.mk-and-relx/index.html +++ b/articles/erlang.mk-and-relx/index.html @@ -118,6 +118,14 @@ cowboy-0.8.5 erlydtl-0.7.0 ninenines-0.2.0 stdlib-1.19.1</pre></div></div> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/erlanger-playbook-september-2015-update/index.html b/articles/erlanger-playbook-september-2015-update/index.html index ee0ec3e2..d10fa7a2 100644 --- a/articles/erlanger-playbook-september-2015-update/index.html +++ b/articles/erlanger-playbook-september-2015-update/index.html @@ -87,6 +87,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/erlanger-playbook/index.html b/articles/erlanger-playbook/index.html index 92e8d252..ba18fd2d 100644 --- a/articles/erlanger-playbook/index.html +++ b/articles/erlanger-playbook/index.html @@ -128,6 +128,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/farwest-funded/index.html b/articles/farwest-funded/index.html index ee501b92..f9dba26c 100644 --- a/articles/farwest-funded/index.html +++ b/articles/farwest-funded/index.html @@ -88,6 +88,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/github-sponsors/index.html b/articles/github-sponsors/index.html index 00a68b0e..83f77f28 100644 --- a/articles/github-sponsors/index.html +++ b/articles/github-sponsors/index.html @@ -85,6 +85,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/gun-1.0.0-rc.1/index.html b/articles/gun-1.0.0-rc.1/index.html index 1cbdeb33..0dd68793 100644 --- a/articles/gun-1.0.0-rc.1/index.html +++ b/articles/gun-1.0.0-rc.1/index.html @@ -89,6 +89,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/gun-1.0.0/index.html b/articles/gun-1.0.0/index.html index 531904fa..9ad2fa24 100644 --- a/articles/gun-1.0.0/index.html +++ b/articles/gun-1.0.0/index.html @@ -88,6 +88,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/gun-1.2.0/index.html b/articles/gun-1.2.0/index.html index 998ada9c..ba71b510 100644 --- a/articles/gun-1.2.0/index.html +++ b/articles/gun-1.2.0/index.html @@ -88,6 +88,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/gun-1.3.0/index.html b/articles/gun-1.3.0/index.html index 21261580..cbd76a3c 100644 --- a/articles/gun-1.3.0/index.html +++ b/articles/gun-1.3.0/index.html @@ -86,6 +86,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/gun-2.0.0-pre.1/index.html b/articles/gun-2.0.0-pre.1/index.html index 69729fa6..fb3537b6 100644 --- a/articles/gun-2.0.0-pre.1/index.html +++ b/articles/gun-2.0.0-pre.1/index.html @@ -93,6 +93,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/gun-2.0.0-pre.2/index.html b/articles/gun-2.0.0-pre.2/index.html index 3caaaad0..ae2b7fc3 100644 --- a/articles/gun-2.0.0-pre.2/index.html +++ b/articles/gun-2.0.0-pre.2/index.html @@ -91,6 +91,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/gun-2.0.0-rc.1/index.html b/articles/gun-2.0.0-rc.1/index.html index a26bb8df..32c675ff 100644 --- a/articles/gun-2.0.0-rc.1/index.html +++ b/articles/gun-2.0.0-rc.1/index.html @@ -96,6 +96,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/gun-2.0.0/index.html b/articles/gun-2.0.0/index.html index 21f6095b..c426e3f6 100644 --- a/articles/gun-2.0.0/index.html +++ b/articles/gun-2.0.0/index.html @@ -98,6 +98,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/gun-2.2.0/index.html b/articles/gun-2.2.0/index.html new file mode 100644 index 00000000..79d967ff --- /dev/null +++ b/articles/gun-2.2.0/index.html @@ -0,0 +1,381 @@ +<!DOCTYPE html> +<html lang="en"> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="description" content=""> + <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara"> + + <title>Nine Nines: Gun 2.2</title> + + <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'> + <link href="/css/99s.css?r=7" rel="stylesheet"> + + <link rel="shortcut icon" href="/img/ico/favicon.ico"> + <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png"> + <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png"> + <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png"> + + </head> + + +<body class=""> + <header id="page-head"> + <div id="topbar" class="container"> + <div class="row"> + <div class="span2"> + <h1 id="logo"><a href="/" title="99s">99s</a></h1> + </div> + <div class="span10"> + + <div id="side-header"> + <nav> + <ul> + <li class="active"><a title="Hear my thoughts" href="/articles">Articles</a></li> + <li><a title="Watch my talks" href="/talks">Talks</a></li> + <li><a title="Read the docs" href="/docs">Documentation</a></li> + <li><a title="Request my services" href="/services">Consulting & Training</a></li> + </ul> + </nav> + <ul id="social"> + <li> + <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a> + </li> + <li> + <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a> + </li> + </ul> + </div> + </div> + </div> + </div> + + +</header> + +<div id="contents"> +<div class="container"> +<div class="row"> +<div class="span9 maincol"> + +<article class="blog_item"> +<header> + <h1 class="lined-header"><span>Gun 2.2</span></h1> + <p class="date"> + <span class="year">2025</span> + <span class="day-month">11 Apr</span> + </p> +</header> + +<p>Gun <code>2.2.0</code> has been released!</p> +<p>Gun 2.2 contains many features and fixes, including an experimental HTTP/3 implementation.</p> +<p>Gun 2.2 is the first release that includes an experimental support for the HTTP/3 protocol. Note that unlike Cowboy, Gun 2.2 does not yet support Websocket over HTTP/3.</p> +<p>Gun 2.2 now sets the appropriate ssl options to perform wildcard certificate matching, which is a requirement for HTTP and previously had to be configured by users.</p> +<p>Gun 2.2 also enables users to send HTTP/2 pings directly, including over tunnels, enabling use cases such as measuring the latency with the server. These pings are separate from the keepalive functionality.</p> +<p>Gun 2.2 also contains various fixes, the most significant of which is a better handling of TLS 1.3 alerts in mTLS scenarios. TLS 1.3 may perform certificate validation after the handshake has completed, leading to the alerts often arriving asynchronously. When an ssl function call returns <code>{error, closed}</code> or equivalent, Gun will now check whether the closure was a result of a TLS alert, and in that case propagate the alert as the error reason to the user. This has also been made to work over tunnels.</p> +<p>HTTP/2 tunneling has also seen a number of improvements.</p> +<p>Gun 2.0 requires Erlang/OTP 24.0 or greater and is tested and supported on Linux, macOS and Windows.</p> +<p>A complete list of changes can be found in the migration guide: <a href="https://ninenines.eu/docs/en/gun/2.2/guide/migrating_from_2.1/">Migrating from Gun 2.1 to 2.2</a>.</p> +<p>I will now focus on implementing HTTP/3 WebTransport in Cowboy and Gun.</p> +<p>You can donate to this project via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>.</p> +<p>As usual, feedback is appreciated, and issues or questions should be sent via Github tickets. Thanks!</p> + + +</article> +</div> + +<div class="span3 sidecol"> +<h3>More articles</h3> +<ul id="articles-nav" class="extra_margin"> + + + + + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.12.0/">Cowboy 2.12</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.11.0/">Cowboy 2.11</a></li> + + + + <li><a href="https://ninenines.eu/articles/otp-26/">Erlang/OTP 26</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0/">Gun 2.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0-rc.1/">Gun 2.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.0.0/">Ranch 2.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.8.0/">Cowboy 2.8</a></li> + + + + <li><a href="https://ninenines.eu/articles/the-gateway-trilogy/">The Gateway Trilogy</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li> + + + + <li><a href="https://ninenines.eu/articles/merry-christmas-2019/">Merry Christmas 2019: New Beginnings</a></li> + + + + <li><a href="https://ninenines.eu/articles/github-sponsors/">GitHub Sponsors</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.7.0/">Cowboy 2.7</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.1/">Gun 2.0 pre-release 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.0.0-rc.1/">Ranch 2.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/joe_the_rubber_duck/">Joe Armstrong the rubber duck</a></li> + + + + <li><a href="https://ninenines.eu/articles/merry-christmas-2018/">Merry Christmas 2018: A Recap</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.6.0/">Cowboy 2.6</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-1.7.0/">Ranch 1.7</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.5.0/">Cowboy 2.5</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.3.0/">Gun 1.3</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.2.0/">Gun 1.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-1.6.0/">Ranch 1.6</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.0.0/">Gun 1.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/asciideck/">Asciideck: Asciidoc for Erlang</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.0.0-rc.1/">Gun 1.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.4.0/">Cowboy 2.4</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.3.0/">Cowboy 2.3</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.2.0/">Cowboy 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.1.0/">Cowboy 2.1</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0/">Cowboy 2.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.2/">Cowboy 2.0 release candidate 2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.1/">Cowboy 2.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/the-elephant-in-the-room/">The elephant in the room</a></li> + + + + <li><a href="https://ninenines.eu/articles/dont-let-it-crash/">Don't let it crash</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-pre.4/">Cowboy 2.0 pre-release 4</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-1.3/">Ranch 1.3</a></li> + + + + <li><a href="https://ninenines.eu/articles/ml-archives/">Mailing list archived</a></li> + + + + <li><a href="https://ninenines.eu/articles/website-update/">Website update</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang-validate-utf8/">Validating UTF-8 binaries with Erlang</a></li> + + + + <li><a href="https://ninenines.eu/articles/on-open-source/">On open source</a></li> + + + + <li><a href="https://ninenines.eu/articles/the-story-so-far/">The story so far</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy2-qs/">Cowboy 2.0 and query strings</a></li> + + + + <li><a href="https://ninenines.eu/articles/january-2014-status/">January 2014 status</a></li> + + + + <li><a href="https://ninenines.eu/articles/farwest-funded/">Farwest got funded!</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang.mk-and-relx/">Build Erlang releases with Erlang.mk and Relx</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Xerl: intermediate module</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.4-expression-separator/">Xerl: expression separator</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang-scalability/">Erlang Scalability</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.3-atomic-expressions/">Xerl: atomic expressions</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.2-two-modules/">Xerl: two modules</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Xerl: empty modules</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-ftp/">Build an FTP Server with Ranch in 30 Minutes</a></li> + + + + <li><a href="https://ninenines.eu/articles/tictactoe/">Erlang Tic Tac Toe</a></li> + + +</ul> + +<h3>Feedback</h3> +<p>Feel free to <a href="mailto:[email protected]">email us</a> +if you found any mistake or need clarification on any of the +articles.</p> + +</div> +</div> +</div> +</div> + + <footer> + <div class="container"> + <div class="row"> + <div class="span6"> + <p id="scroll-top"><a href="#">↑ Scroll to top</a></p> + <nav> + <ul> + <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li> + </ul> + </nav> + </div> + <div class="span6 credits"> + <p><img src="/img/footer_logo.png"></p> + <p>Copyright © Loïc Hoguin 2012-2018</p> + </div> + </div> + </div> + </footer> + + + <script src="/js/custom.js"></script> + </body> +</html> + diff --git a/articles/index.html b/articles/index.html index a6e2b17f..4f10d828 100644 --- a/articles/index.html +++ b/articles/index.html @@ -65,6 +65,45 @@ <article class="blog_item"> <header> + <h2><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></h2> + <p class="date"> + <span class="year">2025</span> + <span class="day-month">11 Apr</span> + </p> + </header> + + <p>Gun 2.2.0 has been released! +Gun 2.2 contains many features and fixes, including an experimental HTTP/3 implementation. +Gun 2.2 is the first release that includes an experimental support for the HTTP/3 protocol. Note that unlike Cowboy, Gun 2.2 does not yet support Websocket over HTTP/3. +Gun 2.2 now sets the appropriate ssl options to perform wildcard certificate matching, which is a requirement for HTTP and previously had to be configured by users.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/gun-2.2.0/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> + <h2><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></h2> + <p class="date"> + <span class="year">2025</span> + <span class="day-month">18 Feb</span> + </p> + </header> + + <p>Cowboy 2.13.0 has been released! +Cowboy 2.13 focuses on improving the performance of Websocket, as well as the HTTP protocols. It also contains a variety of new features and bug fixes. +The performance improvements were detailed in the Performance improvements in Cowboy 2.13 article. +Cowboy 2.13 is the first release to feature experimental support for the HTTP/3 protocol, including Websocket over HTTP/3. +Cowboy 2.13 requires Erlang/OTP 24.0 or greater. It is tested and supported on Linux, macOS and Windows.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/cowboy-2.13.0/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> <h2><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></h2> <p class="date"> <span class="year">2025</span> @@ -390,41 +429,6 @@ Before listing the features please note that this pre-release includes a fix for </p> </article> - <article class="blog_item"> - <header> - <h2><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></h2> - <p class="date"> - <span class="year">2019</span> - <span class="day-month">22 Aug</span> - </p> - </header> - - <p>Erlang meetups are resuming and I will be present at the next one in Paris on the 10th of September. As the meetup and my talk about Gun will be in French the rest of this post will be in French as well. If you are around Paris that night, you are welcome to join and chat, even if you don't speak the language! -Je serai au meetup Erlang le 10 septembre chez Datadog à Paris.</p> - - <p style="text-align:right"> - <a class="read_more" href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Read More</a> - </p> - </article> - - <article class="blog_item"> - <header> - <h2><a href="https://ninenines.eu/articles/ranch-2.0.0-rc.1/">Ranch 2.0 release candidate 1</a></h2> - <p class="date"> - <span class="year">2019</span> - <span class="day-month">18 Jul</span> - </p> - </header> - - <p>Ranch 2.0.0-rc.1 has been released! -We are getting very close to releasing Ranch 2.0! As most of the tremendous programming work was done by contributor Jan Uhlig, I will yield the floor and let him describe what went into this great release. -In Ranch 1.x, there is only one supervisor per Ranch listener to start and manage connection processes. Under high load (many clients rapidly connecting and/or disconnecting), the message queue of this one supervisor could become congested, leading to declining accept rates or a stalled listener.</p> - - <p style="text-align:right"> - <a class="read_more" href="https://ninenines.eu/articles/ranch-2.0.0-rc.1/">Read More</a> - </p> - </article> - <nav class="pagination" role="pagination"> diff --git a/articles/index.xml b/articles/index.xml index 78a3ab74..c800fc26 100644 --- a/articles/index.xml +++ b/articles/index.xml @@ -6,12 +6,37 @@ <description>Recent content in Articles on Nine Nines</description> <generator>Hugo -- gohugo.io</generator> <language>en-us</language> - <lastBuildDate>Mon, 17 Feb 2025 07:00:00 +0100</lastBuildDate> + <lastBuildDate>Fri, 11 Apr 2025 07:00:00 +0100</lastBuildDate> <atom:link href="https://ninenines.eu/articles/index.xml" rel="self" type="application/rss+xml" /> <item> + <title>Gun 2.2</title> + <link>https://ninenines.eu/articles/gun-2.2.0/</link> + <pubDate>Fri, 11 Apr 2025 07:00:00 +0100</pubDate> + + <guid>https://ninenines.eu/articles/gun-2.2.0/</guid> + <description>Gun 2.2.0 has been released! +Gun 2.2 contains many features and fixes, including an experimental HTTP/3 implementation. +Gun 2.2 is the first release that includes an experimental support for the HTTP/3 protocol. Note that unlike Cowboy, Gun 2.2 does not yet support Websocket over HTTP/3. +Gun 2.2 now sets the appropriate ssl options to perform wildcard certificate matching, which is a requirement for HTTP and previously had to be configured by users.</description> + </item> + + <item> + <title>Cowboy 2.13</title> + <link>https://ninenines.eu/articles/cowboy-2.13.0/</link> + <pubDate>Tue, 18 Feb 2025 07:00:00 +0100</pubDate> + + <guid>https://ninenines.eu/articles/cowboy-2.13.0/</guid> + <description>Cowboy 2.13.0 has been released! +Cowboy 2.13 focuses on improving the performance of Websocket, as well as the HTTP protocols. It also contains a variety of new features and bug fixes. +The performance improvements were detailed in the Performance improvements in Cowboy 2.13 article. +Cowboy 2.13 is the first release to feature experimental support for the HTTP/3 protocol, including Websocket over HTTP/3. +Cowboy 2.13 requires Erlang/OTP 24.0 or greater. It is tested and supported on Linux, macOS and Windows.</description> + </item> + + <item> <title>Ranch 2.2</title> <link>https://ninenines.eu/articles/ranch-2.2.0/</link> <pubDate>Mon, 17 Feb 2025 07:00:00 +0100</pubDate> diff --git a/articles/january-2014-status/index.html b/articles/january-2014-status/index.html index 2527056e..7d7aacd1 100644 --- a/articles/january-2014-status/index.html +++ b/articles/january-2014-status/index.html @@ -114,6 +114,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/joe_the_rubber_duck/index.html b/articles/joe_the_rubber_duck/index.html index 299fc8ff..2f59922b 100644 --- a/articles/joe_the_rubber_duck/index.html +++ b/articles/joe_the_rubber_duck/index.html @@ -88,6 +88,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/merry-christmas-2018/index.html b/articles/merry-christmas-2018/index.html index 1eebacbb..732f123b 100644 --- a/articles/merry-christmas-2018/index.html +++ b/articles/merry-christmas-2018/index.html @@ -95,6 +95,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/merry-christmas-2019/index.html b/articles/merry-christmas-2019/index.html index 45f77e14..91957286 100644 --- a/articles/merry-christmas-2019/index.html +++ b/articles/merry-christmas-2019/index.html @@ -91,6 +91,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/ml-archives/index.html b/articles/ml-archives/index.html index 4d5b72d0..525ff222 100644 --- a/articles/ml-archives/index.html +++ b/articles/ml-archives/index.html @@ -85,6 +85,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/on-open-source/index.html b/articles/on-open-source/index.html index 26f8f131..35c9f683 100644 --- a/articles/on-open-source/index.html +++ b/articles/on-open-source/index.html @@ -97,6 +97,14 @@ much left to look at today</a>. This was followed by a <a href="https://github.c + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/otp-26/index.html b/articles/otp-26/index.html index 1498526c..da40f8d4 100644 --- a/articles/otp-26/index.html +++ b/articles/otp-26/index.html @@ -92,6 +92,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/page/2/index.html b/articles/page/2/index.html index 4596a0c1..4fc0096a 100644 --- a/articles/page/2/index.html +++ b/articles/page/2/index.html @@ -65,6 +65,41 @@ <article class="blog_item"> <header> + <h2><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></h2> + <p class="date"> + <span class="year">2019</span> + <span class="day-month">22 Aug</span> + </p> + </header> + + <p>Erlang meetups are resuming and I will be present at the next one in Paris on the 10th of September. As the meetup and my talk about Gun will be in French the rest of this post will be in French as well. If you are around Paris that night, you are welcome to join and chat, even if you don't speak the language! +Je serai au meetup Erlang le 10 septembre chez Datadog à Paris.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> + <h2><a href="https://ninenines.eu/articles/ranch-2.0.0-rc.1/">Ranch 2.0 release candidate 1</a></h2> + <p class="date"> + <span class="year">2019</span> + <span class="day-month">18 Jul</span> + </p> + </header> + + <p>Ranch 2.0.0-rc.1 has been released! +We are getting very close to releasing Ranch 2.0! As most of the tremendous programming work was done by contributor Jan Uhlig, I will yield the floor and let him describe what went into this great release. +In Ranch 1.x, there is only one supervisor per Ranch listener to start and manage connection processes. Under high load (many clients rapidly connecting and/or disconnecting), the message queue of this one supervisor could become congested, leading to declining accept rates or a stalled listener.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/ranch-2.0.0-rc.1/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> <h2><a href="https://ninenines.eu/articles/joe_the_rubber_duck/">Joe Armstrong the rubber duck</a></h2> <p class="date"> <span class="year">2019</span> @@ -400,40 +435,6 @@ The plan is to have a new RC version every couple weeks until the summer ends or </p> </article> - <article class="blog_item"> - <header> - <h2><a href="https://ninenines.eu/articles/the-elephant-in-the-room/">The elephant in the room</a></h2> - <p class="date"> - <span class="year">2017</span> - <span class="day-month">26 Mar</span> - </p> - </header> - - <p>Have you ever tried telling someone why they should use Erlang? You boast the smaller code size, the auto healing mechanisms, the distribution and they seem really excited. They wonder why they never heard about Erlang before. And then you show them what the code looks like. All excitement goes away. The smiles disappear. Their face starts becoming really serious. -You lost them. You know you lost them. They comment on the syntax, or perhaps you do, already admitting defeat.</p> - - <p style="text-align:right"> - <a class="read_more" href="https://ninenines.eu/articles/the-elephant-in-the-room/">Read More</a> - </p> - </article> - - <article class="blog_item"> - <header> - <h2><a href="https://ninenines.eu/articles/dont-let-it-crash/">Don't let it crash</a></h2> - <p class="date"> - <span class="year">2017</span> - <span class="day-month">22 Jan</span> - </p> - </header> - - <p>We have a specific mindset when writing Erlang programs. We focus on the normal execution of the program and don't handle most of the errors that may occur. We sometimes call this normal execution the happy path. -The general pattern behind writing only for the happy path, letting the VM catch errors (writing them to a log for future consumption) and then having a supervisor restart the processes that failed from a clean state, has a name.</p> - - <p style="text-align:right"> - <a class="read_more" href="https://ninenines.eu/articles/dont-let-it-crash/">Read More</a> - </p> - </article> - <nav class="pagination" role="pagination"> diff --git a/articles/page/3/index.html b/articles/page/3/index.html index 5fc4d538..0fd4fe6b 100644 --- a/articles/page/3/index.html +++ b/articles/page/3/index.html @@ -65,6 +65,40 @@ <article class="blog_item"> <header> + <h2><a href="https://ninenines.eu/articles/the-elephant-in-the-room/">The elephant in the room</a></h2> + <p class="date"> + <span class="year">2017</span> + <span class="day-month">26 Mar</span> + </p> + </header> + + <p>Have you ever tried telling someone why they should use Erlang? You boast the smaller code size, the auto healing mechanisms, the distribution and they seem really excited. They wonder why they never heard about Erlang before. And then you show them what the code looks like. All excitement goes away. The smiles disappear. Their face starts becoming really serious. +You lost them. You know you lost them. They comment on the syntax, or perhaps you do, already admitting defeat.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/the-elephant-in-the-room/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> + <h2><a href="https://ninenines.eu/articles/dont-let-it-crash/">Don't let it crash</a></h2> + <p class="date"> + <span class="year">2017</span> + <span class="day-month">22 Jan</span> + </p> + </header> + + <p>We have a specific mindset when writing Erlang programs. We focus on the normal execution of the program and don't handle most of the errors that may occur. We sometimes call this normal execution the happy path. +The general pattern behind writing only for the happy path, letting the VM catch errors (writing them to a log for future consumption) and then having a supervisor restart the processes that failed from a clean state, has a name.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/dont-let-it-crash/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> <h2><a href="https://ninenines.eu/articles/cowboy-2.0.0-pre.4/">Cowboy 2.0 pre-release 4</a></h2> <p class="date"> <span class="year">2017</span> @@ -390,41 +424,6 @@ mod out_module begin mod in_module begin end end Of course, in the context of t </p> </article> - <article class="blog_item"> - <header> - <h2><a href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Xerl: empty modules</a></h2> - <p class="date"> - <span class="year">2013</span> - <span class="day-month">30 Jan</span> - </p> - </header> - - <p>Let's build a programming language. I call it Xerl: eXtended ERLang. It'll be an occasion for us to learn a few things, especially me. -Unlike in Erlang, in this language, everything is an expression. This means that modules and functions are expression, and indeed that you can have more than one module per file. -We are just starting, so let's no go ahead of ourselves here. We'll begin with writing the code allowing us to compile an empty module.</p> - - <p style="text-align:right"> - <a class="read_more" href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Read More</a> - </p> - </article> - - <article class="blog_item"> - <header> - <h2><a href="https://ninenines.eu/articles/ranch-ftp/">Build an FTP Server with Ranch in 30 Minutes</a></h2> - <p class="date"> - <span class="year">2012</span> - <span class="day-month">14 Nov</span> - </p> - </header> - - <p>Last week I was speaking at the London Erlang Factory Lite where I presented a live demonstration of building an FTP server using Ranch. As there was no slide, you should use this article as a reference instead. -The goal of this article is to showcase how to use Ranch for writing a network protocol implementation, how Ranch gets out of the way to let you write the code that matters, and the common techniques used when writing servers.</p> - - <p style="text-align:right"> - <a class="read_more" href="https://ninenines.eu/articles/ranch-ftp/">Read More</a> - </p> - </article> - <nav class="pagination" role="pagination"> diff --git a/articles/page/4/index.html b/articles/page/4/index.html index 87efc9d0..86752a19 100644 --- a/articles/page/4/index.html +++ b/articles/page/4/index.html @@ -65,6 +65,41 @@ <article class="blog_item"> <header> + <h2><a href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Xerl: empty modules</a></h2> + <p class="date"> + <span class="year">2013</span> + <span class="day-month">30 Jan</span> + </p> + </header> + + <p>Let's build a programming language. I call it Xerl: eXtended ERLang. It'll be an occasion for us to learn a few things, especially me. +Unlike in Erlang, in this language, everything is an expression. This means that modules and functions are expression, and indeed that you can have more than one module per file. +We are just starting, so let's no go ahead of ourselves here. We'll begin with writing the code allowing us to compile an empty module.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> + <h2><a href="https://ninenines.eu/articles/ranch-ftp/">Build an FTP Server with Ranch in 30 Minutes</a></h2> + <p class="date"> + <span class="year">2012</span> + <span class="day-month">14 Nov</span> + </p> + </header> + + <p>Last week I was speaking at the London Erlang Factory Lite where I presented a live demonstration of building an FTP server using Ranch. As there was no slide, you should use this article as a reference instead. +The goal of this article is to showcase how to use Ranch for writing a network protocol implementation, how Ranch gets out of the way to let you write the code that matters, and the common techniques used when writing servers.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/ranch-ftp/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> <h2><a href="https://ninenines.eu/articles/tictactoe/">Erlang Tic Tac Toe</a></h2> <p class="date"> <span class="year">2012</span> diff --git a/articles/ranch-1.3/index.html b/articles/ranch-1.3/index.html index 225b3489..d7300acf 100644 --- a/articles/ranch-1.3/index.html +++ b/articles/ranch-1.3/index.html @@ -126,6 +126,14 @@ Primary key fingerprint<font color="#990000">:</font> F19F 189C ECC7 <font color + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/ranch-1.6.0/index.html b/articles/ranch-1.6.0/index.html index 2ac9b2c7..be88f288 100644 --- a/articles/ranch-1.6.0/index.html +++ b/articles/ranch-1.6.0/index.html @@ -88,6 +88,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/ranch-1.7.0/index.html b/articles/ranch-1.7.0/index.html index 6deffee1..ac2a4433 100644 --- a/articles/ranch-1.7.0/index.html +++ b/articles/ranch-1.7.0/index.html @@ -87,6 +87,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/ranch-2.0.0-rc.1/index.html b/articles/ranch-2.0.0-rc.1/index.html index dd3aec72..85284166 100644 --- a/articles/ranch-2.0.0-rc.1/index.html +++ b/articles/ranch-2.0.0-rc.1/index.html @@ -96,6 +96,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/ranch-2.0.0/index.html b/articles/ranch-2.0.0/index.html index d56d958b..acee64bb 100644 --- a/articles/ranch-2.0.0/index.html +++ b/articles/ranch-2.0.0/index.html @@ -95,6 +95,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/ranch-2.1.0/index.html b/articles/ranch-2.1.0/index.html index 24d55447..d1ce138c 100644 --- a/articles/ranch-2.1.0/index.html +++ b/articles/ranch-2.1.0/index.html @@ -90,6 +90,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/ranch-2.2.0/index.html b/articles/ranch-2.2.0/index.html index 6dcc175c..e358a763 100644 --- a/articles/ranch-2.2.0/index.html +++ b/articles/ranch-2.2.0/index.html @@ -88,6 +88,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/ranch-ftp/index.html b/articles/ranch-ftp/index.html index 83ff1a67..b51f6ba0 100644 --- a/articles/ranch-ftp/index.html +++ b/articles/ranch-ftp/index.html @@ -228,6 +228,14 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/the-elephant-in-the-room/index.html b/articles/the-elephant-in-the-room/index.html index c38f9a4b..01498b78 100644 --- a/articles/the-elephant-in-the-room/index.html +++ b/articles/the-elephant-in-the-room/index.html @@ -110,6 +110,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/the-gateway-trilogy/index.html b/articles/the-gateway-trilogy/index.html index 874bbb52..2f406fd6 100644 --- a/articles/the-gateway-trilogy/index.html +++ b/articles/the-gateway-trilogy/index.html @@ -85,6 +85,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/the-story-so-far/index.html b/articles/the-story-so-far/index.html index 9bf4ee01..2f4b0526 100644 --- a/articles/the-story-so-far/index.html +++ b/articles/the-story-so-far/index.html @@ -101,6 +101,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/tictactoe/index.html b/articles/tictactoe/index.html index db4c3b18..2382be79 100644 --- a/articles/tictactoe/index.html +++ b/articles/tictactoe/index.html @@ -133,6 +133,14 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/website-update/index.html b/articles/website-update/index.html index bc9b194c..440e1adf 100644 --- a/articles/website-update/index.html +++ b/articles/website-update/index.html @@ -90,6 +90,14 @@ + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/xerl-0.1-empty-modules/index.html b/articles/xerl-0.1-empty-modules/index.html index 9d172841..7dd8a514 100644 --- a/articles/xerl-0.1-empty-modules/index.html +++ b/articles/xerl-0.1-empty-modules/index.html @@ -168,6 +168,14 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/xerl-0.2-two-modules/index.html b/articles/xerl-0.2-two-modules/index.html index 4ec4f6c0..2d0cf9b0 100644 --- a/articles/xerl-0.2-two-modules/index.html +++ b/articles/xerl-0.2-two-modules/index.html @@ -196,6 +196,14 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/xerl-0.3-atomic-expressions/index.html b/articles/xerl-0.3-atomic-expressions/index.html index ef2adbaf..a28bfda5 100644 --- a/articles/xerl-0.3-atomic-expressions/index.html +++ b/articles/xerl-0.3-atomic-expressions/index.html @@ -165,6 +165,14 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/xerl-0.4-expression-separator/index.html b/articles/xerl-0.4-expression-separator/index.html index 728b9c8b..e34e56ac 100644 --- a/articles/xerl-0.4-expression-separator/index.html +++ b/articles/xerl-0.4-expression-separator/index.html @@ -117,6 +117,14 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> diff --git a/articles/xerl-0.5-intermediate-module/index.html b/articles/xerl-0.5-intermediate-module/index.html index c2e16342..bd555350 100644 --- a/articles/xerl-0.5-intermediate-module/index.html +++ b/articles/xerl-0.5-intermediate-module/index.html @@ -161,6 +161,14 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/gun-2.2.0/">Gun 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0/">Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/ranch-2.2.0/">Ranch 2.2</a></li> |