<?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: Ricardo Zorzal Davila</title>
    <description>The latest articles on DEV Community by Ricardo Zorzal Davila (@rzorzal).</description>
    <link>https://dev.to/rzorzal</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F318832%2Fd548fb67-c774-43bf-bdf6-bcfeccdd2373.jpeg</url>
      <title>DEV Community: Ricardo Zorzal Davila</title>
      <link>https://dev.to/rzorzal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rzorzal"/>
    <language>en</language>
    <item>
      <title>Meet Clúsia: PR reviews for humans, with your own AI at your side</title>
      <dc:creator>Ricardo Zorzal Davila</dc:creator>
      <pubDate>Sat, 17 Oct 2026 14:32:45 +0000</pubDate>
      <link>https://dev.to/rzorzal/meet-clusia-pr-reviews-for-humans-with-your-own-ai-at-your-side-3474</link>
      <guid>https://dev.to/rzorzal/meet-clusia-pr-reviews-for-humans-with-your-own-ai-at-your-side-3474</guid>
      <description>&lt;p&gt;Most of my code reviews used to happen in a browser tab I'd squeeze in between meetings. Lately a lot of teams hand that job to a bot, and the bot leaves a pile of comments that mostly get resolved without being read.&lt;/p&gt;

&lt;p&gt;I wanted somewhere calmer to read a change, with an AI I picked sitting next to me. It answers my questions and points at things, and I decide what goes on the PR.&lt;/p&gt;

&lt;p&gt;That's Clúsia. It's a free macOS app, open source under Apache-2.0 and written in Rust, and I think it's ready for other people to try.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fav4uxn7znrvz08z8yv18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fav4uxn7znrvz08z8yv18.png" alt="The Clúsia review screen: a syntax-highlighted diff with a thread, a draft comment and the draft panel" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How a review works
&lt;/h2&gt;

&lt;p&gt;You open a pull request and Clúsia checks it out in a local worktree. You comment on a line or a range, reply to threads and resolve them, and all of it stays in a draft on your machine. When you press Finalize review, the draft goes to GitHub as one review. Before that, nothing gets posted.&lt;/p&gt;

&lt;p&gt;The draft also survives new pushes. If the author pushes while you're halfway through, your comments move to where their code went. If you saved a review and came back a few days later, your agent can read each comment against the new commits and suggest whether to keep it, move it, mark it obsolete or reword it. You go through the suggestions one by one, or accept all of them at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your agent, on your account
&lt;/h2&gt;

&lt;p&gt;Clúsia doesn't ship a model. It talks to the Claude Code or Codex you already use, with your own login, or to any program you write that speaks a small JSON-lines protocol. Your GitHub token never reaches the agent, and the agent never writes to git or GitHub. Publishing is your job.&lt;/p&gt;

&lt;p&gt;When a review opens, the agent writes a summary, and then you can chat with it about the PR. It can read and search the worktree on its own. For anything else, like running &lt;code&gt;cargo test&lt;/code&gt; or editing a file, a modal shows you the exact command, the reason the agent gave and a countdown. If you don't answer, the request is denied. Commands run in a sandbox by default, with no network and writes only inside the review's worktree.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff6m7d8etujfdqa2yp3le.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff6m7d8etujfdqa2yp3le.png" alt="A permission modal: the agent wants to run a command, with Deny, Allow for this review and Allow once" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Security checks
&lt;/h2&gt;

&lt;p&gt;When you open a review, your agent also looks at the change for security problems. Each finding comes with a severity (high, medium or low), the line it's about and sometimes a code suggestion, written as a review comment you can use. You add it to your draft, edit it first or dismiss it. A finding on a line the PR didn't touch becomes a general comment.&lt;/p&gt;

&lt;p&gt;I was careful with the wording here. When nothing turns up, Clúsia says something like "Claude Code found no security issues in 7 files". It won't tell you the change is safe, because an agent that read the PR can't promise that, and I'd rather you keep reading.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcspapnf3ileg3heasz5p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcspapnf3ileg3heasz5p.png" alt="The Security tab: three findings with high, medium and low badges, one with a code suggestion and one already in the draft" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Audits, area by area
&lt;/h2&gt;

&lt;p&gt;Next to Security there's an Audits tab. The agent goes through the change looking at correctness, concurrency, error handling, performance, tests, and docs and changelog, and each area gets its own findings. You can switch areas off, and you can add your own with a name and a short instruction (up to 500 characters), something like "check that every new endpoint has rate limiting".&lt;/p&gt;

&lt;p&gt;If the agent didn't answer for an area, the tab says &lt;em&gt;Not checked&lt;/em&gt;. I didn't want a silent "ok" there.&lt;/p&gt;

&lt;p&gt;Each check runs in a session forked from the review's chat, so it already knows what the agent read and your chat stays free while it works. At most two checks run at the same time across all your reviews, because every one of them is a real turn on your account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F03qf6op3it0rxlrtpa02.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F03qf6op3it0rxlrtpa02.png" alt="The Audits tab: six areas with counts, ok or Not checked, and a Concurrency finding with its proposed comment" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Diagrams of the change
&lt;/h2&gt;

&lt;p&gt;This is the part I've had the most fun building. The Diagrams tab asks your agent to explain the PR in up to eight diagrams, and it picks the kinds that fit the change: flow, dependency graph, sequence, entity-relationship, use cases, data flow, state machine or class diagram.&lt;/p&gt;

&lt;p&gt;Clúsia validates every drawing and lays it out itself, so the arrows stay straight and readable. Click a box and you see its code at the commit it was drawn from, with the lines the PR added highlighted. From there you can comment on those lines and the comment goes straight into your draft. Each drawing is kept per commit, so after a new push you can step back through the versions and see what was added, changed or removed between them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fztogh6x2bx97aixhucw0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fztogh6x2bx97aixhucw0.png" alt="A sequence diagram drawn by the agent for a pull request" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The last diagram in the list is a 3D one I call "Where the words live". The agent picks the words the change adds or touches, groups them into families and names a few use cases and three axes. Clúsia then finds every place those words appear in the repository, and the agent places each file and function on the axes. You can turn the map around, filter to only what the PR changed, and click any point to read the code and comment on it. It helps most when I'm reviewing code I didn't write and want to know what else depends on a name before I approve a rename.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4oxe99bv5hkfc95s3twj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4oxe99bv5hkfc95s3twj.png" alt="The 3D keyword view: points for every place a word appears, coloured by family, with use-case clouds" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The menu bar and the terminal
&lt;/h2&gt;

&lt;p&gt;A popover in the menu bar shows the PRs waiting for you, saved reviews that went stale and a heatmap of your review activity. You get notifications for review requests, new commits on PRs you reviewed, replies, mentions and failing CI, and you can set quiet hours. If you'd rather stay in the terminal, there's a CLI too: &lt;code&gt;clusia prs&lt;/code&gt;, &lt;code&gt;clusia open owner/repo#123&lt;/code&gt;, &lt;code&gt;clusia review publish&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy1cd0apuqc7a65eyst42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy1cd0apuqc7a65eyst42.png" alt="The menu bar popover: activity heatmap, counters, search and pull request lists" width="800" height="651"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;You need a Mac, Apple silicon or Intel. The script builds Clúsia from source with Homebrew or Rust, never asks for &lt;code&gt;sudo&lt;/code&gt;, and the first build takes about five minutes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/rzorzal/clusia/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you'd rather read the script before running it (fair), download it first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/rzorzal/clusia/main/install.sh &lt;span class="nt"&gt;-o&lt;/span&gt; install.sh
less install.sh
bash install.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first run uses your &lt;code&gt;gh&lt;/code&gt; login, asks where your clones live and finds the agent you have installed. Then open a PR from the tray or with &lt;code&gt;clusia open owner/repo#123&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Come help
&lt;/h2&gt;

&lt;p&gt;Clúsia is young, and what people tell me now will shape most of what comes next. If you review code every day, I'd really like to know whether this fits how you work.&lt;/p&gt;

&lt;p&gt;The repo is &lt;a href="https://github.com/rzorzal/clusia" rel="noopener noreferrer"&gt;github.com/rzorzal/clusia&lt;/a&gt;. A star helps other reviewers find it. Issues are welcome for anything that breaks, confuses you or is missing. If you want Clúsia to work with a model or tool it doesn't support yet, the &lt;a href="https://github.com/rzorzal/clusia/blob/main/docs/harness-protocol.md" rel="noopener noreferrer"&gt;harness protocol&lt;/a&gt; is short and there's a working example in Python.&lt;/p&gt;

&lt;p&gt;And in the comments, tell me how you review PRs today. I'm curious what other people's setups look like.&lt;/p&gt;

&lt;p&gt;The website, with screenshots, is at &lt;a href="https://rzorzal.github.io/clusia/" rel="noopener noreferrer"&gt;rzorzal.github.io/clusia&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>codereview</category>
      <category>rust</category>
    </item>
    <item>
      <title>How to easy explain Machine Learning for everyone</title>
      <dc:creator>Ricardo Zorzal Davila</dc:creator>
      <pubDate>Thu, 29 Jul 2021 14:40:30 +0000</pubDate>
      <link>https://dev.to/rzorzal/how-to-easy-explain-machine-learning-for-everyone-2fmk</link>
      <guid>https://dev.to/rzorzal/how-to-easy-explain-machine-learning-for-everyone-2fmk</guid>
      <description>&lt;p&gt;Did you had to explain for someone what is a Machine Learning (ML) ? For your boss, investor, friend, family or anyone ? I think everybody who use ML at the work had to explain it. Sometimes it is hard because some people doen't know math or statistics very well ( and some other doesn't even know what it is). When I have to explain it I always try to understand who will listem, because if I was talking with my boss, he know something of math, and I can say things like 'function' or 'variable'. But when I'm talking with my friends, they don't even know what is it (sometimes they said that they are understaning, but I know that is a lie haha). This article is a methodoly that I develop to explain what is ML for everyone, without technical words or math language. I hope you can use it as much as I.&lt;/p&gt;

&lt;h2&gt;
  
  
  First things first
&lt;/h2&gt;

&lt;p&gt;Let me introduce you the meaning of learning. When we said: 'The machine is really think on that' it is the same of 'The machine is making some calcs'. I know that this may act like something hard to understand, but everybody make calc when we are trying to think. Let me show you.&lt;/p&gt;

&lt;p&gt;If I need to know what is the best way to go from here to the nearest starbucks. Our mind start thinking in: How much time it gonna take if I choose the A way, B way or even C way? Or other one will think: How much miles (or kilometers) do I will need to walk if I take A way, B way or C way? Look all those questions made you think in 'How much', but you can also think: What the way is more secure to go. But how we can measure securty ? The number of robers in the neighborhood ? The number of cars in the street ? The ammount of people transit in it on a day ? Even your qualitative question can be coverted at a quantitative one. And that is the beauty of thinking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe9sub5829lr6enrtpw12.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe9sub5829lr6enrtpw12.jpg" alt="3-ways"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we are trying to learning something we are simulating possibilities of doing something based on our own tests. We know that the way B is more short than way C, but way C in some hours of the day is not secure, so we can choose the way B instead of way C. Look, we are interpreting our data with our observations and learn with it. I know you had have to walk into all of theses ways to know the better choose.&lt;/p&gt;

&lt;p&gt;Machine will do the same as you did. But it will use math to understand the best choose. And it can use a lot of thinking types to choose the best. As you can prefer doing something because of something, the machine can think in a way different from the other one. We call it algorithm, and the data we are using to choose we call it features (or you can call it variables).&lt;/p&gt;

&lt;h2&gt;
  
  
  How we can predict something ?
&lt;/h2&gt;

&lt;p&gt;Now we understand what is learning in terms of thinking, how we can predict the future ?&lt;/p&gt;

&lt;p&gt;As we see at the top, we need to produce our observations based on our life. Machine can do the same to predict the future, but you need to give data for it. Machines can use the data from the past to understand better how the future will be.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpi89rquohk241qkh40d8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpi89rquohk241qkh40d8.jpg" alt="baby-steps"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imagine now that you start work in a new job, and don't know the better way to fo there. You need to start going there without any perceptions. After 10 times going to work, you can choose a better way, because you have data to understand what is the better. After 100 times, you may have a solid thinking in what is the better, and will choose always the right way.&lt;/p&gt;

&lt;p&gt;Machines will do the same. You can pass 10 observations and it will predict something, but when more and more data is passed, it can predict better. If you want to see them act by itself you can just pass sensors and say, go from A to B. It will start make your own observations, and you just need to say if it made a good or bad decisions.&lt;/p&gt;

&lt;p&gt;Look we now have 2 types os act. You can teach a machine passing data to it from the past, or you can just say if it made a good choice. This is called supervised and unsupervised methods.&lt;/p&gt;

&lt;p&gt;But how it can create the rules ? Lets imagine a configurable engine that make fruit juice. You can configure it to make orange juice pressing some buttons, insert the oranges into it and you will have orange juice at the final step. If you want mango juice, you need to set other configurations, input mango and it will produce mango juice. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fta01b4qrck6wdfrcrx11.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fta01b4qrck6wdfrcrx11.png" alt="orange-juice"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you want papaya juice, but we don't now how to set the configuration. You will start pressing some buttons trying to create the correct configuration to do it. Now you are learning how to use this engine to produce papaya juice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivll32qgom4kdjko4l7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivll32qgom4kdjko4l7l.png" alt="papaya-juice"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ordinary functions act like the first exemple. We have data, and the rules and it produce a result to us. In the other hands, ML will need only the data and the result, and it will output the rules to do it. So if you pass papaya and papaya juice to the engine with ML, it will produce a configuration to make papaya juice to you. Now you can get this configuration and the data, put it into the engine without ML to start produce you papaya juice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95do2i9ctnodlyqlh4hg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95do2i9ctnodlyqlh4hg.png" alt="papaya-juice-rules"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that is wonderful. You can use ML to learn the rules of doing something, and with this rules in your hands, you can replicate it to predict the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I know that this method is not accurate as expected, but for me it is working better than when I show graphs, functions, methods and all the boring stuffs for ordinary peoples. You can adapt it to your own observations, because after all, we are juice engines adapting our configurations to do the better fruit juice.&lt;/p&gt;

&lt;p&gt;Some people will start make some questions like: What you do when something occur ? What I need to start undersand better it ? How much time you studied to learn it ? And such others. In that case I advise you to try to explain with your own words and try to not scare them haha. Maybe they are thinking in learn more and you can be their teacher. Good luck and comment if you have any others ideas to explain better what ML is.&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>python</category>
      <category>datascience</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Conceitos básicos de blockchain (exemplo de iteração com React + Formik)</title>
      <dc:creator>Ricardo Zorzal Davila</dc:creator>
      <pubDate>Fri, 29 Jan 2021 20:50:33 +0000</pubDate>
      <link>https://dev.to/rzorzal/conceitos-basicos-de-blockchain-exemplo-de-iteracao-com-react-formik-24k6</link>
      <guid>https://dev.to/rzorzal/conceitos-basicos-de-blockchain-exemplo-de-iteracao-com-react-formik-24k6</guid>
      <description>&lt;p&gt;O mundo hoje presa por segurança e privacidade, principalmente no meio econômico. E foi nesse meio que se popularizou a blockchain. Neste artigo vamos entender alguns conceitos básicos desse ecossistema e uma implementação em React utilizando Formik que irá interagir com a rede.&lt;/p&gt;

&lt;p&gt;Este artigo é um artefato gerado da apresentação interna da empresa &lt;a href="//waproject.com.br"&gt;WA Project&lt;/a&gt; e que tem como autores &lt;a href="https://github.com/5ucr4m"&gt;Marcus Vinicius&lt;/a&gt;, &lt;a href="https://github.com/claudionts"&gt;Claudio Neto&lt;/a&gt; e &lt;a href="https://github.com/rzorzal"&gt;Ricardo Zorzal&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  O que é Blockchain afinal ?
&lt;/h1&gt;

&lt;p&gt;É um conjunto de transações colocados em blocos protegidos por criptografia formando uma grande corrente e são espalhados por vários computadores. A blockchain é pública e qualquer pessoa pode verificar e auditar as transações.&lt;/p&gt;

&lt;p&gt;Todas os blocos da blockchain são validados por pessoas que utilizam poder computacional para calcular o hash de cada bloco para garantir que as informações são verdadeiras e imutáveis. Dentro de cada bloco também encontramos o hash do bloco anterior, o que garante que informações não serão inseridas entre os blocos.&lt;/p&gt;

&lt;p&gt;Todos os blocos que são inseridos, são validados pela maioria da rede, ou seja, pelo menos 50%+1  da rede deve concordar que aquela transação é legítima e correta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7zBnSHTM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/btmdbicsv7rn16lucfyd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7zBnSHTM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/btmdbicsv7rn16lucfyd.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Métodos de validação de transações
&lt;/h1&gt;

&lt;h3&gt;
  
  
  PoW - Proof-of-Work (Poder computacional)
&lt;/h3&gt;

&lt;p&gt;Esse método faz com que as transações sejam difíceis de provar a veracidade, gastando muito poder computacional, ou seja, ele faz o computador usar muito do seu CPU para realizar os cálculos de validação e provar a veracidade do nó.&lt;/p&gt;

&lt;h3&gt;
  
  
  PoS - Proof of Stake (Quantidade de Ativos)
&lt;/h3&gt;

&lt;p&gt;Esse outro usa a quantidade de ativos (tokens). Quanto mais ativos o usuário possuir, maior a chance de ele ser um validador da transação. Assim faz com que não gaste tanto poder computacional, consequentemente menos energia elétrica, mas o usuário ficaria com boa parte dos tokens destinados à essa finalidade.&lt;/p&gt;

&lt;h1&gt;
  
  
  Aplicações da blockchain
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Aplicações financeiras&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contratos inteligentes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Serviços de cartórios e documentos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS descentralizado.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Aplicações reais
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Arcade.City&lt;/strong&gt; - Uma espécie de Uber peer-to-peer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Direct.One&lt;/strong&gt; - Uso de blockchain para criação de documentos digitais e envio de mensagens transacionais com validade jurídica&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nasdaq&lt;/strong&gt; - Emissão de título privados via blockchain&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The DAO - Decentralized Autonomous Organization&lt;/strong&gt;: Companhia de venture capital baseada em blockchain ( Fundo de investimento )&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Ná prática, como funciona?
&lt;/h1&gt;

&lt;p&gt;Para demonstrar o funcionamento, criamos um repositório que implementa uma votação usando esse serviço e um exemplo usando React + Formik que irá interagir com a blockchain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rzorzal/blockchain-vote-exemple"&gt;Blockchain&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/claudionts/blockchain-frontend"&gt;React + Formik&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se quiserem aprender um pouco mais sobre o desenvolvimento do front-end, é só &lt;a href="https://dev.to/claudionts/utilizando-o-formik-context-15na"&gt;clicar aqui&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Essa é uma tecnologia para se ficar de olho em 2021. Muitos sistemas vem crescendo e com o mundo se importante cada vez mais com privacidade e segurança muitas soluções usando blockchain podem vir a surgir. Acreditamos que ficar de olho e entender minimamente o que é e onde pode chegar essa ferramenta, poderá facilitar o desenvolvimento, nos tornando desenvolvedores cada vez melhores.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>[PT-BR] Node Secure update. Quais foram os problemas ?</title>
      <dc:creator>Ricardo Zorzal Davila</dc:creator>
      <pubDate>Sat, 08 Feb 2020 03:06:12 +0000</pubDate>
      <link>https://dev.to/rzorzal/pt-br-node-secure-update-quais-foram-os-problemas-856</link>
      <guid>https://dev.to/rzorzal/pt-br-node-secure-update-quais-foram-os-problemas-856</guid>
      <description>&lt;p&gt;Em fevereiro de 2020 foi liberada uma atualização para as versões 10x, 12x e 13x do Node.js e que causou uma certa ansiedade de discussão na comunidade em todo o globo. Ela veio para corrigir 3 problemas de servidores HTTP, principalmente aqueles que utilizam parser's nativos, como é o caso do mais utilizado e conhecido atualmente, o Express. Ambos os 3 problemas são encontrados na forma de interpretar uma conexão HTTP entre 2 (ou mais) pontas, podendo deixar os servidores vulnerareis ao ataque tanto em seu formato TSL quanto no inseguro HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quais foram os problemas encontrados ?
&lt;/h2&gt;

&lt;p&gt;O principal dos 3 se deve à uma má interpretação do header "Transfer-Encoding". Este header tem como objetivo deixar claro ao servidor como os dados do payload serão formatados, sendo valores possíveis para este: chunked, compress, deflate, gzip, identity. E todos podendo ser combinados usando uma virgula, como "chunked, compress" que neste caso seria interpretado como ou sendo "chunked" ou sendo "compress".&lt;/p&gt;

&lt;p&gt;O ataque poderia ser feito colocando uma formatação que não existe, como "eeee" e passando como body uma outra request. O servidor então terminava de interpretar o header do request e parava, enviando como response dados sensíveis, dando assim vazão ao ataque, que como no próprio release-note do node diz: "The payloads can be crafted by an attacker to hijack user sessions, poison cookies, perform clickjacking, and a multitude of other attacks depending on the architecture of the underlying system."&lt;/p&gt;

&lt;p&gt;O problema foi evidenciado pelo engenheiro de software do Ebay, Ethan Rubinson!&lt;/p&gt;

&lt;p&gt;Os relatados deste problema podem ser encontrados neste link:&lt;br&gt;
&lt;a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15605"&gt;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15605&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O segundo problema que iremos entender é também um problema na forma de interpretar o header do HTTP, ou HTTPS. Dessa vez quem revelou o problema à comunidade foi Alyssa Wilk, que trabalha no Google.&lt;/p&gt;

&lt;p&gt;Neste caso a interpretação dos parser's nativos tratavam de forma errada os espaços em branco de alguns headers que até então não "tratava" os valores passados para o cabeçalho, com isso alguns ataques conseguiam fazer os servidores ignorarem alguns algoritmos de segurança que checavam a integridade da conexão entre os nós envolvidos.&lt;/p&gt;

&lt;p&gt;Esse ataque está relocionado no link abaixo:&lt;br&gt;
&lt;a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15606"&gt;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15606&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos para o terceiro problema de segurança corrigido, onde dessa vez tivemos 2 "autores" que informaram o problema, Rogier Schouten e Melvin Groenhoff.&lt;/p&gt;

&lt;p&gt;Este ataque consiste em configurar uma chamada TLS, ou seja HTTPS, onde seja passado a propriedade subjectAltName com 19 strings como certificado da conexão, isso fará com que o servidor caia e possibilitaria uma invasão por queda (ou um ataque de negação de serviço também) caso o servidor tente ler o certificado do nó que faz a requisição.&lt;/p&gt;

&lt;p&gt;Como esse caso é um pouco mais técnico e só acontecia em servidores que utilizassem o HTTPS e que o certificado estivesse mal configurado, o problema pode ter sido pouco utilizado pelos atacantes.&lt;/p&gt;

&lt;p&gt;Vocês podem acompanhar usando o link:&lt;br&gt;
&lt;a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15604"&gt;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15604&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mesmo sendo uma atualização importantíssima para os servidores e todos os programas afetados, os mantenedores do Node.js ainda deixaram claro que para quais-quer fins você pode usar a flag "--insecure-http-parser" para não levar essas atualizações para o seu sistema, mas é de suma importância entender os riscos e que os desenvolvedores da plataforma dizem que não seria uma boa prática.&lt;/p&gt;

&lt;h2&gt;
  
  
  Legal, como eu faço para ver as correções ?
&lt;/h2&gt;

&lt;p&gt;O mais legal da comunidade Node.js é a facilidade de ver o trabalho dos mantenedores, você pode ficar atento ao próprio site nodejs.org e entrar nas versões e acompanhar os change logs de cada versão. Além de consultar vários artigos sobre as versões e atualizações da plataforma, no site mesmo.&lt;/p&gt;

&lt;p&gt;Outra ótima maneira é acessar o repositório no github e verificar os commits :) &lt;a href="https://github.com/nodejs/node"&gt;https://github.com/nodejs/node&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O mais legal de tudo, é que como tudo é documentado, testado e explicado dentro do próprio repositório, os casos de teste também podem ser rodados e avaliados por vocês.&lt;/p&gt;

&lt;p&gt;Como é o caso deste link, que mostra o commit feito para testar a solução do primeiro problema que apresentei aqui:&lt;br&gt;
&lt;a href="https://github.com/nodejs/node/commit/eea3a7429b"&gt;https://github.com/nodejs/node/commit/eea3a7429b&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Além desses canais, de tempos em tempos são feitas reuniões online da comunidade e dos mantenedores e tudo é postado no canal do Youtube. Exemplo de post: &lt;a href="https://www.youtube.com/watch?v=mj33ibz7Ias"&gt;https://www.youtube.com/watch?v=mj33ibz7Ias&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Comunidade acima de tudo
&lt;/h2&gt;

&lt;p&gt;Essas correções de segurança e os problemas que foram encontrados (até os quais ainda não temos solução) podem ser encontrados (e reportados por vocês) em sites como o &lt;a href="https://cve.mitre.org/index.html"&gt;https://cve.mitre.org/index.html&lt;/a&gt; e é muito importante, para todo o ecossistema, que a comunidade esteja ativa e troque bastante figurinha sobre todos os assuntos. &lt;/p&gt;

&lt;p&gt;Se os desenvolvedores que citei aqui não tivessem relatado os problemas e os mantenedores do Node correrem para os corrigir, talvez sua aplicação sofresse os ataques e você nunca iria entender à fundo o que houve.&lt;/p&gt;

&lt;p&gt;Contribua com a sua plataforma, com sua comunidade, com sua linguagem de programação favorita. O importante aqui é você participar :)&lt;/p&gt;

</description>
      <category>node</category>
      <category>http</category>
    </item>
  </channel>
</rss>
