<?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: Ruslan Kornev</title>
    <description>The latest articles on DEV Community by Ruslan Kornev (@woto).</description>
    <link>https://dev.to/woto</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%2F198271%2Fdc954a1d-6600-4575-a2d8-e43de0183587.png</url>
      <title>DEV Community: Ruslan Kornev</title>
      <link>https://dev.to/woto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/woto"/>
    <language>en</language>
    <item>
      <title>is_expected RSpec ActiveRecord matcher</title>
      <dc:creator>Ruslan Kornev</dc:creator>
      <pubDate>Mon, 03 Jul 2023 00:01:07 +0000</pubDate>
      <link>https://dev.to/woto/isexpected-rspec-activerecord-matcher-3hie</link>
      <guid>https://dev.to/woto/isexpected-rspec-activerecord-matcher-3hie</guid>
      <description>&lt;p&gt;Hi, it's a super short and however helpful post about custom RSpec AR matcher. Do you like the conciseness of the code like me?&lt;/p&gt;

&lt;p&gt;I like tests that use the simple &lt;code&gt;is_expected&lt;/code&gt; method. Take a look at the differences:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;subject { 1 == 1 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it { is_expected.to be_true }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead of&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;expect(subject).to be_true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maybe in this example, the problem is not so evident, but take a look at the following example:&lt;/p&gt;

&lt;p&gt;Suppose we have validation on Post.title presence&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;subject { Post.new }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;expect(subject.errors.of_kind?((:title, :presence))).to be_true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://api.rubyonrails.org/classes/ActiveModel/Errors.html#method-i-of_kind-3F"&gt;https://api.rubyonrails.org/classes/ActiveModel/Errors.html#method-i-of_kind-3F&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looks weird? So it would be cool if we could make it more expressive, right, for example like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it { is_expected.to has_errors(:title, :presence) }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To do this way is super simple. Take a look at custom matchers: &lt;a href="https://rspec.info/documentation/3.0/rspec-expectations/RSpec/Matchers"&gt;https://rspec.info/documentation/3.0/rspec-expectations/RSpec/Matchers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a reference, you may copy code from my open-source project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/woto/hub/commit/c45db2b33e85cec3fbbb69dfb3fac23a53d28051#diff-426a7f720d57b5501d595e6b1be7cb844598ebe8a4b584d32f1268b6056f3d2bR57"&gt;https://github.com/woto/hub/commit/c45db2b33e85cec3fbbb69dfb3fac23a53d28051#diff-426a7f720d57b5501d595e6b1be7cb844598ebe8a4b584d32f1268b6056f3d2bR57&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What do you think? May be I should even create gem with this feature? Or may be it's already exists and I don't hear about it?!&lt;/p&gt;

</description>
      <category>rspec</category>
      <category>rails</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Project "Roast me".</title>
      <dc:creator>Ruslan Kornev</dc:creator>
      <pubDate>Sat, 10 Jun 2023 11:05:22 +0000</pubDate>
      <link>https://dev.to/woto/roast-me-alternatives-75h</link>
      <guid>https://dev.to/woto/roast-me-alternatives-75h</guid>
      <description>&lt;p&gt;Hi guys, today I want to introduce you my non-commercial open-source pet project. I can't say that everything turned out exactly as I wanted. It is slow for now, it does not have fully implemented all features that I want. But I want to move to this goal.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://roastme.ru"&gt;https://roastme.ru&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Also I'm looking for a new job. I'm a Ruby on Rails + TypeScript programmer. If you know good places where I can apply let me know please. I am currently at Kyrgyzstan now. &lt;a href="https://www.linkedin.com/in/ruslan-kornev"&gt;https://www.linkedin.com/in/ruslan-kornev&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the project about?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's about getting something new, something interesting, something you could missed due to the hard work that should help you or your company to win the race in IT era.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I'm developing it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After my previous failure to create a commercial project I decided to create another one. And I found that there are too many topics to consider when creating something new. And I tried to formalize list of things that araise against each indie developer, let's go:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;List of problems arising against of creator&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;A list of places where people collect lists of "startup ideas". Often it looks like bullshit, usually with superficial approach to the problem. Usually maintained by one person. And usually without any conversations. But they have a right to exist. And there are diamonds among the dirt.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/samsquire/ideas"&gt;https://github.com/samsquire/ideas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dev-aniketj/awesome-app-ideas"&gt;https://github.com/dev-aniketj/awesome-app-ideas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There are places where people share their thoughts about the perfect tools or the pain of using them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.indiehackers.com"&gt;https://www.indiehackers.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The vast majority of sites, as you might have guessed, are similar to startup pitch sites. Where developers share their projects, trying to watch the reaction of the public, trying to get feedback or evolve new ideas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thestartuppitch.com"&gt;https://thestartuppitch.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.launchingnext.com"&gt;https://www.launchingnext.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://betapage.co"&gt;https://betapage.co&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.producthunt.com"&gt;https://www.producthunt.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OK, maybe now you have a startup idea. The next problem is to find commercial projects, alternatives etc... and it is huge problem too. You can devote some time searching for alternatives and get upset when after N days/months you still find out about their existence. Or you can "never" climb out of searching analogues.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.saashub.com"&gt;https://www.saashub.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://alternativeto.net"&gt;https://alternativeto.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.g2.com"&gt;https://www.g2.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.capterra.com"&gt;https://www.capterra.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally you decided to develop your application and then you have next steps in this quest. I think no one doubts that last years the area of AI made giant steps toward future software. And so therefore there is another item of the list - is to check AI solutions to the solving problem.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://theresanaiforthat.com"&gt;https://theresanaiforthat.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aitools.fyi"&gt;https://aitools.fyi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://saasaitools.com"&gt;https://saasaitools.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.futuretools.io"&gt;https://www.futuretools.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next depending of your qualification as a software developer or not you may choose different steps. For example if you are a Developer or not:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As a Developer&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;You wanna check SaaS solutions for implementation of your idea, it could be Authentication tasks or Hosting platforms, or Image processing services, etc...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ripienaar/free-for-dev"&gt;https://github.com/ripienaar/free-for-dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/255kb/stack-on-a-budget"&gt;https://github.com/255kb/stack-on-a-budget&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You also wanna check open source solutions, libraries and software.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/RunaCapital/awesome-oss-alternatives"&gt;https://github.com/RunaCapital/awesome-oss-alternatives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/awesome-selfhosted/awesome-selfhosted"&gt;https://github.com/awesome-selfhosted/awesome-selfhosted&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You wanna check current trends in software development, may be there are new techniques of making old things with new instruments.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kuchin/awesome-cto"&gt;https://github.com/kuchin/awesome-cto&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;As a not developer&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You wanna find places where you could find software activists, or trying to implement you idea yourself with no-code or low-code solutions

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webflow.com"&gt;https://webflow.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bubble.io"&gt;https://bubble.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All these steps require remarkable amount of time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does the project tries to solve the problem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nothing more than just simple tagging of pages. At this stage it works like &lt;a href="https://alternative.to"&gt;https://alternative.to&lt;/a&gt;. You most likely know about you area of interests from Internet or based on your experience. For example you interested in no-code databases and want to find more about them and you know there is at least one product Airtable&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SwZe-MqP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wmk4omfcuy6qkc7jmmmy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SwZe-MqP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wmk4omfcuy6qkc7jmmmy.png" alt="Image description" width="800" height="703"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You visit the Airtable entity page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--whvko1Np--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pf311shn15yxzykfxorn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--whvko1Np--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pf311shn15yxzykfxorn.png" alt="Image description" width="800" height="895"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://roastme.ru/entities/421?q=airt"&gt;https://roastme.ru/entities/421?q=airt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And from that point you may view pages where this product was mentioned and which other products were also mentioned.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZbtKTTwx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6if730barp0cm38qrwir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZbtKTTwx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6if730barp0cm38qrwir.png" alt="Image description" width="800" height="841"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seems not too relevant yet. But if you select at least one analogue, then you hint which direction you are interested&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MLvXmAOC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rg1dx8thuvwgb6mvgkt3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MLvXmAOC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rg1dx8thuvwgb6mvgkt3.png" alt="Image description" width="800" height="842"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bingo!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As I told yealier it is not related only to software. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interested in Ruby?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WXuSr6Rr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9a0smzlkpq5h6ununtrp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WXuSr6Rr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9a0smzlkpq5h6ununtrp.png" alt="Image description" width="800" height="793"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Natural Language Processing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nkZBsf71--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oj2n48bl8tei9dd7quw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nkZBsf71--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oj2n48bl8tei9dd7quw5.png" alt="Image description" width="800" height="853"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Youtube channels?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ukWiLko2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r42nd7sssjmwj0ix6wuf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ukWiLko2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r42nd7sssjmwj0ix6wuf.png" alt="Image description" width="800" height="814"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Searching remote IT jobs?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IqMUPvvn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bt0n63qcwl07dbjhtpwn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IqMUPvvn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bt0n63qcwl07dbjhtpwn.png" alt="Image description" width="800" height="870"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interested in web scrapping?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f0T2SBTu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/emi9i359fasgbuwa6k9p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f0T2SBTu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/emi9i359fasgbuwa6k9p.png" alt="Image description" width="800" height="870"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preparing to the interviews?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TDNAfq6Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8597qc9kp5kpkxqp6wtr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TDNAfq6Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8597qc9kp5kpkxqp6wtr.png" alt="Image description" width="800" height="870"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture patterns?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pUTu_MtI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/48wqtgtbog4k3hmkiytp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pUTu_MtI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/48wqtgtbog4k3hmkiytp.png" alt="Image description" width="800" height="853"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yep, I know about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lobste.rs"&gt;https://lobste.rs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hackershare.dev/en"&gt;https://hackershare.dev/en&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://join-lemmy.org/"&gt;https://join-lemmy.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hackernews.com/"&gt;https://hackernews.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the main difference that you will be able to subscribe to interested entities and discover something related new when they will be mentioned with unknown to you entities.&lt;/p&gt;

&lt;p&gt;And much much more soon. Interested? Support me with word in comments or deed.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>ruby</category>
      <category>webdev</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Scrollable and draggable carousel</title>
      <dc:creator>Ruslan Kornev</dc:creator>
      <pubDate>Mon, 08 Aug 2022 01:04:00 +0000</pubDate>
      <link>https://dev.to/woto/scrollable-and-draggable-carousel-5a7f</link>
      <guid>https://dev.to/woto/scrollable-and-draggable-carousel-5a7f</guid>
      <description>&lt;p&gt;Hello, stranger. I searched the entire Internet in search of a scrollable and draggable carousel, for three days. Finally decided to create my own. Also decided to share it with you. If you know how to make it event better then let me know in the comments :)&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%2F576aa79b63kqyahjib0r.gif" 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%2F576aa79b63kqyahjib0r.gif" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codesandbox.io/s/framer-motion-usescroll-element-scrolling-forked-3n931n" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kudos to these original works:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://codepen.io/toddwebdev/pen/yExKoj" rel="noopener noreferrer"&gt;https://codepen.io/toddwebdev/pen/yExKoj&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codesandbox.io/s/framer-motion-usescroll-element-scrolling-eg6fm3" rel="noopener noreferrer"&gt;https://codesandbox.io/s/framer-motion-usescroll-element-scrolling-eg6fm3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For google users&lt;/strong&gt;&lt;br&gt;
"framer motion", "carousel", "draggable", "scrollable", "progress", "typescript", "react"&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>animation</category>
      <category>framermotion</category>
    </item>
    <item>
      <title>Suppressing Ruby 2.7.0 warnings in RubyMine and zsh/bash</title>
      <dc:creator>Ruslan Kornev</dc:creator>
      <pubDate>Sat, 21 Mar 2020 22:56:43 +0000</pubDate>
      <link>https://dev.to/woto/suppressing-ruby-2-7-0-warnings-in-rubymine-and-zsh-4kod</link>
      <guid>https://dev.to/woto/suppressing-ruby-2-7-0-warnings-in-rubymine-and-zsh-4kod</guid>
      <description>&lt;p&gt;Hi all. If you've already decided to use Ruby 2.7.0 you may struggle with warnings like this one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/Users/r.kornev/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.2/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
/Users/r.kornev/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.2/lib/action_dispatch/middleware/static.rb:110: warning: The called method `initialize' is defined here
Running via Spring preloader in process 1224
Loading development environment (Rails 6.0.2.2)
irb(main):001:0&amp;gt; Post.first
   (6.7ms)  SELECT sqlite_version(*)
  Post Load (0.1ms)  SELECT "posts".* FROM "posts" ORDER BY "posts"."id" ASC LIMIT ?  [["LIMIT", 1]]
/Users/r.kornev/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/activemodel-6.0.2.2/lib/active_model/type/integer.rb:13: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
/Users/r.kornev/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/activemodel-6.0.2.2/lib/active_model/type/value.rb:8: warning: The called method `initialize' is defined here
=&amp;gt; nil

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I didn't understand is there a way to add a global environment variable which could affect all running processes like zsh, bash, RubyMine in MacOS Catalina.&lt;/p&gt;

&lt;p&gt;So I've decided to split solutions:&lt;/p&gt;

&lt;h1&gt;
  
  
  RubyMine
&lt;/h1&gt;

&lt;p&gt;Open &lt;code&gt;Run -&amp;gt; Edit configurations&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Then in an appropriate configuration add &lt;code&gt;RUBYOPT=-W:no-deprecated -W:no-experimental&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8W8Xx6eW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/azo1f79a3c379bngx468.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8W8Xx6eW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/azo1f79a3c379bngx468.jpeg" alt="RubyMine Ruby 2.7.0 warnings" width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  zsh/bash
&lt;/h1&gt;

&lt;p&gt;Add &lt;code&gt;export RUBYOPT="-W:no-deprecated -W:no-experimental"&lt;/code&gt;&lt;br&gt;
to &lt;code&gt;~/.zshrc&lt;/code&gt; or/and &lt;code&gt;~/.bashrc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That's it :)&lt;/p&gt;

&lt;p&gt;You also may be interested in these articles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/andrewmcodes/hiding-ruby-2-7-deprecation-warnings-in-rails-6-2mil"&gt;https://dev.to/andrewmcodes/hiding-ruby-2-7-deprecation-warnings-in-rails-6-2mil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://prathamesh.tech/2019/12/26/managing-warnings-emitted-by-ruby-2-7/"&gt;https://prathamesh.tech/2019/12/26/managing-warnings-emitted-by-ruby-2-7/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubyreferences.github.io/rubychanges/2.7.html"&gt;https://rubyreferences.github.io/rubychanges/2.7.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ruby</category>
      <category>rubymine</category>
      <category>zsh</category>
      <category>rails</category>
    </item>
  </channel>
</rss>
