<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Blog on Raul&#39;s Blog</title>
    <link>https://blog.rulyotano.com/tags/blog/</link>
    <description>Recent content in Blog on Raul&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 17 Mar 2025 22:07:11 +0000</lastBuildDate>
    <atom:link href="https://blog.rulyotano.com/tags/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Building a Distributed Sequence Generator with ZooKeeper and C#</title>
      <link>https://blog.rulyotano.com/articles/zookeeper/</link>
      <pubDate>Mon, 17 Mar 2025 22:07:11 +0000</pubDate>
      <guid>https://blog.rulyotano.com/articles/zookeeper/</guid>
      <description>&lt;h2 id=&#34;1-goal-and-motivation&#34;&gt;1. Goal and Motivation&lt;/h2&gt;
&lt;p&gt;This demo project explores how to assign unique, dynamic sequence numbers to multiple server instances in a distributed environment, inspired by challenges that surface when designing things like global ID generators (e.g., Twitter’s Snowflake). As described in the project’s README, the scenario began as a typical interview problem: how do you ensure each server instance receives (and keeps) a unique ID, especially if instances are started, stopped, or restarted?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improving latency by 20x times!</title>
      <link>https://blog.rulyotano.com/blog/article/improve-service-latency/</link>
      <pubDate>Wed, 09 Oct 2024 11:16:55 +0000</pubDate>
      <guid>https://blog.rulyotano.com/blog/article/improve-service-latency/</guid>
      <description>&lt;p&gt;I want to share my experience in improving our service latency and the steps I&amp;rsquo;ve taken to get there. As a result, the P75 Latency went down from more than 100 milliseconds to less than 5! By de-normalizing the SQL queries and creating one specific cache to fit our needs.&lt;/p&gt;
&lt;h2 id=&#34;situation&#34;&gt;Situation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Our service is a read-heavy system, with a ratio of 99-1 reads over the writes&lt;/li&gt;
&lt;li&gt;Created in dotnet core, we use EF core as ORM (Object Relational Mapper), and our main DB is Postgres (relational DB)&lt;/li&gt;
&lt;li&gt;We used Redis for caching. But it was not a custom cache but yes a &amp;ldquo;general propose&amp;rdquo; one. We used a library that acted as a middleware between EF and the DB, named the Second-Level Cache.&lt;/li&gt;
&lt;li&gt;Very high latency (&lt;strong&gt;P75 ~ 140ms&lt;/strong&gt; and &lt;strong&gt;P99 ~ 4s&lt;/strong&gt;) with high peaks of more than 2 seconds!&lt;/li&gt;
&lt;li&gt;Frequent incidents! A lot of DB connections were created when the cache was cold, so reached the Postgres connection limit, and new pods were not created, even if existing ones were in a bad state.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;Latency before&#34; loading=&#34;lazy&#34; src=&#34;https://blog.rulyotano.com/images/improving-latency-by-20x-times/oits-before.png&#34;&gt;&lt;img alt=&#34;Redis cache hit rate before&#34; loading=&#34;lazy&#34; src=&#34;https://blog.rulyotano.com/images/improving-latency-by-20x-times/redis-before-long-ttls.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interpolate 2D Points Using Bezier Curves in WPF (and Javscript)</title>
      <link>https://blog.rulyotano.com/blog/article/wpf-bezier-interpolation/</link>
      <pubDate>Wed, 02 Oct 2024 18:45:59 +0000</pubDate>
      <guid>https://blog.rulyotano.com/blog/article/wpf-bezier-interpolation/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://main.codeproject.com/articles/Interpolate-2D-Points-Using-Bezier-Curves-in-WPF&#34;&gt;&lt;strong&gt;[Original Article]&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rulyotano/WPF-Bezier-Interpolation/tree/master&#34;&gt;&lt;strong&gt;Sample on GitHub (WPF)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rulyotano/rulyotano.crosscutting.js/tree/main/src/rulyotano.math.interpolation.bezier&#34;&gt;&lt;strong&gt;Sample on Github (JavaScript)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rulyotano.com/demos/bezier&#34;&gt;&lt;strong&gt;Live example in JavaScript (ReactJs)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Interpolating points sometimes is hard mathematical work, even more, if the points are ordered. The solution is to create a function using the points and using an extra parameter &lt;code&gt;t&lt;/code&gt; that represents the time dimension. This often is called a parametric representation of the curve. This article shows a simple way of interpolating a set of points using Bezier curves in WPF.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tree-Extended, a tool to get custom directories trees</title>
      <link>https://blog.rulyotano.com/blog/article/tree-extended-tool/</link>
      <pubDate>Wed, 02 Oct 2024 18:33:17 +0000</pubDate>
      <guid>https://blog.rulyotano.com/blog/article/tree-extended-tool/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@rulyotano/tree-extended-a-tool-to-get-custom-directories-trees-3dea42ebf407&#34;&gt;&lt;strong&gt;[Original Article]&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this write, I want to show two ways to create custom directory trees by using the &lt;a href=&#34;https://github.com/rulyotano/tree-extended&#34;&gt;tree-extended&lt;/a&gt; tool:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;By using directly &lt;a href=&#34;https://github.com/rulyotano/tree-extended&#34;&gt;tree-extended&lt;/a&gt; in your SO command line by installing it as a node package.&lt;/li&gt;
&lt;li&gt;Or, by using the &lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=rulyotano.tree-extended&#34;&gt;tree-extended vscode extension&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Why tree-extended?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I was documenting one of my projects and I wanted to write in markdown a directory tree representation, but I didn’t want to show all the directories but a particular one, the one that I was talking about in that section in the document. There is a command for Linux named &lt;code&gt;tree&lt;/code&gt; that you can install, but it didn’t match all the requirements I was looking for. That is why I created &lt;code&gt;tree-extended&lt;/code&gt; as a custom implementation of &lt;code&gt;tree&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build Your Personal Website for Free Using React.js</title>
      <link>https://blog.rulyotano.com/blog/article/build-your-personal-website-free-reactjs/</link>
      <pubDate>Tue, 01 Oct 2024 14:59:32 +0000</pubDate>
      <guid>https://blog.rulyotano.com/blog/article/build-your-personal-website-free-reactjs/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/better-programming/get-your-personal-website-for-free-create-it-with-reactjs-b7e3c3c874b4&#34;&gt;&lt;strong&gt;[Original Article]&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this article, I want to show you how to create your personal website for free!&lt;/p&gt;
&lt;p&gt;To get that, we are going to use &lt;a href=&#34;https://pages.github.com/&#34;&gt;GitHub Pages&lt;/a&gt; which will allow us to host our website and even will give us a secure (HTTPS) URL.&lt;/p&gt;
&lt;p&gt;Optionally, we can even use our own domain name, in such case, it is the only thing that you will need to pay for.&lt;/p&gt;
&lt;p&gt;As the title says, we want to create the website using ReactJs.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
