<?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>Forem: TOOlover</title>
    <description>The latest articles on Forem by TOOlover (@toolover).</description>
    <link>https://forem.com/toolover</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%2F272572%2F4bc673b3-a8c9-4ba7-bc04-b58b134929f8.jpg</url>
      <title>Forem: TOOlover</title>
      <link>https://forem.com/toolover</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/toolover"/>
    <language>en</language>
    <item>
      <title>The AWS Outage on Oct 20, 2025: What Broke, Why It Felt Global, and How Amazon Stabilized It</title>
      <dc:creator>TOOlover</dc:creator>
      <pubDate>Tue, 21 Oct 2025 10:08:17 +0000</pubDate>
      <link>https://forem.com/toolover/the-aws-outage-on-oct-20-2025-what-broke-why-it-felt-global-and-how-amazon-stabilized-it-3o48</link>
      <guid>https://forem.com/toolover/the-aws-outage-on-oct-20-2025-what-broke-why-it-felt-global-and-how-amazon-stabilized-it-3o48</guid>
      <description>&lt;p&gt;In the early hours of &lt;strong&gt;October 20, 2025 (PDT)&lt;/strong&gt;, AWS began seeing &lt;strong&gt;elevated error rates&lt;/strong&gt; in &lt;strong&gt;US-EAST-1 (N. Virginia)&lt;/strong&gt;. Amazon later confirmed two key threads:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;a &lt;strong&gt;DNS resolution problem for DynamoDB API endpoints in us-east-1&lt;/strong&gt; (fully mitigated at &lt;strong&gt;2:24 AM PDT&lt;/strong&gt;), and&lt;/li&gt;
&lt;li&gt;an &lt;strong&gt;internal subsystem that monitors the health of Network Load Balancers (NLBs)&lt;/strong&gt; inside the &lt;strong&gt;EC2 internal network&lt;/strong&gt; that degraded, cascading into service connectivity and launch issues. (&lt;a href="https://www.aboutamazon.com/news/aws/aws-service-disruptions-outage-update" rel="noopener noreferrer"&gt;About Amazon&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The incident: a clear timeline
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;12:11 AM PDT (Oct 20)&lt;/strong&gt; — AWS reports increased error rates for multiple services; investigation points to &lt;strong&gt;DNS resolution of DynamoDB API endpoints in us-east-1&lt;/strong&gt;. (&lt;a href="https://www.aboutamazon.com/news/aws/aws-service-disruptions-outage-update" rel="noopener noreferrer"&gt;About Amazon&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2:24 AM PDT&lt;/strong&gt; — Amazon says the &lt;strong&gt;underlying DNS issue is fully mitigated&lt;/strong&gt;, but residual impact continues (notably EC2 instance launches). (&lt;a href="https://www.aboutamazon.com/news/aws/aws-service-disruptions-outage-update" rel="noopener noreferrer"&gt;About Amazon&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Morning–afternoon (US)&lt;/strong&gt; — AWS communicates a &lt;strong&gt;“root cause” in an internal subsystem monitoring NLB health&lt;/strong&gt;, affecting connectivity; AWS also &lt;strong&gt;throttles new EC2 launches&lt;/strong&gt; to speed recovery and clear backlogs. (&lt;a href="https://www.reuters.com/business/retail-consumer/amazons-cloud-unit-reports-outage-several-websites-down-2025-10-20/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Reuters&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Later in the day&lt;/strong&gt; — AWS states services are &lt;strong&gt;back to normal&lt;/strong&gt;, while some backlogs continue processing. (&lt;a href="https://www.reuters.com/business/retail-consumer/amazons-cloud-unit-reports-outage-several-websites-down-2025-10-20/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Reuters&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Root causes (the short, accurate version)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) DNS resolution to DynamoDB endpoints (us-east-1) failed
&lt;/h3&gt;

&lt;p&gt;For a window of time, clients couldn’t resolve &lt;strong&gt;regional DynamoDB API hostnames&lt;/strong&gt; in N. Virginia, generating timeouts and errors for apps and AWS services depending on those endpoints. This DNS-specific fault was &lt;strong&gt;mitigated at 2:24 AM PDT&lt;/strong&gt;. (&lt;a href="https://www.aboutamazon.com/news/aws/aws-service-disruptions-outage-update" rel="noopener noreferrer"&gt;About Amazon&lt;/a&gt;)&lt;/p&gt;

&lt;h3&gt;
  
  
  2) An internal NLB-health monitoring subsystem degraded
&lt;/h3&gt;

&lt;p&gt;As recovery progressed, AWS identified the &lt;strong&gt;underlying issue&lt;/strong&gt;: an &lt;strong&gt;internal subsystem that monitors the health of Network Load Balancers&lt;/strong&gt; on the EC2 internal network. Problems there &lt;strong&gt;degraded connectivity&lt;/strong&gt; and &lt;strong&gt;knocked other subsystems (e.g., parts of Lambda)&lt;/strong&gt;, prompting AWS to &lt;strong&gt;throttle EC2 instance launches&lt;/strong&gt; as a mitigation while it restored health. (&lt;a href="https://www.reuters.com/business/retail-consumer/amazons-cloud-unit-reports-outage-several-websites-down-2025-10-20/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Reuters&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why did this feel &lt;strong&gt;global&lt;/strong&gt; if it started in one Region?&lt;br&gt;
Many “global” features and customer architectures implicitly lean on &lt;strong&gt;us-east-1 control planes&lt;/strong&gt; or make &lt;strong&gt;cross-region calls&lt;/strong&gt;. When &lt;strong&gt;DNS&lt;/strong&gt; (a cross-cutting dependency) and &lt;strong&gt;regional APIs&lt;/strong&gt; wobble, effects can surface &lt;strong&gt;far from N. Virginia&lt;/strong&gt;. AWS’ own &lt;strong&gt;Fault Isolation Boundaries&lt;/strong&gt; guidance explains how such control-plane dependencies work and why &lt;strong&gt;regional designs&lt;/strong&gt; matter. (&lt;a href="https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/global-services.html?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;AWS Documentation&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Impact snapshot
&lt;/h2&gt;

&lt;p&gt;Major consumer and enterprise apps—including social, commerce, gaming, media, and even some government services—reported outages or degraded performance while AWS recovered the Region and dependent subsystems. Coverage consistently tied the blast radius to &lt;strong&gt;us-east-1&lt;/strong&gt; and &lt;strong&gt;DynamoDB/DNS&lt;/strong&gt; symptoms, with &lt;strong&gt;Lambda errors&lt;/strong&gt; and &lt;strong&gt;EC2 launch failures&lt;/strong&gt; during the day. (&lt;a href="https://www.theguardian.com/technology/2025/oct/20/amazon-web-services-aws-outage-hits-dozens-websites-apps?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;The Guardian&lt;/a&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%2Ffegrrclvkrminwokjmvt.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fblog%2Fimages%2FAWS%2520Outage%2520on%2520Oct%252020%2C%25202025.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%2Ffegrrclvkrminwokjmvt.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fblog%2Fimages%2FAWS%2520Outage%2520on%2520Oct%252020%2C%25202025.png" title="The AWS Outage on Oct 20, 2025: What Broke, Why It Felt Global, and How Amazon Stabilized It" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How AWS fixed it (mitigations &amp;amp; recovery steps)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mitigated DNS faults&lt;/strong&gt; for &lt;strong&gt;DynamoDB API&lt;/strong&gt; in us-east-1 (completed at &lt;strong&gt;2:24 AM PDT&lt;/strong&gt;). (&lt;a href="https://www.aboutamazon.com/news/aws/aws-service-disruptions-outage-update" rel="noopener noreferrer"&gt;About Amazon&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identified the NLB health-monitoring subsystem&lt;/strong&gt; as the &lt;strong&gt;root cause&lt;/strong&gt; and &lt;strong&gt;applied mitigations&lt;/strong&gt; to restore internal connectivity. (&lt;a href="https://www.reuters.com/business/retail-consumer/amazons-cloud-unit-reports-outage-several-websites-down-2025-10-20/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Reuters&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Throttled new EC2 instance launches&lt;/strong&gt; to reduce load and accelerate stabilization; continued clearing &lt;strong&gt;service backlogs&lt;/strong&gt; as systems healed. (&lt;a href="https://www.theguardian.com/business/live/2025/oct/20/china-economic-growth-gdp-low-house-prices-fall-stock-markets-ftse-business-live-news?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;The Guardian&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Communicated recovery status over the day as &lt;strong&gt;connectivity and API success rates&lt;/strong&gt; improved across services (Lambda, SQS, Amazon Connect, etc.). (&lt;a href="https://www.theguardian.com/business/live/2025/oct/20/china-economic-growth-gdp-low-house-prices-fall-stock-markets-ftse-business-live-news?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;The Guardian&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What builders should learn (practical takeaways)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Design for regional independence.&lt;/strong&gt; Keep user journeys working &lt;strong&gt;without&lt;/strong&gt; calling a control plane in us-east-1; make stacks &lt;strong&gt;statically stable&lt;/strong&gt; during incidents. (&lt;a href="https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;AWS Documentation&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prefer regional endpoints &amp;amp; VPC endpoints.&lt;/strong&gt; Use &lt;strong&gt;regional&lt;/strong&gt; service URLs (e.g., &lt;code&gt;dynamodb.&amp;lt;region&amp;gt;.amazonaws.com\&lt;/code&gt;) and &lt;strong&gt;Private DNS&lt;/strong&gt; with VPC endpoints to lower exposure to external DNS issues. (&lt;a href="https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/abstract-and-introduction.html?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;AWS Documentation&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assume DNS is fallible—add resilience.&lt;/strong&gt; Multiple resolvers, reasonable TTLs, negative-cache hygiene, jittered retries, and &lt;strong&gt;last-good-answer&lt;/strong&gt; caches can turn DNS from a SPOF into a survivable layer. (AWS docs detail health-check behavior and routing on NLBs.) (&lt;a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-health-checks.html?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;AWS Documentation&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid hidden single-Region anchors.&lt;/strong&gt; AWS’ &lt;strong&gt;Fault Isolation Boundaries&lt;/strong&gt; papers enumerate which “global” features depend on &lt;strong&gt;us-east-1&lt;/strong&gt;; don’t put these in your &lt;strong&gt;recovery path&lt;/strong&gt;. (&lt;a href="https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/global-services.html?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;AWS Documentation&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;This incident had &lt;strong&gt;two intertwined threads&lt;/strong&gt;—&lt;strong&gt;DNS resolution&lt;/strong&gt; for DynamoDB endpoints and a &lt;strong&gt;degraded internal NLB-monitoring subsystem&lt;/strong&gt;—that together produced &lt;strong&gt;global-feeling&lt;/strong&gt; impact from a &lt;strong&gt;regional&lt;/strong&gt; fault. Amazon mitigated DNS early, then stabilized internal networking and capacity by throttling EC2 launches and clearing backlogs as services recovered. (&lt;a href="https://www.aboutamazon.com/news/aws/aws-service-disruptions-outage-update" rel="noopener noreferrer"&gt;About Amazon&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;If you share your &lt;strong&gt;regions and AWS services&lt;/strong&gt;, I can tailor a &lt;strong&gt;resilience checklist&lt;/strong&gt; (DNS patterns, endpoint strategy, failover drills) mapped to your stack.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.aboutamazon.com/news/aws/aws-service-disruptions-outage-update" rel="noopener noreferrer"&gt;About Amazon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reuters.com/business/retail-consumer/amazons-cloud-unit-reports-outage-several-websites-down-2025-10-20/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Reuters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.theguardian.com/business/live/2025/oct/20/china-economic-growth-gdp-low-house-prices-fall-stock-markets-ftse-business-live-news?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;The Guardian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.theguardian.com/technology/2025/oct/20/amazon-web-services-aws-outage-hits-dozens-websites-apps?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;The Guardian&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>cloudinfrastructure</category>
      <category>dns</category>
      <category>cloud</category>
    </item>
    <item>
      <title>🔥 Top 15 Best AI Coding Agents You Should Try at Least Once</title>
      <dc:creator>TOOlover</dc:creator>
      <pubDate>Sun, 01 Jun 2025 11:19:29 +0000</pubDate>
      <link>https://forem.com/toolover/top-15-best-ai-coding-agents-you-should-try-at-least-once-26mg</link>
      <guid>https://forem.com/toolover/top-15-best-ai-coding-agents-you-should-try-at-least-once-26mg</guid>
      <description>&lt;p&gt;In 2025, AI coding agents are revolutionizing software development by enhancing productivity, reducing errors, and accelerating project timelines. Whether you're a beginner or an experienced developer, these tools offer valuable assistance across various aspects of coding. Here’s a curated list of 15 standout AI coding agents worth exploring:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;1. Qodo&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Frwwjwt9cg7t550xc1p8a.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Frwwjwt9cg7t550xc1p8a.webp" alt=" " width="800" height="530"&gt;&lt;/a&gt;&lt;br&gt;
An AI-powered code quality platform that provides smart code analysis, precise suggestions, and automated test generation. Qodo supports multiple languages and integrates seamlessly with popular IDEs like VSCode and JetBrains.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lovable.dev/" rel="noopener noreferrer"&gt;2. Lovable AI&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Ftwq90jgkwx5guyc9u7tc.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Ftwq90jgkwx5guyc9u7tc.webp" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Transforms natural language descriptions into fully functional web applications. Lovable AI offers rapid development, iterative enhancement through conversational interfaces, and one-click deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://v0.dev/" rel="noopener noreferrer"&gt;3. v0&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F0migp7p3w1zm7unx6lnt.webp" 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.amazonaws.com%2Fuploads%2Farticles%2F0migp7p3w1zm7unx6lnt.webp" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A generative chat interface knowledgeable in modern web technologies. v0 can generate UI components, write and execute code in JavaScript and Python, and create diagrams to explain complex programming topics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.devin.ai/" rel="noopener noreferrer"&gt;4. Devin AI&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F73c4e6yzgj7es6vnfa8q.webp" 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.amazonaws.com%2Fuploads%2Farticles%2F73c4e6yzgj7es6vnfa8q.webp" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An autonomous AI software engineer capable of coding, debugging, planning, and problem-solving. Devin AI can independently build applications, fix bugs, and optimize code, making it a powerful tool for complex projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;5. GitHub Copilot&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fv6ur2ahepbpi0881aycg.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fv6ur2ahepbpi0881aycg.webp" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developed by GitHub and OpenAI, Copilot provides context-aware code completions and suggestions directly within your IDE, supporting multiple programming languages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.magicpatterns.com/" rel="noopener noreferrer"&gt;6. Magic Patterns&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fb38as6t7kgjnq5floh1o.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fb38as6t7kgjnq5floh1o.webp" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Assists developers in creating design patterns and reusable code structures by analyzing existing codebases and suggesting optimal patterns, promoting best practices&lt;/p&gt;

&lt;p&gt;&lt;a href="https://windsurf.com/" rel="noopener noreferrer"&gt;7. Windsurf&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fam9xxbe5i8dauiht3eev.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fam9xxbe5i8dauiht3eev.webp" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An AI-driven code optimization tool that identifies potential bottlenecks and suggests improvements to enhance code performance without altering functionality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uizard.io/" rel="noopener noreferrer"&gt;8. Uizard AI&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F4twdgvkpjsc2jtcfa4bj.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2F4twdgvkpjsc2jtcfa4bj.jpg" alt=" " width="800" height="407"&gt;&lt;/a&gt;&lt;br&gt;
Revolutionizes UI/UX design by converting hand-drawn sketches into functional code, accelerating the prototyping phase and enabling quick iterations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://replit.com/" rel="noopener noreferrer"&gt;9. Replit Agent&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fmofbb0ns9l42ze6mxrid.webp" 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.amazonaws.com%2Fuploads%2Farticles%2Fmofbb0ns9l42ze6mxrid.webp" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
Offers an integrated development environment powered by AI, providing real-time code assistance, debugging tools, and collaborative features for solo or team projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://galileo.ai/" rel="noopener noreferrer"&gt;10. Galileo AI&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fcx18lufwmdhhyy76vevx.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fcx18lufwmdhhyy76vevx.jpg" alt=" " width="800" height="401"&gt;&lt;/a&gt;&lt;br&gt;
Focuses on automating code reviews and ensuring adherence to coding standards by scanning codebases for potential issues and providing actionable feedback.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.warp.dev/" rel="noopener noreferrer"&gt;11. Warp&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fe999j983eilno6cmwali.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fe999j983eilno6cmwali.jpg" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;br&gt;
An AI-powered terminal that enhances the command-line experience by offering features like command suggestions, real-time feedback, and script generation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cursor.com/" rel="noopener noreferrer"&gt;12. Cursor&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F0v31qhxa7up8jmf0bvuv.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2F0v31qhxa7up8jmf0bvuv.jpg" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;br&gt;
An AI-driven coding assistant designed to help developers write, debug, and optimize code efficiently, with features like AI-powered autocompletion and advanced debugging capabilities&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.docuwriter.ai/" rel="noopener noreferrer"&gt;13. DocuWriter.ai&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F2j2pkzulma4exd9gpfhr.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2F2j2pkzulma4exd9gpfhr.jpg" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;br&gt;
Automates the process of generating detailed and accurate documentation for software projects, supporting multiple languages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tabnine.com/" rel="noopener noreferrer"&gt;14. TabNine&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fb16czar5mepzoy1vvpgg.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.amazonaws.com%2Fuploads%2Farticles%2Fb16czar5mepzoy1vvpgg.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;br&gt;
Offers AI-powered code completion for multiple languages, significantly speeding up the coding process with context-aware suggestions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sourcery.ai/" rel="noopener noreferrer"&gt;15. Sourcery&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fzs41be1xed6pg9lg2u11.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fzs41be1xed6pg9lg2u11.jpg" alt=" " width="800" height="399"&gt;&lt;/a&gt;&lt;br&gt;
An AI-powered tool that automatically refactors Python code to make it more efficient, readable, and maintainable, integrating easily with popular IDEs&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;These AI coding agents offer a range of functionalities to enhance your development workflow. Exploring these tools can lead to increased efficiency, better code quality, and a more streamlined development process.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>softwaredevelopment</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>Meta's Threads Client for Ruby</title>
      <dc:creator>TOOlover</dc:creator>
      <pubDate>Wed, 12 Jul 2023 14:54:34 +0000</pubDate>
      <link>https://forem.com/toolover/threads-client-ruby-3kc2</link>
      <guid>https://forem.com/toolover/threads-client-ruby-3kc2</guid>
      <description>&lt;p&gt;In today's digital landscape, social media platforms have become integral to our personal and professional lives. Meta's Threads, a popular social media platform, provides users with a powerful means of communication and sharing content. To enhance the development experience for Ruby developers, we are thrilled to introduce &lt;strong&gt;Threads Client Ruby&lt;/strong&gt;, a comprehensive library that simplifies the process of creating engaging posts with text, images, links, and replies on Meta's Threads.&lt;/p&gt;

&lt;p&gt;🚀 Public repo: &lt;a href="https://github.com/dereknguyen269/threads_client_ruby" rel="noopener noreferrer"&gt;Threads Client Ruby&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 Key Features and Benefits:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Text Threads
&lt;/li&gt;
&lt;li&gt;✅ Threads with Image
&lt;/li&gt;
&lt;li&gt;✅ Threads with Link Attachment
&lt;/li&gt;
&lt;li&gt;✅ Get Post Id From URL
&lt;/li&gt;
&lt;li&gt;✅ Reply to Other Threads
&lt;/li&gt;
&lt;li&gt;✅ Like/Unlike a Thread
&lt;/li&gt;
&lt;li&gt;✅ Follow/Unfollow a User
&lt;/li&gt;
&lt;li&gt;✅ Delete a Post
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started:
&lt;/h2&gt;

&lt;p&gt;To start leveraging the power of Threads Client Ruby for creating captivating posts on Meta's Threads, follow these simple steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the Gem: Install the gem by executing the following command in your Ruby environment: gem install threads_client.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem install threads_client_ruby
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🌀 Config Threads
&lt;/h3&gt;

&lt;p&gt;Using &lt;strong&gt;username&lt;/strong&gt; and &lt;strong&gt;password&lt;/strong&gt; (first time)&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="n"&gt;credentials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="ss"&gt;username: &lt;/span&gt;&lt;span class="s2"&gt;"Instagram's username"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;password: &lt;/span&gt;&lt;span class="s2"&gt;"Instagram's password"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="no"&gt;ThreadsClientRuby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;credentials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;credentials&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using &lt;strong&gt;usertoken&lt;/strong&gt; and &lt;strong&gt;userid&lt;/strong&gt; (get from here)&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="n"&gt;credentials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="ss"&gt;usertoken: &lt;/span&gt;&lt;span class="s2"&gt;"token received after login successfull"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;userid: &lt;/span&gt;&lt;span class="s2"&gt;"Instagram's user id"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="no"&gt;ThreadsClientRuby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;credentials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;credentials&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 TIP: Using &lt;strong&gt;usertoken&lt;/strong&gt; and &lt;strong&gt;userid&lt;/strong&gt; to avoid Theard rate limit and decrease response time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  🤖 Get usertoken and userid
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="n"&gt;userinfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ThreadsClientRuby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_userinfo&lt;/span&gt;
  &lt;span class="c1"&gt;# {&lt;/span&gt;
  &lt;span class="c1"&gt;#   :usertoken=&amp;gt; "eyJkc191c2VyX2lkIjoiNTgzOTIyMTY....",&lt;/span&gt;
  &lt;span class="c1"&gt;#   :userid=&amp;gt;"583922..."&lt;/span&gt;
  &lt;span class="c1"&gt;# }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;✨ Text Threads&lt;/strong&gt;&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="no"&gt;ThreadsClientRuby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;text: &lt;/span&gt;&lt;span class="s1"&gt;'Hello World!'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  ✨ Threads with Image
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Online image path&lt;/span&gt;
&lt;span class="no"&gt;ThreadsClientRuby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;text: &lt;/span&gt;&lt;span class="s1"&gt;'Hello World!'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;image: &lt;/span&gt;&lt;span class="s1"&gt;'https://fastly.picsum.photos/id/654/536/354.jpg?hmac=Nqd_oi3EIiPJBAVPYhIUjaEvKpRqLjhtTHkxPmjjo7M'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Or with local image path&lt;/span&gt;
&lt;span class="no"&gt;ThreadsClientRuby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;text: &lt;/span&gt;&lt;span class="s1"&gt;'Hello World!'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;image: &lt;/span&gt;&lt;span class="s1"&gt;'/Users/local-path/logo.jpg'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  ✨ Threads with Link Attachment
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;ThreadsClientRuby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;url: &lt;/span&gt;&lt;span class="s1"&gt;'https://github.com/dereknguyen269/threads_client_ruby'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  ✨ Get Post Id From URL
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;post_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ThreadsClientRuby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_post_id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://www.threads.net/t/CugF-EjhQ3r'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# =&amp;gt; 3143538795635609067&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  ✨ Reply to Other Threads
&lt;/h6&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;ThreadsClientRuby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;reply_id: &lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;text: &lt;/span&gt;&lt;span class="s2"&gt;"Reply to &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;post_id&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conclusion:&lt;/p&gt;

&lt;p&gt;Threads Client Ruby provides Ruby developers with a seamless and efficient solution for creating engaging posts on Meta's Threads. With support for text, images, links, and replies, this gem empowers developers to build innovative social media tools, automate posting processes, and enhance user experiences on the platform. Unlock the potential of Meta's Threads and captivate your audience with captivating posts using Threads Client Ruby today.&lt;/p&gt;

</description>
      <category>threads</category>
      <category>ruby</category>
      <category>rubygem</category>
    </item>
    <item>
      <title>Introducing Muerta Toolbox: The Ultimate Developer's Toolkit!</title>
      <dc:creator>TOOlover</dc:creator>
      <pubDate>Wed, 22 Mar 2023 02:12:22 +0000</pubDate>
      <link>https://forem.com/toolover/introducing-muerta-toolbox-the-ultimate-developers-toolkit-364i</link>
      <guid>https://forem.com/toolover/introducing-muerta-toolbox-the-ultimate-developers-toolkit-364i</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;Are you tired of manually converting Excel files to JSON format? Are you looking for a tool that can help you work with multiple worksheets tab and customize JSON? Look no further than &lt;a href="https://muerta-toolbox.vercel.app/" rel="noopener noreferrer"&gt;Muerta Toolbox&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://muerta-toolbox.vercel.app/" rel="noopener noreferrer"&gt;Muerta Toolbox&lt;/a&gt; is an online website that offers a wide range of tools for developers. With Muerta Toolbox, you can easily convert Excel files to JSON format, work with multiple worksheets tab, and customize JSON according to your needs. Plus, you can download your JSON files with just a few clicks.&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.amazonaws.com%2Fuploads%2Farticles%2Fp1v7yniyl4ffim493mn1.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.amazonaws.com%2Fuploads%2Farticles%2Fp1v7yniyl4ffim493mn1.png" alt=" " width="800" height="515"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fdvouquzfbawqb63vv8s3.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.amazonaws.com%2Fuploads%2Farticles%2Fdvouquzfbawqb63vv8s3.png" alt=" " width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But that's not all! Muerta Toolbox also includes other useful features such as base64 encoding and decoding, text diff checker, and generate curl. Whether you're a seasoned developer or just starting out, Muerta Toolbox has everything you need to streamline your workflow and boost your productivity.&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.amazonaws.com%2Fuploads%2Farticles%2Fuwrx105ggpq9p12z6giu.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.amazonaws.com%2Fuploads%2Farticles%2Fuwrx105ggpq9p12z6giu.png" alt=" " width="800" height="485"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F61q8c242nl95gd0ycxz3.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.amazonaws.com%2Fuploads%2Farticles%2F61q8c242nl95gd0ycxz3.png" alt=" " width="800" height="501"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fye4psdhe7i5m80oxgnfe.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.amazonaws.com%2Fuploads%2Farticles%2Fye4psdhe7i5m80oxgnfe.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the best part? Muerta Toolbox is constantly being updated and improved, with new features and improvements added every day. So why wait? Head over to Muerta Toolbox today and see how it can transform the way you work!&lt;/p&gt;

&lt;p&gt;We hope you find this introduction helpful, and we can't wait to hear your feedback on Muerta Toolbox. If you have any questions or comments, please feel free to reach out to us.&lt;br&gt;
&lt;a href="https://github.com/dereknguyen269/Muerta-Toolbox-report-issues/issues" rel="noopener noreferrer"&gt;Muerta-Toolbox-report-issues&lt;/a&gt;&lt;br&gt;
Thank you!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Programing Best Practices For Good Developer</title>
      <dc:creator>TOOlover</dc:creator>
      <pubDate>Mon, 13 Jul 2020 03:15:11 +0000</pubDate>
      <link>https://forem.com/toolover/programing-best-practices-for-good-developer-1loi</link>
      <guid>https://forem.com/toolover/programing-best-practices-for-good-developer-1loi</guid>
      <description>&lt;p&gt;The list below isn't meant to be exclusive, it's more so a collection of links that have helped me out along the way (and can hopefully help you). As you'll see, I've focused on Web Development such as Ruby, Rails, Javascript. There is also a wealth of information on interview prep and applying to jobs.&lt;/p&gt;

&lt;p&gt;With the list below, I hope I can help developers improve their skills and rise up in their career path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/dereknguyen269/programing-best-practices" rel="noopener noreferrer"&gt;Always updating on Github&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Table of Contents
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start Here&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTML Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SASS Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JavaScript Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NodeJS Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ReactJS Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Angular Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ReactNative Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PHP Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ruby Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rails Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Laravel Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Swift Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Objective-C Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Java Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kotlin Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GO Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rust Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Elixir Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scala Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TypeScript best practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flutter best practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vue best practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C best practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Python best practices&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Start Here
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Hello! I created this list and am constantly updating it with new resources, information, and news. If you want to stay updated on the newest trends, tutorials, and articles in the Web Development world, please feel free to submit a PR!&lt;/strong&gt;
&lt;/h4&gt;




&lt;h2&gt;
  
  
  HTML Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/hail2u/html-best-practices" rel="noopener noreferrer"&gt;HTML Best Practices&lt;/a&gt; - @hail2u&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.codeproject.com/Tips/666578/HTML-and-Some-CSS-Best-Practice" rel="noopener noreferrer"&gt;HTML5 (and Some CSS) Best Practice&lt;/a&gt; - Paulo Augusto Kunzel&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/bendc/frontend-guidelines" rel="noopener noreferrer"&gt;Frontend Guidelines&lt;/a&gt; - @bendc&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://google.github.io/styleguide/htmlcssguide.html#HTML" rel="noopener noreferrer"&gt;Google HTML Style Guide&lt;/a&gt; - @google&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  CSS Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/airbnb/css" rel="noopener noreferrer"&gt;Airbnb CSS / Sass Styleguide&lt;/a&gt; - @airbnb&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/dropbox/css-style-guide" rel="noopener noreferrer"&gt;Dropbox (S)CSS Style Guide&lt;/a&gt; - @dropbox&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/stevekwan/best-practices/blob/master/css/best-practices.md" rel="noopener noreferrer"&gt;CSS Coding Standards and Best Practices&lt;/a&gt; - @stevekwan&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://google.github.io/styleguide/htmlcssguide.html#CSS" rel="noopener noreferrer"&gt;Google CSS Style Guide&lt;/a&gt; - @google&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  SASS Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/bigcommerce/sass-style-guide" rel="noopener noreferrer"&gt;Sass Coding Guidelines&lt;/a&gt; - @bigcommerce&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/blackfalcon/Sass-Guidlines/blob/master/SASS-Guidelines.md" rel="noopener noreferrer"&gt;Sass-Guidlines&lt;/a&gt; - @blackfalcon&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  JavaScript Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/airbnb/javascript" rel="noopener noreferrer"&gt;Airbnb JavaScript Style Guide()&lt;/a&gt; - @airbnb&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/DrkSephy/es6-cheatsheet" rel="noopener noreferrer"&gt;es6-cheatsheet&lt;/a&gt; - @DrkSephy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/stevekwan/best-practices/blob/master/javascript/gotchas.md" rel="noopener noreferrer"&gt;Common JavaScript "Gotchas"&lt;/a&gt; - @stevekwan&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/stevekwan/best-practices/blob/master/javascript/best-practices.md" rel="noopener noreferrer"&gt;Pragmatic Standards: JavaScript Coding Standards and Best Practices&lt;/a&gt; - @stevekwan&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/adamlu/javascript-style-guide" rel="noopener noreferrer"&gt;JavaScript规范&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/adamlu"&gt;@adamlu&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://google.github.io/styleguide/jsguide.html" rel="noopener noreferrer"&gt;Google JavaScript Style Guide&lt;/a&gt; - @google&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  NodeJS Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/felixge/node-style-guide" rel="noopener noreferrer"&gt;Node.js Style Guide&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/felixge"&gt;@felixge&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/RisingStack/node-style-guide" rel="noopener noreferrer"&gt;RisingStack Node.js Style Guide() {&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/risingstack"&gt;@risingstack&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ReactJS Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/MicheleBertoli/react-design-patterns-and-best-practices" rel="noopener noreferrer"&gt;React Design Patterns and Best Practices &lt;/a&gt;- @MicheleBertoli&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/coderjonny/react-style-guide" rel="noopener noreferrer"&gt;React Style Guide&lt;/a&gt; - @coderjonny&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/kentcdodds/advanced-react-patterns-v2" rel="noopener noreferrer"&gt;Advanced ReactJS Patterns&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/kentcdodds"&gt;@kentcdodds&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Angular Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/mgechev/angularjs-style-guide" rel="noopener noreferrer"&gt;Angularjs style guide&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/mgechev"&gt;@mgechev&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/mgechev/angular2-style-guide" rel="noopener noreferrer"&gt;Angular 2 Style Guide&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/mgechev"&gt;@mgechev&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/trochette/Angular-Design-Patterns-Best-Practices" rel="noopener noreferrer"&gt;Angular.js: Advanced Design Patterns and Best Practices&lt;/a&gt; - @trochette&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ReactNative Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/reactnativecn/react-native-guide" rel="noopener noreferrer"&gt;React-Native Guide&lt;/a&gt; - @reactnativecn&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  PHP Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/codeguy/php-the-right-way" rel="noopener noreferrer"&gt;PHP: The Right Way&lt;/a&gt; - @codeguy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/php-earth/php-knowledge" rel="noopener noreferrer"&gt;PHP knowledge&lt;/a&gt; - @php-earth&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/Integralist/Style-Guides" rel="noopener noreferrer"&gt;Style-Guides&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/integralist"&gt;@integralist&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/maxdmyers/php-style-guide" rel="noopener noreferrer"&gt;PHP Coding Standards&lt;/a&gt; - @maxdmyers&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Ruby Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/airbnb/ruby" rel="noopener noreferrer"&gt;Ruby Style Guide&lt;/a&gt; - @airbnb&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/franzejr/best-ruby" rel="noopener noreferrer"&gt;Ruby Tricks, Idiomatic Ruby, Refactorings and Best Practices&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/franzejr"&gt;@franzejr&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/avdi/sbpprb" rel="noopener noreferrer"&gt;Best Practice Patterns in Ruby&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/avdi"&gt;@avdi&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/practicingruby/rbp-book" rel="noopener noreferrer"&gt;Ruby Best Practices, by Gregory Brown&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/practicingruby"&gt;@practicingruby&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/bbatsov/ruby-style-guide" rel="noopener noreferrer"&gt;The Ruby Style Guide&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/bbatsov"&gt;@bbatsov&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Rails Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/bbatsov/rails-style-guide" rel="noopener noreferrer"&gt;The Rails Style Guide&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/bbatsov"&gt;@bbatsov&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/flyerhzm/rails_best_practices" rel="noopener noreferrer"&gt;rails_best_practices&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/flyerhzm"&gt;@flyerhzm&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/reachlocal/rspec-style-guide" rel="noopener noreferrer"&gt;The RSpec Style Guide&lt;/a&gt; - @reachlocal&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/abinoda/rspec-best-practices" rel="noopener noreferrer"&gt;Rspec Best Practices&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/abinoda"&gt;@abinoda&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.carbonfive.com/rails-database-best-practices/" rel="noopener noreferrer"&gt;Rails Database Best Practices&lt;/a&gt; - Christian Nelson&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/@User3141592/active-record-query-performance-tips-a3c3947b968" rel="noopener noreferrer"&gt;Active Record Query Optimization Tips&lt;/a&gt; - Steven Li&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://phrase.com/blog/posts/activerecord-speed-up-your-sql-queries/" rel="noopener noreferrer"&gt;ActiveRecord: How to Speed Up Your SQL Queries&lt;/a&gt; - Stefan&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Laravel Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/laraveltherightway/laraveltherightway.github.io" rel="noopener noreferrer"&gt;Laravel: The Right Way&lt;/a&gt; - @laraveltherightway&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/uonick/laravel-best-practices" rel="noopener noreferrer"&gt;Laravel: The Right Way (Best Practices)&lt;/a&gt; - @uonick&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Swift Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/eure/swift-style-guide" rel="noopener noreferrer"&gt;Swift Style Guide&lt;/a&gt; - @eure&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/ochococo/Design-Patterns-In-Swift" rel="noopener noreferrer"&gt;Design Patterns implemented in Swift 3.0&lt;/a&gt; - @ochococo&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/raywenderlich/swift-style-guide" rel="noopener noreferrer"&gt;Swift Style Guide&lt;/a&gt; - @raywenderlich&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Objective-C Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/NYTimes/objective-c-style-guide" rel="noopener noreferrer"&gt;NYTimes Objective-C Style Guide&lt;/a&gt; - @NYTimes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/raywenderlich/objective-c-style-guide" rel="noopener noreferrer"&gt;raywenderlich.com Objective-C style guide&lt;/a&gt; - @raywenderlich&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/github/objective-c-style-guide" rel="noopener noreferrer"&gt;Style guide &amp;amp; coding conventions for Objective-C projects&lt;/a&gt; - @github&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/wangshengjia/-Code-Style---Best-Practise-for-Objective-C" rel="noopener noreferrer"&gt;Code Style &amp;amp; Best Practise for Objective-C&lt;/a&gt; - @wangshengjia&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Java Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/in28minutes/java-best-practices" rel="noopener noreferrer"&gt;Java Best Practices&lt;/a&gt; - @in28minutes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/previousdeveloper/Selenium-best-practices" rel="noopener noreferrer"&gt;Selenium-best-practices&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/previousdeveloper"&gt;@previousdeveloper&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/raywenderlich/java-style-guide" rel="noopener noreferrer"&gt;raywenderlich.com Java Style Guide&lt;/a&gt; - @raywenderlich&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Kotlin Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JackyAndroid/kotlin-best-practices" rel="noopener noreferrer"&gt;Best practices in kotlin&lt;/a&gt; - @JackyAndroid&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/yole/kotlin-style-guide" rel="noopener noreferrer"&gt;kotlin-style-guide&lt;/a&gt; - @yole&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/raywenderlich/kotlin-style-guide" rel="noopener noreferrer"&gt;raywenderlich.com Kotlin Style Guide (in progress)&lt;/a&gt; - @raywenderlich&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  GO Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/mehrdadrad/GoBestPractices" rel="noopener noreferrer"&gt;Go Best Practices&lt;/a&gt; - @mehrdadrad&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/AgtLucas/go-style-guide" rel="noopener noreferrer"&gt;Go Style Guide&lt;/a&gt; - @AgtLucas&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Rust Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ubsan/style/blob/master/guide.md" rel="noopener noreferrer"&gt;Rust Style Guide&lt;/a&gt; - @ubsan&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Elixir Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/christopheradams/elixir_style_guide" rel="noopener noreferrer"&gt;The Elixir Style Guide&lt;/a&gt; - @christopheradams&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/lexmag/elixir-style-guide" rel="noopener noreferrer"&gt;Elixir Style Guide&lt;/a&gt; - @lexmag&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/rrrene/elixir-style-guide" rel="noopener noreferrer"&gt;Credo's Elixir Style Guide&lt;/a&gt; - @rrrene&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/blackode/10-killer-elixir-tips-2a9be1bec9be" rel="noopener noreferrer"&gt;10 Killer Elixir Tips #1&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/blackode/10-killer-elixir-tips-2-c5f87f8a70c8" rel="noopener noreferrer"&gt;10 Killer Elixir Tips #2&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/blackode/10-killer-elixir-tips-3-5c196eaec376" rel="noopener noreferrer"&gt;10 Killer Elixir Tips #3&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Scala Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/alexandru/scala-best-practices" rel="noopener noreferrer"&gt;Scala Best Practices&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/alexandru"&gt;@alexandru&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/databricks/scala-style-guide" rel="noopener noreferrer"&gt;Databricks Scala Guide&lt;/a&gt; - @databricks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Typescript Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/BestCoderDotInfo/TypeScript-best-practices" rel="noopener noreferrer"&gt;TypeScript Best Practices&lt;/a&gt; - @BestCoderDotInfo&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Flutter Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://flutter.dev/docs/perf/rendering/best-practices" rel="noopener noreferrer"&gt;Performance best practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/flutter-community/flutter-best-practices-and-tips-7c2782c9ebb5" rel="noopener noreferrer"&gt;Flutter: Best Practices and Tips&lt;/a&gt; - Kinjal Dhamat&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://heartbeat.fritz.ai/flutter-development-best-practices-3e162765340a" rel="noopener noreferrer"&gt;Flutter Development Best Practices&lt;/a&gt; - Derrick Mwiti&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Vue best practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://012.vuejs.org/guide/best-practices.html" rel="noopener noreferrer"&gt;Tips &amp;amp; Best Practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.telerik.com/blogs/10-good-practices-building-maintaining-large-vuejs-projects" rel="noopener noreferrer"&gt;10 Good Practices for Building and Maintaining Large Vue.js Projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learnvue.co/2020/01/12-vuejs-best-practices-for-pro-developers/" rel="noopener noreferrer"&gt;12 VueJS Best Practices for Pro Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  C Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://data-flair.training/blogs/c-programming-best-practices/" rel="noopener noreferrer"&gt;C Programming Best Practices – Must know to become an Expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mcinglis/c-style" rel="noopener noreferrer"&gt;c-style&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Python best practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://data-flair.training/blogs/python-best-practices/" rel="noopener noreferrer"&gt;Python Best Practices – The only guide to become Python Expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/sloria/7001839" rel="noopener noreferrer"&gt;The Best of the Best Practices (BOBP) Guide for Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://towardsdatascience.com/30-python-best-practices-tips-and-tricks-caefb9f8c5f5" rel="noopener noreferrer"&gt;30 Python Best Practices, Tips, And Tricks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.toptal.com/python/tips-and-practices" rel="noopener noreferrer"&gt;Python Best Practices and Tips by Toptal Developers
&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
    </item>
    <item>
      <title>[Beginner] How to build Youtube video crawler web application with Rails 6, Devise, Nokogiri and Bootstrap 4?</title>
      <dc:creator>TOOlover</dc:creator>
      <pubDate>Tue, 30 Jun 2020 03:02:15 +0000</pubDate>
      <link>https://forem.com/toolover/beginner-how-to-build-youtube-video-crawler-web-application-with-rails-6-devise-nokogiri-and-bootstrap-4-2jg0</link>
      <guid>https://forem.com/toolover/beginner-how-to-build-youtube-video-crawler-web-application-with-rails-6-devise-nokogiri-and-bootstrap-4-2jg0</guid>
      <description>&lt;p&gt;In this tutorial, you will get a Funny Youtube Videos web application with Ruby on Rails up and running on your local server and will push your work into Github. How to make it alive?  If you are casually browsing and are maybe interested in doing a Ruby on Rails tutorial, stop what you are doing RIGHT NOW and give this podcast a listen! It will give you the fuel you need to continue down the web developer path; it definitely fueled me.&lt;/p&gt;

&lt;p&gt;Reading and executing tutorials is an amazing way to learn, so roll up your sleeves, take a slug of coffee, and let’s dive in! This tutorial assumes you have Ruby on Rails installed and all other pre-requisites, like github and a text editor and such.&lt;/p&gt;

&lt;p&gt;I have put my github of tutorial at the end of the article.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Design our web application
&lt;/h4&gt;

&lt;p&gt;Here, I have been design our app with 2 main layouts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;List youtubes videos&lt;/li&gt;
&lt;li&gt;Share youtube video url&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Not signed in page&lt;/li&gt;
&lt;/ol&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.amazonaws.com%2Fi%2Fb4jy1r1uu1kj66e938d0.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.amazonaws.com%2Fi%2Fb4jy1r1uu1kj66e938d0.png" alt="Alt Text" width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Singed in page
&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.amazonaws.com%2Fi%2Fzgnluwdpbbzer3tubrhc.png" alt="Alt Text" width="800" height="571"&gt;
&lt;/li&gt;
&lt;li&gt;Share youtube video page
&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.amazonaws.com%2Fi%2Fpfsg8j7mo1hvxnlfgqge.png" alt="Alt Text" width="800" height="586"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  2. Building our web application
&lt;/h4&gt;

&lt;h5&gt;
  
  
  2.1 Setup Rails
&lt;/h5&gt;

&lt;p&gt;As most Ruby on Rails fans might be aware, Rails 6 is coming soon, and bringing a number of eagerly awaited features and changes.  For starters, remember that Rails 6 requires Ruby 2.5+ . So, make sure you have a plan to upgrade your systems accordingly, in case you have not done so already.&lt;/p&gt;

&lt;p&gt;We will use  Postgres for our project. So let write:&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="n"&gt;rails&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;funny&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;youtube&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;videos&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;postgresql&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A whole bunch of cool stuff happens in the terminal:&lt;br&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.amazonaws.com%2Fi%2F8h94hs88vs57kv541fzo.gif" 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.amazonaws.com%2Fi%2F8h94hs88vs57kv541fzo.gif" alt="Alt Text" width="720" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And wait amoment until it run out. Then:&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="n"&gt;cd&lt;/span&gt; &lt;span class="n"&gt;funny&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;youtube&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;videos&lt;/span&gt;
&lt;span class="n"&gt;rails&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, navigate to &lt;code&gt;localhost/3000&lt;/code&gt; to make sure everything is working:&lt;/p&gt;

&lt;p&gt;Yay! You’re on Rails!&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.amazonaws.com%2Fi%2F82sblxfy3sg5y1s7a80n.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.amazonaws.com%2Fi%2F82sblxfy3sg5y1s7a80n.png" alt="Alt Text" width="800" height="769"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we will use &lt;strong&gt;Devise&lt;/strong&gt; gem for authentication. If you don't know Devise, please go to &lt;a href="https://github.com/plataformatec/devise" rel="noopener noreferrer"&gt;https://github.com/plataformatec/devise&lt;/a&gt;, and read. This gem is very helpful,it help you save a lot time with how to control authentication for web application.&lt;/p&gt;

&lt;p&gt;Add the following line to your Gemfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem 'devise'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run &lt;code&gt;bundle install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, you need to run the generator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ rails generate devise:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In our application, User is model contains user's information. Next, we will setup devise with &lt;strong&gt;User&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; rails generate devise User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run&lt;code&gt;rails db:migrate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, check our folder &lt;code&gt;models&lt;/code&gt;  and &lt;code&gt;db/schema.rb&lt;/code&gt; we got &lt;code&gt;User&lt;/code&gt; table with: email, password, etc... Restart application server again.&lt;/p&gt;

&lt;p&gt;Next step, we need table to storage youtube video  shared by users. So we will create &lt;code&gt;Post&lt;/code&gt; model with fields under:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Id : integer&lt;/li&gt;
&lt;li&gt;Title: string&lt;/li&gt;
&lt;li&gt;Share Url: string&lt;/li&gt;
&lt;li&gt;Description: text&lt;/li&gt;
&lt;li&gt;User Id : who share youtube video&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's Ok! We run &lt;code&gt;rails g model Post title:string share_url:string description:text user:references&lt;/code&gt; . We got migrate file look likes:&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="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CreatePosts&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Migration&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;6.0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;change&lt;/span&gt;
    &lt;span class="n"&gt;create_table&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt; &lt;span class="ss"&gt;:share_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;null: &lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;
      &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt; &lt;span class="ss"&gt;:title&lt;/span&gt;
      &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt; &lt;span class="ss"&gt;:description&lt;/span&gt;
      &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;references&lt;/span&gt; &lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;null: &lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;foreign_key: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;

      &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timestamps&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  2.2 Building controllers, views.
&lt;/h5&gt;

&lt;p&gt;In our application, we need PostsController &amp;amp; UsersController. Open our &lt;code&gt;config/routes.rb&lt;/code&gt; and adding bellow:&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="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;draw&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="s1"&gt;'posts#index'&lt;/span&gt;

  &lt;span class="n"&gt;resources&lt;/span&gt; &lt;span class="ss"&gt;:posts&lt;/span&gt;
  &lt;span class="n"&gt;devise_for&lt;/span&gt; &lt;span class="ss"&gt;:users&lt;/span&gt;

  &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="s1"&gt;'access'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'users#access'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;as: :create_session&lt;/span&gt;
  &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="s1"&gt;'share'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'posts#new'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;as: :share_movie&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In our &lt;code&gt;UsersController&lt;/code&gt; we will control session with Devise. Help anonymous can sign up &amp;amp; sign in our application.  At  &lt;code&gt;access&lt;/code&gt; , when anonymous enter correct their &amp;amp; password match with our users, it will create session and they signed in successfully. Opposite, it will create new user with email &amp;amp; password, then signed in.&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;access&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;valid_user_params?&lt;/span&gt;
      &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_for_authentication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;email: &lt;/span&gt;&lt;span class="n"&gt;user_params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
      &lt;span class="n"&gt;valid_auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;valid_password?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:password&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
      &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="n"&gt;valid_auth&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;
      &lt;span class="n"&gt;sign_in&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;flash&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:success&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"You have been access successfully!"&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="n"&gt;flash&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:error&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Invalid email or password. Please try again!"&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="n"&gt;redirect_to&lt;/span&gt; &lt;span class="n"&gt;root_path&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At &lt;code&gt;PostsController&lt;/code&gt; we have&lt;/p&gt;

&lt;p&gt;a. &lt;code&gt;index&lt;/code&gt; list youtube videos&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="vi"&gt;@posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;id: :desc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will pagination for our list with gem &lt;code&gt;will_paginate&lt;/code&gt;. Add our Gemfile &lt;code&gt;gem 'will_paginate', '~&amp;gt; 3.1.0'&lt;/code&gt; then &lt;code&gt;bundle install&lt;/code&gt;. Now:&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="vi"&gt;@posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;id: :desc&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;paginate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;page: &lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:page&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="ss"&gt;per_page: &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;b. &lt;code&gt;create&lt;/code&gt; post when cuser submit their youtube url at share page. I have been write script help we can get  youtube video information such as: title, description. I use &lt;code&gt;nokogiri&lt;/code&gt; to do it. &lt;code&gt;nokogiri&lt;/code&gt; is a Rubygem providing HTML, XML, SAX, and Reader parsers with XPath and CSS selector support. We can use it to crawling websites, ... etc.&lt;/p&gt;

&lt;p&gt;I write my script in a service object &lt;code&gt;app/services/post_service.rb&lt;/code&gt;&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;'nokogiri'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'open-uri'&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PostService&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current_user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;
    &lt;span class="vi"&gt;@current_user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current_user&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create&lt;/span&gt;
    &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="vi"&gt;@current_user&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;valid_share_url?&lt;/span&gt;
      &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_doc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:share_url&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:share_url&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;present?&lt;/span&gt;
      &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;content&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;
      &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#watch-description-text'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;content&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:share_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Invalid Youtube url'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="n"&gt;post&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="kp"&gt;private&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;valid_share_url?&lt;/span&gt;
    &lt;span class="vi"&gt;@params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:share_url&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/^(?:https?:\/\/)?(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=)?([\w-]{10,})/&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;present?&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_doc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;user_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.854.0 Safari/535.2"&lt;/span&gt;
        &lt;span class="no"&gt;Nokogiri&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HTML&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'User-Agent'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user_agent&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'UTF-8'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, now our &lt;code&gt;create&lt;/code&gt; of PostsController will look 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="vi"&gt;@post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;PostService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current_user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;post_params&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;
&lt;span class="n"&gt;respond_to&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blank?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="vi"&gt;@post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;
        &lt;span class="nb"&gt;format&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="n"&gt;redirect_to&lt;/span&gt; &lt;span class="n"&gt;root_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;notice: &lt;/span&gt;&lt;span class="s1"&gt;'Your moive was successfully shared. Thank you!'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;:show&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;status: :created&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;location: &lt;/span&gt;&lt;span class="vi"&gt;@post&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="n"&gt;flash&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:error&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="vi"&gt;@post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;full_messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;
        &lt;span class="nb"&gt;format&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="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;:new&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;json: &lt;/span&gt;&lt;span class="vi"&gt;@post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;status: :unprocessable_entity&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all logic. Now we need implement our web site with front end. We will use &lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;Bootstrap&lt;/a&gt; for front end. It too easy to use. I have been use slim to write html.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;views/layouts/application.html.slim&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight slim"&gt;&lt;code&gt;&lt;span class="nn"&gt;doctype&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;html
&lt;span class="nt"&gt;html&lt;/span&gt;
  &lt;span class="nt"&gt;head&lt;/span&gt;
    &lt;span class="nt"&gt;meta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"text/html; charset=UTF-8"&lt;/span&gt;)&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;http-equiv&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Content-Type"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/
    &lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Funny&lt;span class="w"&gt; &lt;/span&gt;Movies&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;Site&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csrf_meta_tags&lt;/span&gt;
    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csp_meta_tag&lt;/span&gt;
    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stylesheet_pack_tag&lt;/span&gt; &lt;span class="s1"&gt;'application'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;media: &lt;/span&gt;&lt;span class="s1"&gt;'all'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'data-turbolinks-track'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'reload'&lt;/span&gt;
    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;javascript_pack_tag&lt;/span&gt; &lt;span class="s1"&gt;'application'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'data-turbolinks-track'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'reload'&lt;/span&gt;
  &lt;span class="nt"&gt;body&lt;/span&gt;
    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="s1"&gt;'shared/nav'&lt;/span&gt;
    &lt;span class="nc"&gt;.container&lt;/span&gt;
      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt;
      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="s1"&gt;'shared/footer'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;code&gt;views/shared/_nav.html.slim&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight slim"&gt;&lt;code&gt;&lt;span class="nc"&gt;.d-flex.flex-column.flex-md-row.align-items-center.p-3.px-md-4.mb-3.bg-white.border-bottom.box-shadow&lt;/span&gt;
  &lt;span class="nc"&gt;.col-sm-5&lt;/span&gt;
    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="n"&gt;root_path&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="nc"&gt;.font-weight-normal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Funny&lt;span class="w"&gt; &lt;/span&gt;Movies&lt;span class="w"&gt; &lt;/span&gt;Site
  &lt;span class="nc"&gt;.col-sm-7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"display: flex; justify-content: flex-end;"&lt;/span&gt;
    &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;current_user&lt;/span&gt;
      &lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="nc"&gt;.btn-light&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Welcome&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;current_user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;email&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="ni"&gt;&amp;amp;nbsp;&lt;/span&gt;  
      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="s2"&gt;"Share a movie"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;share_movie_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s1"&gt;'btn btn-success'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;role: &lt;/span&gt;&lt;span class="s2"&gt;"button"&lt;/span&gt;
      &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="ni"&gt;&amp;amp;nbsp;&lt;/span&gt;
      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="s2"&gt;"Logout"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;destroy_user_session_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;method: :delete&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s1"&gt;'btn btn-danger'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;role: &lt;/span&gt;&lt;span class="s2"&gt;"button"&lt;/span&gt;
    &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;form_for&lt;/span&gt; &lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;method: :post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;url: &lt;/span&gt;&lt;span class="n"&gt;create_session_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;html: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s1"&gt;'form-inline'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
        &lt;span class="nc"&gt;.form-group.mb-2&lt;/span&gt;
          &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;email_field&lt;/span&gt; &lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s1"&gt;'form-control'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;placeholder: &lt;/span&gt;&lt;span class="s1"&gt;'email'&lt;/span&gt;
        &lt;span class="nc"&gt;.form-group.mx-sm-3.mb-2&lt;/span&gt;
          &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;password_field&lt;/span&gt; &lt;span class="ss"&gt;:password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s1"&gt;'form-control'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;placeholder: &lt;/span&gt;&lt;span class="s1"&gt;'password'&lt;/span&gt;
        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;submit&lt;/span&gt; &lt;span class="s1"&gt;'Login / Register'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s1"&gt;'btn btn-primary mb-2'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In home page, also index of PostsController.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;views/posts/index.html.slim&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight slim"&gt;&lt;code&gt;&lt;span class="nc"&gt;.container&lt;/span&gt;
  &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt;
    &lt;span class="nt"&gt;h5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;movies
  &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="vi"&gt;@posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="nc"&gt;.card.mb-3&lt;/span&gt;
      &lt;span class="nc"&gt;.row.no-gutters&lt;/span&gt;
        &lt;span class="nc"&gt;.col-md-6&lt;/span&gt;
          &lt;span class="nt"&gt;iframe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"420"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"315"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="nc"&gt;.share_url.gsub&lt;/span&gt;('watch?&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;', '&lt;/span&gt;embed/'))
        &lt;span class="nc"&gt;.col-md-6&lt;/span&gt;
          &lt;span class="nc"&gt;.card-body&lt;/span&gt;
            &lt;span class="nt"&gt;h5&lt;/span&gt;&lt;span class="nc"&gt;.card-title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'- YouTube'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.share&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Share&lt;span class="w"&gt; &lt;/span&gt;by:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;email&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Description:
            &lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.card-text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;description&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;truncate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;

  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;will_paginate&lt;/span&gt; &lt;span class="vi"&gt;@posts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In share a youtube page.&lt;br&gt;
&lt;code&gt;views/posts/new.html.slim&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight slim"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"width: 40rem;margin: auto"&lt;/span&gt;)&lt;span class="w"&gt; &lt;/span&gt;
  &lt;span class="nc"&gt;.card-header.text-center&lt;/span&gt;
    &lt;span class="nt"&gt;h5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Share&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;Youtube&lt;span class="w"&gt; &lt;/span&gt;movie
  &lt;span class="nc"&gt;.card-body&lt;/span&gt;
    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="s1"&gt;'form'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;code&gt;views/posts/_form.html.slim&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight slim"&gt;&lt;code&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;form_for&lt;/span&gt; &lt;span class="vi"&gt;@post&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="nc"&gt;.form-group.row&lt;/span&gt;
    &lt;span class="nc"&gt;.col-sm-2&lt;/span&gt;
      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;label&lt;/span&gt; &lt;span class="ss"&gt;:share_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s1"&gt;'col-form-label'&lt;/span&gt;
    &lt;span class="nc"&gt;.col-sm-10&lt;/span&gt;
      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text_field&lt;/span&gt; &lt;span class="ss"&gt;:share_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s1"&gt;'form-control'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;required: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="nc"&gt;.form-group.row&lt;/span&gt;
    &lt;span class="nc"&gt;.col-sm-2&lt;/span&gt;
    &lt;span class="nc"&gt;.col-sm-10&lt;/span&gt;
      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;submit&lt;/span&gt; &lt;span class="s1"&gt;'Submit'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;class: &lt;/span&gt;&lt;span class="s1"&gt;'btn btn-primary btn-lg btn-block'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  2.3 Make it alive!
&lt;/h5&gt;

&lt;p&gt;I recommend guys using Heroku  for hostingRails application. &lt;a href="https://heroku.com" rel="noopener noreferrer"&gt;Heroku&lt;/a&gt;  is a platform as a service (PaaS) that enables developers to build, run, and operate applications entirely in the cloud.  Register now!&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://devcenter.heroku.com/articles/getting-started-with-rails5" rel="noopener noreferrer"&gt;artice&lt;/a&gt; will help you deploy our website to Heroku.&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.amazonaws.com%2Fi%2Ft0roqfcr73d5r92fnr2i.jpg" 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.amazonaws.com%2Fi%2Ft0roqfcr73d5r92fnr2i.jpg" alt="Alt Text" width="600" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Our website alive now: &lt;a href="https://funny-movies-site.herokuapp.com/" rel="noopener noreferrer"&gt;https://funny-movies-site.herokuapp.com&lt;/a&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  We have awesome funny youtube videos with Rails 6.
&lt;/h4&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.amazonaws.com%2Fi%2Fjmk9a60g9ytqbmpglk59.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.amazonaws.com%2Fi%2Fjmk9a60g9ytqbmpglk59.png" alt="Alt Text" width="800" height="487"&gt;&lt;/a&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.amazonaws.com%2Fi%2F4plrkndqss2lgfx85xsq.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.amazonaws.com%2Fi%2F4plrkndqss2lgfx85xsq.png" alt="Alt Text" width="800" height="486"&gt;&lt;/a&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.amazonaws.com%2Fi%2Fgg8ovgrif9774ufder1i.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.amazonaws.com%2Fi%2Fgg8ovgrif9774ufder1i.png" alt="Alt Text" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In this tutorial, we can build Sharing Youtube Videos with Rails 6 and gems: Devise, nokogiri, will_paginate and Bootstrap 4. Learn how about crawling website.  And deploy our website to heroku. Make it alive!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dereknguyen269/funny-movies-site" rel="noopener noreferrer"&gt;Github Funny youtube videos&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rails</category>
      <category>bootstrap</category>
      <category>crawler</category>
      <category>youtube</category>
    </item>
    <item>
      <title>How To Check URL Is Working Or Not In Programing Languages?</title>
      <dc:creator>TOOlover</dc:creator>
      <pubDate>Wed, 24 Jun 2020 13:24:25 +0000</pubDate>
      <link>https://forem.com/toolover/how-to-check-url-is-working-or-not-in-programing-languages-2k9m</link>
      <guid>https://forem.com/toolover/how-to-check-url-is-working-or-not-in-programing-languages-2k9m</guid>
      <description>&lt;h1&gt;
  
  
  Ruby
&lt;/h1&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;'net/http'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'open-uri'&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;working_url?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url_str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;URI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url_str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="no"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HTTP&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;head&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request_uri&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'200'&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;rescue&lt;/span&gt;
  &lt;span class="kp"&gt;false&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  PHP
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"http://www.domain.com/demo.jpg"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;get_headers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;strpos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="s1"&gt;'404'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"URL Exists"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"URL Not Exists"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Python
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;urllib2&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;urlopen&lt;/span&gt;
&lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://kipalog.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Exists!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="c1"&gt;# Or
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;urllib2&lt;/span&gt;
&lt;span class="n"&gt;ret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://kipalog.com&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Exists!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Shell
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="nv"&gt;http_code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-I&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"%{http_code}"&lt;/span&gt; &lt;span class="s2"&gt;"https://kipalog.com/"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$http_code&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"200"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Exist!!!"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  CURL
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"http://www.domain.com/demo.jpg"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$curl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; curl_init&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
curl_setopt&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$curl&lt;/span&gt;, CURLOPT_NOBODY, &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; curl_exec&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$curl&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nv"&gt;$statusCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; curl_getinfo&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$curl&lt;/span&gt;, CURLINFO_HTTP_CODE&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$statusCode&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; 404&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"URL Not Exists"&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"URL Exists"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"URL not Exists"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ruby</category>
      <category>python</category>
      <category>php</category>
      <category>bash</category>
    </item>
  </channel>
</rss>
