<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tatsuya Sato</title>
    <description>The latest articles on DEV Community by Tatsuya Sato (@satoryu).</description>
    <link>https://dev.to/satoryu</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%2F138396%2Fe0654877-7675-4425-b181-1fe7f1909c02.jpeg</url>
      <title>DEV Community: Tatsuya Sato</title>
      <link>https://dev.to/satoryu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/satoryu"/>
    <language>en</language>
    <item>
      <title>Labeling by GPT</title>
      <dc:creator>Tatsuya Sato</dc:creator>
      <pubDate>Sun, 21 May 2023 16:17:24 +0000</pubDate>
      <link>https://dev.to/satoryu/labeling-by-gpt-2fj6</link>
      <guid>https://dev.to/satoryu/labeling-by-gpt-2fj6</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I developed a GitHub Action that chooses suitable labels for an opened/edited issue and puts the labels to the issue automatically without predefined rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;Maintainer Must-Haves&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/marketplace/actions/labeling-by-gpt"&gt;Labeling by GPT · Actions · GitHub Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

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

&lt;p&gt;You can see &lt;a href="https://github.com/satoryu/labeling-by-gpt/issues/3"&gt;this issue&lt;/a&gt; and try it by opening new issue!&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;When an issue is opened/edited, this action reads its title and description, choose suitable labels in the repository and  add those labels to the issue. &lt;/p&gt;

&lt;p&gt;You don't need to define rules which issue should should have which labels in advance. &lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/satoryu"&gt;
        satoryu
      &lt;/a&gt; / &lt;a href="https://github.com/satoryu/labeling-by-gpt"&gt;
        labeling-by-gpt
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This action puts labels to an issues in the repository autocratically without pre-defined rule. 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Labeling by GPT&lt;/h1&gt;
&lt;p&gt;When creating new issue, this action puts labels to an issues in the repository autocratically without pre-defined rule.
This is powered by OpenAI completion API to choose suitable labels.&lt;/p&gt;
&lt;p&gt;Please note that this action supports only &lt;code&gt;issues&lt;/code&gt; trigger and the two types: &lt;code&gt;opened&lt;/code&gt; and &lt;code&gt;edited&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
Inputs&lt;/h2&gt;
&lt;h3&gt;
&lt;code&gt;openai-api-key&lt;/code&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Required&lt;/strong&gt; Your OpenAI API Key.&lt;/p&gt;
&lt;h3&gt;
&lt;code&gt;github-token&lt;/code&gt;
&lt;/h3&gt;
&lt;p&gt;Optional.
GitHub API token to access GitHub API.
The default value is &lt;code&gt;secrets.GITHUB_TOKEN&lt;/code&gt;, an API token provided for an action.
Be sure of that this token has a permission to put labels to an issue.
&lt;a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#setting-the-permissions-of-the-github_token-for-your-repository"&gt;This document&lt;/a&gt; would help you.&lt;/p&gt;
&lt;h2&gt;
Example&lt;/h2&gt;
&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;on&lt;/span&gt;:
  &lt;span class="pl-ent"&gt;issues&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;types&lt;/span&gt;: &lt;span class="pl-s"&gt;[opened, edited]&lt;/span&gt;

&lt;span class="pl-ent"&gt;jobs&lt;/span&gt;:
  &lt;span class="pl-ent"&gt;test&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;test&lt;/span&gt;
    &lt;span class="pl-ent"&gt;runs-on&lt;/span&gt;: &lt;span class="pl-s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="pl-ent"&gt;steps&lt;/span&gt;:
      - &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;satoryu/labeling-by-gpt@main&lt;/span&gt;
        &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
          &lt;span class="pl-ent"&gt;openai-api-key&lt;/span&gt;: &lt;span class="pl-s"&gt;${{ secrets.OPENAI_API_KEY }}&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/satoryu/labeling-by-gpt"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;MIT License&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;In maintaining OSS projects, triage is an important activity. GitHub provides 'labeling issues' feature to help maintainers triage their repositories' issues. But triage is boring! As new issue is opened, maintainers have to read its title and description then choose suitable labels and add the labels to it. As issues in a repository increases, the workload of triage increases too. If there were few maintainers of the repo, triage would be impossible. &lt;br&gt;
GitHub Action has the possibility to reduce this workload. But maintainers would define rules　in advance in which condition and labels the action should choose and add to an issue. &lt;/p&gt;

&lt;p&gt;On the other hand, NLP is getting popular by ChatGPT, OpenAI APIs. OpenAI completion API processes several tasks to a given text 'prompt'. I came up with the idea that this API would help maintainers triage their issues. &lt;/p&gt;

&lt;p&gt;This is my motivation to develop this GitHub action. &lt;/p&gt;
&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;First, I had to confirm that OpenAI completion API works as I want: choose suitable labels from available labels in a repository. &lt;br&gt;
In order to do it, I used ChatGPT:&lt;/p&gt;

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

&lt;p&gt;Next, I implemented and test it on its repository. &lt;br&gt;
This is quite simple and easy: define a YAML file under &lt;code&gt;.github/workflows&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;issues&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;opened&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;edited&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;satoryu/labeling-by-gpt@main&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;openai-api-key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.OPENAI_API_KEY }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Specifying the main branch like &lt;code&gt;satoryu/labeling-by-gpt@main&lt;/code&gt; not version (e.g. v0.0.1) always refers to the latest version of this action. This configuration is good for testing on GitHub. &lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources/Info
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.github.com/en/actions/creating-actions/about-custom-actions"&gt;About custom actions - GitHub Docs&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;This doc gave me the basics how to implement an action in JavaScript.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/hwchase17/langchain"&gt;hwchase17/langchain: ⚡ Building applications with LLMs through composability ⚡&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;I've read some prompts in this code. The prompts give me some hints to implement a prompt of my github action.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>githubhack23</category>
      <category>github</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Undine v0.2.0 released</title>
      <dc:creator>Tatsuya Sato</dc:creator>
      <pubDate>Wed, 29 Apr 2020 10:52:06 +0000</pubDate>
      <link>https://dev.to/satoryu/undine-v0-2-0-released-3o1b</link>
      <guid>https://dev.to/satoryu/undine-v0-2-0-released-3o1b</guid>
      <description>&lt;p&gt;When developing, sometimes you might run your code to check how it works.&lt;br&gt;
At that time, you might see an exception you didn't expect before. &lt;br&gt;
What's next?&lt;br&gt;
If I were you, I would google with the error message to find blog posts and documents dealing with the exception.&lt;br&gt;
You too?&lt;/p&gt;

&lt;p&gt;Today I released new version of Undine 🎉 : &lt;code&gt;Undine&lt;/code&gt; adds a termination process at exit to open google search with error message of exception unrescued in your Ruby code.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/satoryu"&gt;
        satoryu
      &lt;/a&gt; / &lt;a href="https://github.com/satoryu/undine"&gt;
        undine
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Open your browser for searching the message of an unrescued exception.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Undine&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://badge.fury.io/rb/undine" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/3452799d5f3d26819bfb7d3ad424bfef5926be81cabb3cc9aa6f2be5ec014490/68747470733a2f2f62616467652e667572792e696f2f72622f756e64696e652e737667" alt="Gem Version"&gt;&lt;/a&gt;
&lt;a href="https://travis-ci.org/satoryu/undine" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/d61c73fb866682209f3b3265c964013d9951e8b737a910e40daa72b58daee0d1/68747470733a2f2f7472617669732d63692e6f72672f7361746f7279752f756e64696e652e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Undine is a gem to help your development experience: When an exception unrescued in your  code is raised, opens google search with the errror message in your browser.&lt;/p&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;p&gt;Add this line to your application's Gemfile:&lt;/p&gt;
&lt;div class="highlight highlight-source-ruby position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-en"&gt;gem&lt;/span&gt; &lt;span class="pl-s"&gt;'undine'&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-pds"&gt;group&lt;/span&gt;: &lt;span class="pl-pds"&gt;:development&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;And then execute:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;    bundle install&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Or install it yourself as:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;    gem install undine&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
Usage&lt;/h2&gt;
&lt;p&gt;Just &lt;code&gt;require 'undine'&lt;/code&gt; and &lt;code&gt;Undine.load&lt;/code&gt;. That's it.&lt;/p&gt;
&lt;h3&gt;
Example&lt;/h3&gt;
&lt;div class="highlight highlight-source-ruby position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-en"&gt;require&lt;/span&gt; &lt;span class="pl-s"&gt;'undine'&lt;/span&gt;

&lt;span class="pl-v"&gt;Undine&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;load&lt;/span&gt;

&lt;span class="pl-k"&gt;def&lt;/span&gt; &lt;span class="pl-en"&gt;something_function&lt;/span&gt;
  &lt;span class="pl-s"&gt;'hoge'&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;foo&lt;/span&gt;
&lt;span class="pl-k"&gt;rescue&lt;/span&gt; &lt;span class="pl-c1"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="pl-en"&gt;e&lt;/span&gt;
  &lt;span class="pl-en"&gt;warn&lt;/span&gt; &lt;span class="pl-en"&gt;e&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;message&lt;/span&gt;
  &lt;span class="pl-en"&gt;raise&lt;/span&gt; &lt;span class="pl-en"&gt;e&lt;/span&gt;
&lt;span class="pl-k"&gt;end&lt;/span&gt;

&lt;span class="pl-en"&gt;something_function&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;Undine.load&lt;/code&gt; registers a post process to catch an unrescued exception and google its message.
In this code, &lt;code&gt;NoMethodError&lt;/code&gt; raises as &lt;code&gt;String&lt;/code&gt; does not have &lt;code&gt;foo&lt;/code&gt; method.
As executing this code, you are going to see google search page with the error message: &lt;a href="https://www.google.com/search?q=undefined+method+%60foo%27+for+%22hoge%22%3AString%0ADid+you+mean%3F++for" rel="nofollow"&gt;https://www.google.com/search?q=undefined+method+%60foo%27+for+%22hoge%22%3AString%0ADid+you+mean%3F++for&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Configuration&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Undine.configure&lt;/code&gt; is for users to customize behavior of &lt;code&gt;Undine&lt;/code&gt;.
The method gives a given block &lt;code&gt;Undine::Configuration&lt;/code&gt; object.&lt;/p&gt;
&lt;div class="highlight highlight-source-ruby position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-v"&gt;Undine&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/satoryu/undine"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;undine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or if your app uses bundler add the following line to Gemfile:&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;gem&lt;/span&gt; &lt;span class="s1"&gt;'undine'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;group: :development&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;code&gt;Undine.load&lt;/code&gt; registers a process to be executed at exit.&lt;br&gt;
The process checks existence of exception unrescued in your code and open your browser to google with message of the exception as keyword.&lt;/p&gt;

&lt;p&gt;Here is sample code:&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;'undine'&lt;/span&gt;

&lt;span class="no"&gt;Undine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;something_function&lt;/span&gt;
  &lt;span class="s1"&gt;'hoge'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;foo&lt;/span&gt;
&lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;
  &lt;span class="nb"&gt;warn&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;message&lt;/span&gt;
  &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;something_function&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this code, &lt;code&gt;something_function&lt;/code&gt; raises &lt;code&gt;NoMethodError&lt;/code&gt; and the exception is not rescued.&lt;br&gt;
The process registered by &lt;code&gt;Undine.load&lt;/code&gt; catches it and generates a query from the exception object, in default, just calls the exception's &lt;code&gt;message&lt;/code&gt;. &lt;br&gt;
The query is as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.google.com/search?q=undefined+method+%60foo%27+for+%22hoge%22%3AString%0ADid+you+mean%3F++for"&gt;https://www.google.com/search?q=undefined+method+%60foo%27+for+%22hoge%22%3AString%0ADid+you+mean%3F++for&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Welcome Bug reports, feature requests and pull-requests!
&lt;/h2&gt;

&lt;p&gt;I'm going to welcome any issue and pull-request 👍&lt;br&gt;
Please open new issue or pull-request at &lt;a href="https://github.com/satoryu/undine/issues/new/choose"&gt;the repo&lt;/a&gt;.&lt;/p&gt;

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