<?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: Hiroyuki Kuromiya</title>
    <description>The latest articles on DEV Community by Hiroyuki Kuromiya (@kromiii).</description>
    <link>https://dev.to/kromiii</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%2F1185553%2F8ead4245-16d5-487d-afd2-c185dc9e75dd.jpg</url>
      <title>DEV Community: Hiroyuki Kuromiya</title>
      <link>https://dev.to/kromiii</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kromiii"/>
    <language>en</language>
    <item>
      <title>Extract metadata of paper and export it to Notion DB</title>
      <dc:creator>Hiroyuki Kuromiya</dc:creator>
      <pubDate>Wed, 18 Dec 2024 02:50:25 +0000</pubDate>
      <link>https://dev.to/kromiii/extract-metadata-of-paper-and-export-it-to-notion-db-3m3l</link>
      <guid>https://dev.to/kromiii/extract-metadata-of-paper-and-export-it-to-notion-db-3m3l</guid>
      <description>&lt;p&gt;I recently developed a chrome extension named "Paper to Notion."&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://chromewebstore.google.com/detail/paper-to-notion/edollpfjfbfbginhdlajipmomjmpalhb?authuser=0&amp;amp;amp%3Bhl=ja" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FQXJmSuW9pBaYXpLiLa2Ltj-ngoYbP2N4GecfyqVLnKBw_HXaRVoidRDoMf8gZfrXYWOZSI0O4GqRquLynplSifx7Xg%3Ds128-rj-sc0x00ffffff" height="128" class="m-0" width="128"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://chromewebstore.google.com/detail/paper-to-notion/edollpfjfbfbginhdlajipmomjmpalhb?authuser=0&amp;amp;amp%3Bhl=ja" rel="noopener noreferrer" class="c-link"&gt;
          Paper to Notion - Chrome Web Store
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          A Chrome extension that imports paper metadata from Crossref to Notion using a DOI.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fssl.gstatic.com%2Fchrome%2Fwebstore%2Fimages%2Ficon_48px.png" width="48" height="48"&gt;
        chromewebstore.google.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Once you input the DOI of the paper, it automatically export it to your Notion DB.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/Pg0eNnxyVTI?si=WsfSqV-gT2FhWHFg" rel="noopener noreferrer"&gt;https://youtu.be/Pg0eNnxyVTI?si=WsfSqV-gT2FhWHFg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Structure is very simple: it calls &lt;a href="https://www.crossref.org/documentation/retrieve-metadata/rest-api/" rel="noopener noreferrer"&gt;Crossref API&lt;/a&gt; to retrieve metadata and uses Notion API to conntect the database.&lt;/p&gt;

&lt;p&gt;I used the chrome extension development framework, &lt;a href="https://wxt.dev/" rel="noopener noreferrer"&gt;WXT&lt;/a&gt;, which made the development much more easier.&lt;/p&gt;

&lt;p&gt;With &lt;a href="https://github.com/Songmu/tagpr" rel="noopener noreferrer"&gt;tagpr&lt;/a&gt;, it generates the release zip file automatically, once I pushed any changes to the main branch.&lt;/p&gt;

&lt;p&gt;My GitHub Actions workflow file is here:&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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Release&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;v*'&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;build-and-release&lt;/span&gt;&lt;span class="pi"&gt;:&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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout repository&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;actions/checkout@v4&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;Set up Node.js&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;actions/setup-node@v4&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;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;22'&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;Install dependencies&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install&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;Build and zip&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm run zip&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;Create Release&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create_release&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;actions/create-release@v1&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&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;tag_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ github.ref }}&lt;/span&gt;
          &lt;span class="na"&gt;release_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Release ${{ github.ref }}&lt;/span&gt;
          &lt;span class="na"&gt;draft&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
          &lt;span class="na"&gt;prerelease&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&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;Strip 'v' prefix from version&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;strip_v&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;echo "version=${GITHUB_REF#refs/tags/v}" &amp;gt;&amp;gt; $GITHUB_ENV&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;Upload Release Asset&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;actions/upload-release-asset@v1&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&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;upload_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ steps.create_release.outputs.upload_url }}&lt;/span&gt;
          &lt;span class="na"&gt;asset_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.output/paper2notion-${{ env.version }}-chrome.zip&lt;/span&gt;
          &lt;span class="na"&gt;asset_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;paper2notion-${{ env.version }}-chrome.zip&lt;/span&gt;
          &lt;span class="na"&gt;asset_content_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/zip&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feel free to post any issues and pull requests. I published the extension as OSS!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kromiii/paper-to-notion" rel="noopener noreferrer"&gt;https://github.com/kromiii/paper-to-notion&lt;/a&gt;&lt;/p&gt;

</description>
      <category>notion</category>
      <category>typescript</category>
      <category>wxt</category>
      <category>extensions</category>
    </item>
    <item>
      <title>How to Set Up a Slack Bot for SQL Query Generation with tbls-ask-agent-slack</title>
      <dc:creator>Hiroyuki Kuromiya</dc:creator>
      <pubDate>Tue, 24 Sep 2024 11:40:55 +0000</pubDate>
      <link>https://dev.to/kromiii/how-to-set-up-a-slack-bot-for-sql-query-generation-with-tbls-ask-agent-slack-3con</link>
      <guid>https://dev.to/kromiii/how-to-set-up-a-slack-bot-for-sql-query-generation-with-tbls-ask-agent-slack-3con</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A while back, I created a Slack App called &lt;a href="https://github.com/kromiii/tbls-ask-agent-slack" rel="noopener noreferrer"&gt;tbls-ask-agent-slack&lt;/a&gt;. In short, it's a Slack Bot that generates SQL queries based on natural language requests. I introduced it in &lt;a href="https://tech.pepabo.com/2024/05/03/tbls-ask-bot/" rel="noopener noreferrer"&gt;my company's tech blog&lt;/a&gt; (in Japanese), and it gained some attention. However, I didn't provide detailed setup instructions, so I'd like to share a step-by-step guide here.&lt;/p&gt;

&lt;p&gt;In this tutorial, we'll set up the bot and try generating queries for a sample database schema right from Slack.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/bcTLiIFCMWk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparation
&lt;/h2&gt;

&lt;p&gt;First, clone the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ghq get git@github.com:kromiii/tbls-ask-agent-slack.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(I use the &lt;code&gt;ghq&lt;/code&gt; command, but feel free to use &lt;code&gt;git clone&lt;/code&gt; if you prefer.)&lt;/p&gt;

&lt;p&gt;Next, create a Slack App:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://api.slack.com/apps" rel="noopener noreferrer"&gt;https://api.slack.com/apps&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create New App" and choose "From an app manifest"&lt;/li&gt;
&lt;li&gt;Select your workspace&lt;/li&gt;
&lt;li&gt;When prompted for the manifest, copy and paste the contents of the &lt;code&gt;manifest.yml&lt;/code&gt; file from the cloned repository&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Setting Up Environment Variables
&lt;/h2&gt;

&lt;p&gt;You'll need to set three environment variables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;OPENAI_API_KEY&lt;/code&gt;: Your OpenAI API key&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SLACK_APP_TOKEN&lt;/code&gt;: Slack App token&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SLACK_OAUTH_TOKEN&lt;/code&gt;: Slack OAuth token&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Create an &lt;code&gt;.envrc&lt;/code&gt; file by copying the sample:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .envrc.sample .envrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit &lt;code&gt;.envrc&lt;/code&gt; and add your OpenAI API key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export OPENAI_API_KEY=sk-***
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the Slack tokens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to your Slack App's settings&lt;/li&gt;
&lt;li&gt;Under "OAuth &amp;amp; Permissions", copy the token starting with &lt;code&gt;xoxb-&lt;/code&gt; and set it as &lt;code&gt;SLACK_OAUTH_TOKEN&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Under "Basic Information", copy the App-Level token starting with &lt;code&gt;xapp-&lt;/code&gt; and set it as &lt;code&gt;SLACK_APP_TOKEN&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Setting Up the Sample Schema
&lt;/h2&gt;

&lt;p&gt;tbls-ask-agent-slack requires a database schema file generated by &lt;strong&gt;tbls&lt;/strong&gt;. For this tutorial, we'll use a sample schema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;schemas/config.yml.sample schemas/config.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you need to reference files from a private repository, you can add a &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; to your environment variables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running the Bot
&lt;/h2&gt;

&lt;p&gt;With everything set up, run the bot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you see "Connected to Slack with Socket Mode.", the bot is ready.&lt;/p&gt;

&lt;p&gt;Invite the bot to a Slack channel and mention it. &lt;/p&gt;

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

&lt;p&gt;It will prompt you to choose a schema (select "wordpress" for this example).&lt;/p&gt;

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

&lt;p&gt;After a short wait, it will respond with an explanation and the requested SQL query.&lt;/p&gt;

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

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

&lt;p&gt;That's it! You've successfully set up and run tbls-ask-agent-slack. For those looking to deploy it in a production environment, I've provided Kubernetes manifest files in the repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kromiii/tbls-ask-agent-slack/blob/main/manifests/deployment.yml" rel="noopener noreferrer"&gt;https://github.com/kromiii/tbls-ask-agent-slack/blob/main/manifests/deployment.yml&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to use and modify them as needed. Happy querying!&lt;/p&gt;

</description>
      <category>go</category>
      <category>database</category>
      <category>openai</category>
      <category>tbls</category>
    </item>
    <item>
      <title>Today I Learned: An App to Capture Your Daily Learning from LLM Chats</title>
      <dc:creator>Hiroyuki Kuromiya</dc:creator>
      <pubDate>Sat, 21 Sep 2024 01:42:16 +0000</pubDate>
      <link>https://dev.to/kromiii/i-created-a-today-i-learned-til-app-merging-ai-with-daily-learning-1afc</link>
      <guid>https://dev.to/kromiii/i-created-a-today-i-learned-til-app-merging-ai-with-daily-learning-1afc</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I'm excited to introduce "Today I Learned" (TIL), an app I've developed to help you capture and reflect on your daily learning experiences. &lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.today-i-learned.app/" rel="noopener noreferrer"&gt;
      today-i-learned.app
    &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;My TIL app automatically summarizes "what you've learned today" from your chat history with Large Language Models (LLMs) and presents it in a user-friendly dashboard for easy review. To get a quick overview of how it works, check out this demo video:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/MO2Tzeaca80"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The Journey Behind TIL
&lt;/h2&gt;

&lt;p&gt;My journey as a full-time web engineer began in the spring of 2023. Prior to that, I spent a decade in academia, focusing on educational technology research. During that time, I developed learning support tools, including dashboards for students.&lt;br&gt;
After transitioning to the tech industry, I was fascinated by the unique culture of software engineering. One aspect that particularly caught my attention was the concept of "Today I Learned" (TIL).&lt;/p&gt;

&lt;p&gt;While daily reports are common in many professions, I noticed that engineers often shared not just what they did, but what they learned. Inspired by this, I started adding a "What I Learned Today" section to my own reports. Little did I know, I was participating in the broader TIL culture of the tech world.&lt;/p&gt;
&lt;h2&gt;
  
  
  Understanding TIL
&lt;/h2&gt;

&lt;p&gt;The TIL concept dates back to around 2008, originating from a "today-i-learned" topic on Reddit. It gained traction in the software development community, with developers creating "til" repositories on GitHub to document their daily learnings in Markdown format. Josh Branchaud's repository played a significant role in popularizing this practice.&lt;/p&gt;

&lt;p&gt;The essence of TIL is beautifully captured in Reddit's TIL topic description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"TIL does not aim for in-depth and serious discussion about a subject, but rather is more interested in a pop-knowledge overview of some minutiae of a field."&lt;br&gt;
In other words, TIL is about sharing those "aha!" moments and bite-sized learnings, regardless of how profound or trivial they might seem.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  How the TIL App Works
&lt;/h2&gt;

&lt;p&gt;Now, let me walk you through the technical aspects of the TIL app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The app is built with NextJS and hosted on Vercel&lt;/li&gt;
&lt;li&gt;Firestore serves as the knowledge storage backend&lt;/li&gt;
&lt;li&gt;User authentication is handled by Firebase Authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the crucial task of extracting knowledge from chat histories, I leveraged the OpenAI API. The core logic resides in the digest API file, where I use the following prompt to distill the user's learnings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const completion = await openai.beta.chat.completions.parse({
 model: "gpt-4o-2024–08–06",
 messages: [
 {
 role: "system",
 content:
 "Extract what the user learned from the chat to the bot in 100 words. Provide the response in plain text without using any markdown formatting. Use the same language as the user's input for the summary.",
 },
 …messages,
 ],
 response_format: zodResponseFormat(Knowledge, "knowledge"),
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This two-stage LLM process might seem redundant, but using chat as the source of knowledge extraction offers a clear picture of what the user was seeking to learn.&lt;/p&gt;
&lt;h2&gt;
  
  
  Closing Thoughts: Why an English Interface?
&lt;/h2&gt;

&lt;p&gt;You might notice that the TIL app's interface is entirely in English although I am Japanese. This decision stems from two factors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;TIL culture originated in the United States, and I wanted to make the app accessible to a global audience.&lt;/li&gt;
&lt;li&gt;My academic experience taught me that, unfortunately, work published solely in Japanese often struggles to gain recognition on the global stage.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The source code is open and available on GitHub. Feel free to localize, self-host, or contribute to the project. I welcome any issues or pull requests you might have!&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--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/kromiii" rel="noopener noreferrer"&gt;
        kromiii
      &lt;/a&gt; / &lt;a href="https://github.com/kromiii/today-i-learned" rel="noopener noreferrer"&gt;
        today-i-learned
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Today I Learned - AI-Powered Learning Assistant&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Today I Learned is an AI-powered learning support tool that helps you record daily discoveries, interact with AI, and track your learning progress.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Ask AI: Interact with an AI assistant to get answers on any topic.&lt;/li&gt;
&lt;li&gt;Automatic Learning Summary: Summarize and organize your learnings from AI interactions.&lt;/li&gt;
&lt;li&gt;Learning Dashboard: Visualize your daily learning progress and growth.&lt;/li&gt;
&lt;li&gt;User Authentication: Secure sign-in with Google.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Technology Stack&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;Next.js&lt;/a&gt;: React framework for building the frontend and API routes.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://firebase.google.com/" rel="nofollow noopener noreferrer"&gt;Firebase&lt;/a&gt;: Authentication and Firestore database.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openai.com/" rel="nofollow noopener noreferrer"&gt;OpenAI&lt;/a&gt;: AI-powered chat functionality.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://tailwindcss.com/" rel="nofollow noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt;: Utility-first CSS framework for styling.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.chartjs.org/" rel="nofollow noopener noreferrer"&gt;Chart.js&lt;/a&gt;: Creating interactive charts for the dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repository:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;git clone https://github.com/yourusername/today-i-learned.git cd today-i-learned
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Install dependencies:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Set up environment variables:
Create a &lt;code&gt;.env.local&lt;/code&gt; file in the root directory and add the following variables:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;NEXT_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_firebase_auth_domain NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_firebase_project_id NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_firebase_storage_bucket NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_firebase_messaging_sender_id NEXT_PUBLIC_FIREBASE_APP_ID=your_firebase_app_id OPENAI_API_KEY=your_openai_api_key
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Run the…&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kromiii/today-i-learned" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;By embracing the TIL concept and leveraging the power of LLMs, this app aims to make your daily learning more tangible and reflective. I hope you find it useful in your own learning journey!&lt;/p&gt;

</description>
      <category>todayilearned</category>
      <category>nextjs</category>
      <category>firebase</category>
      <category>openai</category>
    </item>
    <item>
      <title>Introducing a CLI Tool for Automatically Detecting Unused Unleash Flags</title>
      <dc:creator>Hiroyuki Kuromiya</dc:creator>
      <pubDate>Thu, 19 Sep 2024 11:41:44 +0000</pubDate>
      <link>https://dev.to/kromiii/introducing-a-cli-tool-for-automatically-detecting-unused-unleash-flags-256i</link>
      <guid>https://dev.to/kromiii/introducing-a-cli-tool-for-automatically-detecting-unused-unleash-flags-256i</guid>
      <description>&lt;p&gt;Hello everyone! Today, I'd like to introduce a CLI tool I developed that automatically detects unused Unleash flags. By using this tool, you can easily identify outdated feature flags in your project and help clean up your codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool Overview
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/kromiii/stale-flag-detector" rel="noopener noreferrer"&gt;stale-flag-detector&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function&lt;/strong&gt;: Automatically detects unused Unleash flags&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Installation&lt;/strong&gt;: Clone the repository and generate the executable using the &lt;code&gt;go build&lt;/code&gt; command&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;After building the tool, you can display a list of stale flags by running it as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;% ./stale-flag-detector
Stale flags:
- unleash-ai-example-stale
- another-stale-flag
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Options
&lt;/h2&gt;

&lt;p&gt;This tool has two main options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;--exclude-potentially-stale-flags&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Excludes potentially stale flags from the results&lt;/li&gt;
&lt;li&gt;For more details on potentially stale flags, please refer to the &lt;a href="https://docs.getunleash.io/reference/technical-debt" rel="noopener noreferrer"&gt;Unleash documentation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;--output-regex&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Outputs the results in regex format&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Example of Regex Output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;% ./stale-flag-detector &lt;span class="nt"&gt;--output-regex&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;unleash-ai-example-stale|another-stale-flag&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Practical Usage Example
&lt;/h2&gt;

&lt;p&gt;The true value of this tool is realized when combined with other command-line tools. For example, by combining it with the &lt;code&gt;pt&lt;/code&gt; command (The Platinum Searcher), you can easily identify where stale flags are being used in your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;% pt &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;./stale-flag-detector &lt;span class="nt"&gt;--output-regex&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; ../sample-app-for-unleash-checker
../sample-app-for-unleash-checker/app/stale.py
9:if client.is_enabled&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"unleash-ai-example-stale"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using this method provides the following advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accurately locate unused flags&lt;/li&gt;
&lt;li&gt;Simplify codebase cleanup&lt;/li&gt;
&lt;li&gt;Contribute to reducing technical debt&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;stale-flag-detector&lt;/code&gt; is a powerful tool for streamlining the maintenance of projects using Unleash. It can help improve feature flag management and keep your codebase clean. Give it a try!&lt;/p&gt;

&lt;p&gt;If you have any feedback or suggestions for improvement, please let us know through Issues or Pull Requests on the GitHub repository. We look forward to hearing your opinions!&lt;/p&gt;

</description>
      <category>go</category>
      <category>cleancoding</category>
    </item>
    <item>
      <title>Experimenting with AI-Scientist: An AI-Powered Paper Review Tool</title>
      <dc:creator>Hiroyuki Kuromiya</dc:creator>
      <pubDate>Sun, 18 Aug 2024 03:45:56 +0000</pubDate>
      <link>https://dev.to/kromiii/experimenting-with-ai-scientist-an-ai-powered-paper-review-tool-4mhh</link>
      <guid>https://dev.to/kromiii/experimenting-with-ai-scientist-an-ai-powered-paper-review-tool-4mhh</guid>
      <description>&lt;h1&gt;
  
  
  Experimenting with AI-Scientist: An AI-Powered Paper Review Tool
&lt;/h1&gt;

&lt;p&gt;As a researcher, I'm always intrigued by new tools that can enhance the academic process. Recently, I came across an interesting project called AI-Scientist, developed by Sakana AI. This tool promises to review academic papers using artificial intelligence. Curious about its capabilities, I decided to put it to the test with a couple of my own published papers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up the Environment
&lt;/h2&gt;

&lt;p&gt;I followed the setup process outlined in a &lt;a href="https://bwgift.hatenadiary.jp/entry/2024/08/13/222431" rel="noopener noreferrer"&gt;blog post&lt;/a&gt; and the &lt;a href="https://github.com/SakanaAI/AI-Scientist" rel="noopener noreferrer"&gt;official GitHub repository&lt;/a&gt;. Here's a quick rundown of the steps:&lt;/p&gt;

&lt;p&gt;1. Clone the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   git clone https://github.com/SakanaAI/AI-Scientist.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2. Install the required dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   pip install -q anthropic aider-chat backoff openai
   pip install -q pypdf pymupdf4llm
   pip install -q torch numpy transformers datasets tiktoken wandb tqdm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;According to the official documentation, texlive-full is required to generate papers, but it is very heavy to use colab.&lt;br&gt;
I just wanted to request a review this time, so skipping it didn't seem like a problem.&lt;/p&gt;

&lt;p&gt;3. Set up the OpenAI API key (I used Google Colab's userdata for this):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;   &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
   &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.colab&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;userdata&lt;/span&gt;
   &lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;userdata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running the AI Review
&lt;/h2&gt;

&lt;p&gt;With the environment set up, I was ready to test the AI-Scientist on my papers. I used the following code to perform the review:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;ai_scientist.perform_review&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_paper&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;perform_review&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini-2024-07-18&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;paper_txt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_paper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-paper.pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;review&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;perform_review&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;paper_txt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;num_reflections&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;num_fs_examples&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;num_reviews_ensemble&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.1&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;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;I tested the AI-Scientist on two of my published papers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.researchgate.net/publication/356492492_Mining_Students'_Engagement_Pattern_in_Summer_Vacation_Assignment?_sg%5B0%5D=xDJpyk8JhLP4ZPl6a5I8GY9_L4PbWVwoner4q3EO3lRyeKhy7agduNaXG0huP4LcYuRWdNo4tegdBf6wJ-UeNEo0JAy85As7tqo_KNO-.OhGr7IHxLxwEFRn5Yka-DTTSY8EB7GmjFXG34n7_frAb56aKz1k3mojd6P9Goc_dagf2S63kXhSxmZh2XJJstg&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6Il9kaXJlY3QiLCJwYWdlIjoicHJvZmlsZSIsInBvc2l0aW9uIjoicGFnZUNvbnRlbnQifX0" rel="noopener noreferrer"&gt;"Mining Students' Engagement Pattern in Summer Vacation Assignment"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.researchgate.net/publication/376659409_Supporting_Reflective_Teaching_Workflow_with_Real-World_Data_and_Learning_Analytics" rel="noopener noreferrer"&gt;"Supporting Reflective Teaching Workflow with Real-World Data and Learning Analytics"&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Surprisingly, both papers received a "Reject" decision from the AI reviewer, with overall scores of 4 out of 10. Here's a summary of the feedback for the first paper:&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Addresses a relevant topic of Learning Analytics in K-12 education&lt;/li&gt;
&lt;li&gt;Identifies distinct engagement patterns&lt;/li&gt;
&lt;li&gt;Provides empirical data on students' engagement and performance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Weaknesses:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lack of methodological details&lt;/li&gt;
&lt;li&gt;Insufficient address of potential confounding factors&lt;/li&gt;
&lt;li&gt;Limited discussion on broader implications&lt;/li&gt;
&lt;li&gt;Inconsistent clarity in writing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Questions posed by the AI:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Requests for more details on clustering methodology&lt;/li&gt;
&lt;li&gt;Inquiries about addressing limitations in future work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The feedback for the second paper was similar, highlighting strengths in addressing significant educational issues but pointing out weaknesses in methodology and validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reflections
&lt;/h2&gt;

&lt;p&gt;While it's disheartening to see my published works receive "Reject" decisions from the AI, it's important to consider a few factors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The AI might be calibrated to very high standards, possibly aiming for top-tier conference or journal quality.&lt;/li&gt;
&lt;li&gt;The tool provides valuable feedback that could be used to improve papers before submission.&lt;/li&gt;
&lt;li&gt;This experiment demonstrates the potential of AI in academic review processes, but also highlights the need for human judgment in interpreting results.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As we continue to integrate AI tools into academic workflows, it's crucial to view them as assistants rather than replacements for human reviewers. They can offer quick, initial feedback, but the nuanced understanding of research context and significance still requires human expertise.&lt;/p&gt;

&lt;p&gt;Have you experimented with AI tools in your research process? I'd love to hear about your experiences in the comments!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Using Notion as a Presentation Tool</title>
      <dc:creator>Hiroyuki Kuromiya</dc:creator>
      <pubDate>Sun, 05 Nov 2023 10:28:14 +0000</pubDate>
      <link>https://dev.to/kromiii/making-notion-as-a-presentation-37ei</link>
      <guid>https://dev.to/kromiii/making-notion-as-a-presentation-37ei</guid>
      <description>&lt;p&gt;Notion is a powerful tool to organize knowledge and share it others. &lt;/p&gt;

&lt;p&gt;For me, Notion is a presentation tool as well as the content management tool.&lt;/p&gt;

&lt;p&gt;Here is the simple description of my npm package named &lt;code&gt;notion-to-slides&lt;/code&gt;.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://speakerdeck.com/khiroyuki1993/notion-to-slides-convert-notion-page-to-presentation-slides" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F1b3283cc1ded497799f4f12d9b190b06%2Fslide_0.jpg%3F28126156" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://speakerdeck.com/khiroyuki1993/notion-to-slides-convert-notion-page-to-presentation-slides" rel="noopener noreferrer" class="c-link"&gt;
          notion-to-slides: convert notion page to presentation slides - Speaker Deck
        &lt;/a&gt;
      &lt;/h2&gt;
        
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd1eu30co0ohy4w.cloudfront.net%2Fassets%2Ffavicon-bdd5839d46040a50edf189174e6f7aacc8abb3aaecd56a4711cf00d820883f47.png"&gt;
        speakerdeck.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Amazingly, this slides is also made by notion.&lt;/p&gt;

&lt;p&gt;You can convert the Notion page to a presentation by just a single command.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;npx @kromiii/notion-to-slides &lt;span class="nt"&gt;--url&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;your notion page url] &lt;span class="nt"&gt;--theme&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;marp theme]


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

&lt;/div&gt;

&lt;p&gt;H1 and H2 Heading in the notion page will be used as the slide title, and the rest of the content will be used as the slide body.&lt;/p&gt;

&lt;p&gt;There are two advantages of using notion as a presentation tool.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your slides become simple, which means readers can easily understand the points you want to say.&lt;/li&gt;
&lt;li&gt;You can make the slides intuitively compared to directly editing the markdown file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Currently, we have a famous chrome plugin published by Wunderpresentation, but it sometimes fail to embed images.&lt;/p&gt;

&lt;p&gt;That is the motivation to develop this package, and it will save the people who have the same problem as me.&lt;/p&gt;

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

</description>
      <category>notion</category>
      <category>typescript</category>
      <category>npm</category>
      <category>cli</category>
    </item>
    <item>
      <title>I noticed that we can use DALL·E from CLI</title>
      <dc:creator>Hiroyuki Kuromiya</dc:creator>
      <pubDate>Wed, 18 Oct 2023 23:28:36 +0000</pubDate>
      <link>https://dev.to/kromiii/we-can-use-dalle-from-cli-3k7k</link>
      <guid>https://dev.to/kromiii/we-can-use-dalle-from-cli-3k7k</guid>
      <description>&lt;p&gt;Hello, this is my first post!&lt;/p&gt;

&lt;p&gt;Yesterday, I tried &lt;a href="https://developer.1password.com/docs/cli/shell-plugins/openai/" rel="noopener noreferrer"&gt;1password openai plugin&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Then, I noticed that we can use &lt;code&gt;openai&lt;/code&gt; command from command line. &lt;/p&gt;

&lt;p&gt;Here are the example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% openai api completions.create -m ada -p "I have two eggs, and"
I have two eggs, and I'll get you a fourth, now have some breakfast, too!"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What is wonderful is that we can create image from cli!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;% openai api image.create -p "a man playing music in a bar" -n 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is here.&lt;/p&gt;

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

&lt;p&gt;Looks nice!&lt;/p&gt;

</description>
      <category>openai</category>
      <category>python</category>
    </item>
  </channel>
</rss>
