<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sharon Rosner</title>
    <description>The latest articles on DEV Community by Sharon Rosner (@ciconia).</description>
    <link>https://dev.to/ciconia</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F117156%2Fa57356b1-4345-469f-ba3b-333cd2a3e2cc.jpeg</url>
      <title>DEV Community: Sharon Rosner</title>
      <link>https://dev.to/ciconia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ciconia"/>
    <language>en</language>
    <item>
      <title>Papercraft - Composable Templating for Ruby</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Tue, 08 Feb 2022 05:45:59 +0000</pubDate>
      <link>https://dev.to/ciconia/papercraft-composable-templating-for-ruby-3lc9</link>
      <guid>https://dev.to/ciconia/papercraft-composable-templating-for-ruby-3lc9</guid>
      <description>&lt;p&gt;Papercraft is a new Ruby gem I’ve been working on, that provides a new way to render HTML, XML and JSON using plain Ruby. Here’s what it looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'papercraft'&lt;/span&gt;

&lt;span class="n"&gt;greeter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Papercraft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nb"&gt;name&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;h1&lt;/span&gt; &lt;span class="s2"&gt;"Hello, &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="nb"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;greeter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'world'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#=&amp;gt; "&amp;lt;h1&amp;gt;Hello, world!&amp;lt;/h1&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Papercraft templates use explicit parameter passing in order to “bind” template variables, and use application and composition to combine templates in a variety of ways.&lt;/p&gt;

&lt;p&gt;For more information on Papercraft, head over to the &lt;a href="https://noteflakes.com/articles/2022-02-04-papercraft"&gt;Noteflakes website&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>template</category>
      <category>html</category>
    </item>
    <item>
      <title>About that monkey-patching business...</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Thu, 04 Nov 2021 09:38:42 +0000</pubDate>
      <link>https://dev.to/ciconia/about-that-monkey-patching-business-1amg</link>
      <guid>https://dev.to/ciconia/about-that-monkey-patching-business-1amg</guid>
      <description>&lt;p&gt;Is monkey-patching inherently bad? Should its use make &lt;a href="https://github.com/digital-fabric/polyphony"&gt;Polyphony&lt;/a&gt; illegitimate? These are the questions I'm exploring in my &lt;a href="https://noteflakes.com/articles/2021-11-04-monkey-patching"&gt;latest article&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>polyphony</category>
      <category>monkeypatching</category>
    </item>
    <item>
      <title>Explaining Ruby Fibers</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Wed, 20 Oct 2021 21:43:17 +0000</pubDate>
      <link>https://dev.to/ciconia/explaining-ruby-fibers-5hbb</link>
      <guid>https://dev.to/ciconia/explaining-ruby-fibers-5hbb</guid>
      <description>&lt;p&gt;Fibers have long been a neglected corner of the Ruby core API, have never really seemed to deliver on their promise of lightweight concurrency, and remain relatively little explored. In &lt;a href="https://noteflakes.com/articles/2021-10-20-explaining-ruby-fibers"&gt;this article&lt;/a&gt; I'll  explain how fibers work from the point of view of a concurrent Ruby application written using Polyphony. I'll give an overview of fibers as concurrency constructs, and discuss how Polyphony harnesses Ruby fibers in order to provide an idiomatic and performant solution for writing highly-concurrent Ruby apps. &lt;a href="https://noteflakes.com/articles/2021-10-20-explaining-ruby-fibers"&gt;Read on...&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>concurrency</category>
    </item>
    <item>
      <title>Embracing Infinite Loops with Ruby and Polyphony</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Thu, 14 Oct 2021 06:24:22 +0000</pubDate>
      <link>https://dev.to/ciconia/embracing-infinite-loops-with-ruby-and-polyphony-5096</link>
      <guid>https://dev.to/ciconia/embracing-infinite-loops-with-ruby-and-polyphony-5096</guid>
      <description>&lt;p&gt;Infinite loops are great for expressing long-running concurrent operations. In &lt;a href="https://noteflakes.com/articles/2021-10-14-embracing-infinite-loops"&gt;this article&lt;/a&gt; I’ll discuss the use of infinite loops as a major construct when writing concurrent apps in Ruby using &lt;a href="https://github.com/digital-fabric/polyphony"&gt;Polyphony&lt;/a&gt;. I’ll show how infinite loops differ from normal, finite ones; how they can be used to express long-running tasks in a concurrent environment; and how they can be stopped. &lt;a href="https://noteflakes.com/articles/2021-10-14-embracing-infinite-loops"&gt;Read it now!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>concurrency</category>
      <category>polyphony</category>
    </item>
    <item>
      <title>A Compositional Approach to Optimizing the Performance of Ruby Apps</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Tue, 05 Oct 2021 20:17:54 +0000</pubDate>
      <link>https://dev.to/ciconia/a-compositional-approach-to-optimizing-the-performance-of-ruby-apps-4nd2</link>
      <guid>https://dev.to/ciconia/a-compositional-approach-to-optimizing-the-performance-of-ruby-apps-4nd2</guid>
      <description>&lt;p&gt;Ruby makes developers happy, but at times I wish it was faster. In a &lt;a href="https://noteflakes.com/articles/2021-10-05-a-compositional-approach-to-ruby-performance"&gt;new article&lt;/a&gt; I explore a novel approach to improving the performance of Ruby apps.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>performance</category>
    </item>
    <item>
      <title>How I Write Code: Pen &amp; Paper</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Thu, 02 Sep 2021 10:29:46 +0000</pubDate>
      <link>https://dev.to/ciconia/how-i-write-code-pen-paper-4pe9</link>
      <guid>https://dev.to/ciconia/how-i-write-code-pen-paper-4pe9</guid>
      <description>&lt;p&gt;Even though I love programming, I try not to sit in front of a computer screen too much. I do not find staring at a screen all day beneficial, not for my physical health, nor for my mental health. In the last few years, I’ve started a habit of sketching my programming ideas using pen and paper. I’m not talking here about todo lists, or making diagrams. I’m talking about actually writing code using pen and paper. &lt;a href="https://noteflakes.com/articles/2021-09-02-how-i-write-code-pen-paper"&gt;Let me explain&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Ever: a callback-less event reactor for Ruby</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Mon, 30 Aug 2021 14:55:48 +0000</pubDate>
      <link>https://dev.to/ciconia/ever-a-callback-less-event-reactor-for-ruby-2lfo</link>
      <guid>https://dev.to/ciconia/ever-a-callback-less-event-reactor-for-ruby-2lfo</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/digital-fabric/ever"&gt;Ever&lt;/a&gt; is a new libev-based event reactor for Ruby with a callback-less design. Find out more &lt;a href="https://github.com/digital-fabric/ever"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What's new in Polyphony and Tipi - August 2021 edition</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Fri, 27 Aug 2021 10:14:29 +0000</pubDate>
      <link>https://dev.to/ciconia/what-s-new-in-polyphony-and-tipi-august-2021-edition-olh</link>
      <guid>https://dev.to/ciconia/what-s-new-in-polyphony-and-tipi-august-2021-edition-olh</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/digital-fabric/polyphony"&gt;Polyphony&lt;/a&gt; is a library for writing highly concurrent Ruby apps. Polyphony harnesses Ruby fibers and a powerful &lt;a href="https://unixism.net/loti/what_is_io_uring.html"&gt;io_uring&lt;/a&gt;-based I/O runtime to provide a solid foundation for building high-performance concurrent Ruby apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/digital-fabric/tipi"&gt;Tipi&lt;/a&gt; is a new Polyphony-based web server for Ruby. Tipi provides out of the box support for HTTP/1, HTTP/2, and WebSocket. Tipi also provides SSL termination (support for HTTPS) with &lt;strong&gt;automatic certificate provisioning&lt;/strong&gt; and automatic ALPN protocol selection.&lt;/p&gt;

&lt;p&gt;Here are &lt;a href="https://noteflakes.com/articles/2021-08-26-polyphony-august-edition"&gt;the latest updates about Polyphony and Tipi&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>http</category>
      <category>concurrency</category>
    </item>
    <item>
      <title>What's new in Polyphony - July 2021 edition</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Tue, 27 Jul 2021 11:33:29 +0000</pubDate>
      <link>https://dev.to/ciconia/what-s-new-in-polyphony-july-2021-edition-14k6</link>
      <guid>https://dev.to/ciconia/what-s-new-in-polyphony-july-2021-edition-14k6</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/digital-fabric/polyphony"&gt;Polyphony&lt;/a&gt; is a Ruby gem that lets you write highly-concurrent apps in Ruby. Here are the &lt;a href="https://github.com/digital-fabric/polyphony/discussions/62"&gt;latest updates&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>concurrency</category>
      <category>linux</category>
      <category>iouring</category>
    </item>
    <item>
      <title>What's new in Polyphony - June 2021 edition </title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Fri, 25 Jun 2021 13:46:40 +0000</pubDate>
      <link>https://dev.to/ciconia/what-s-new-in-polyphony-june-2021-edition-5db4</link>
      <guid>https://dev.to/ciconia/what-s-new-in-polyphony-june-2021-edition-5db4</guid>
      <description>&lt;p&gt;Polyphony 0.58 has just been released. &lt;a href="https://github.com/digital-fabric/polyphony"&gt;Polyphony&lt;/a&gt; is a gem for writing fine-grained, highly concurrent programs in Ruby. &lt;a href="https://github.com/digital-fabric/polyphony/discussions/61"&gt;Here’s a summary and discussion&lt;/a&gt; of the latest changes and improvements. &lt;/p&gt;

</description>
      <category>ruby</category>
      <category>concurrency</category>
      <category>linux</category>
      <category>iouring</category>
    </item>
    <item>
      <title>Polyphony has an io_uring backend!</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Thu, 08 Oct 2020 09:19:40 +0000</pubDate>
      <link>https://dev.to/ciconia/polyphony-has-an-iouring-backend-1o17</link>
      <guid>https://dev.to/ciconia/polyphony-has-an-iouring-backend-1o17</guid>
      <description>&lt;p&gt;I am pleased to announce the release of &lt;a href="https://github.com/digital-fabric/polyphony"&gt;Polyphony&lt;/a&gt; version 0.46.0, which includes a full-blown io_uring backend. The io_uring backend uses a relatively recent new I/O API in Linux that is the future of I/O processing. The new backend provides more than double the performance of the libev backend, achieving &lt;strong&gt;over 120K requests/second&lt;/strong&gt; using a basic "Hello world" HTTP server.&lt;/p&gt;

&lt;p&gt;Those of you unfamiliar with io_uring can head over to the &lt;a href="https://unixism.net/loti/index.html"&gt;Lord of the io_uring website&lt;/a&gt;. The io_uring backend is automatically used on Linux with kernel version 5.6 or higher.&lt;/p&gt;

&lt;p&gt;For more information on the new io_uring backend, including preliminary benchmark numbers and design details you can consult the &lt;a href="https://github.com/digital-fabric/polyphony/pull/44"&gt;pull request&lt;/a&gt;. The source code for the io_uring backend in all its glory can be found&lt;a href="https://github.com/digital-fabric/polyphony/blob/master/ext/polyphony/backend_io_uring.c"&gt; here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For more information on Polyphony please consult the (slightly outdated) &lt;a href="https://digital-fabric.github.io/polyphony/"&gt;Polyphony docs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ruby</category>
    </item>
    <item>
      <title>Polyphony - fine-grained concurrency for Ruby</title>
      <dc:creator>Sharon Rosner</dc:creator>
      <pubDate>Sat, 04 Jul 2020 13:09:08 +0000</pubDate>
      <link>https://dev.to/ciconia/polyphony-fine-grained-concurrency-for-ruby-3lah</link>
      <guid>https://dev.to/ciconia/polyphony-fine-grained-concurrency-for-ruby-3lah</guid>
      <description>&lt;p&gt;Polyphony is a new Ruby library for building concurrent applications in Ruby. Polyphony provides a comprehensive, structured concurrency model based on Ruby fibers and using libev as a high-performance event reactor.&lt;/p&gt;

&lt;p&gt;Polyphony is designed to maximize developer happiness. It provides a natural and fluent API for writing concurrent Ruby apps while using the stock Ruby APIs such as IO, Process, Socket, OpenSSL and Net::HTTP in a concurrent multi-fiber environment. In addition, Polyphony offers a solid exception-handling experience that builds on and enhances Ruby’s exception-handling mechanisms.&lt;/p&gt;

&lt;p&gt;Polyphony includes a full-blown HTTP server implementation with integrated support for HTTP 1 &amp;amp; 2, WebSockets, TLS/SSL termination and more. Polyphony also provides fiber-aware adapters for connecting to PostgreSQL and Redis servers. More adapters are being actively developed.&lt;/p&gt;

&lt;p&gt;More information on the &lt;a href="https://digital-fabric.github.io/polyphony"&gt;Polyphony&lt;/a&gt; home page.&lt;/p&gt;

</description>
      <category>ruby</category>
    </item>
  </channel>
</rss>
