<?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: Lunran</title>
    <description>The latest articles on Forem by Lunran (@lunran).</description>
    <link>https://forem.com/lunran</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%2F545130%2Fab4f97ac-8362-443a-b843-ddafce42f921.jpg</url>
      <title>Forem: Lunran</title>
      <link>https://forem.com/lunran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/lunran"/>
    <language>en</language>
    <item>
      <title>Turning GitHub Copilot CLI into an AI Agent via ACP</title>
      <dc:creator>Lunran</dc:creator>
      <pubDate>Sun, 22 Mar 2026 11:11:48 +0000</pubDate>
      <link>https://forem.com/lunran/turning-github-copilot-cli-into-an-ai-agent-via-acp-197f</link>
      <guid>https://forem.com/lunran/turning-github-copilot-cli-into-an-ai-agent-via-acp-197f</guid>
      <description>&lt;p&gt;I wanted an AI agent that could check the news, emails, and my calendar. While OpenClaw is currently popular, dealing with its security and permission requirements can be a hassle.&lt;/p&gt;

&lt;p&gt;By operating the familiar GitHub Copilot CLI through scheduled execution scripts or Discord, I was able to achieve what I wanted. Receiving execution results periodically is convenient, but being able to ask follow-up questions or give instructions for deeper dives directly is even better.&lt;/p&gt;

&lt;p&gt;GitHub Repository: &lt;a href="https://www.google.com/search?q=https://github.com/Lunran/acp-client" rel="noopener noreferrer"&gt;Lunran/acp-client&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Launch GitHub Copilot CLI as an ACP Server
&lt;/h2&gt;

&lt;p&gt;First, start the GitHub Copilot CLI as an ACP server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;copilot --acp --port 8100
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running it within a sandbox can improve safety.&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://zenn.dev/lunran/scraps/5105de92cb9687" rel="noopener noreferrer"&gt;https://zenn.dev/lunran/scraps/5105de92cb9687&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;docker ps -a --format '{{.Names}}' | grep -q "^copilot-acp-container\$" || \
docker start -ai copilot-acp-container || \
docker run -it \
  --name copilot-acp-container \
  -p 8100:8100 \
  -v $(pwd):/workspace \
  -v ./.copilot:/home/agent/.copilot \
  -e GITHUB_TOKEN=$GITHUB_TOKEN \
  copilot-sandbox \
  copilot --acp --port 8100 --autopilot --yolo --model gpt-5-mini
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ACP server seems to expect coding tools as clients, but by following the protocol, you can connect it to any tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.google.com/search?q=https://docs.github.com/en/copilot/using-github-copilot/using-github-copilot-cli-acp-server" rel="noopener noreferrer"&gt;Copilot CLI ACP server - GitHub Docs&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Configure Discord and Start the ACP Client
&lt;/h2&gt;

&lt;p&gt;Next, configure the Discord settings and start the ACP client.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Lunran/acp-client.git
&lt;span class="nb"&gt;cd &lt;/span&gt;acp-client
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter your Discord settings in the .env file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv &lt;span class="nb"&gt;sync
&lt;/span&gt;uv run python main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: Although a model is specified when starting the ACP server, for some reason the default model (Claude Sonnet 4.6) often ends up being used. Therefore, the client includes a process to explicitly set the model during startup.&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubcopilot</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>How to Set Up a Sandbox Environment for GitHub Copilot CLI on Linux</title>
      <dc:creator>Lunran</dc:creator>
      <pubDate>Sun, 22 Mar 2026 09:54:40 +0000</pubDate>
      <link>https://forem.com/lunran/how-to-set-up-a-sandbox-environment-for-github-copilot-cli-on-linux-39n2</link>
      <guid>https://forem.com/lunran/how-to-set-up-a-sandbox-environment-for-github-copilot-cli-on-linux-39n2</guid>
      <description>&lt;p&gt;When running AI coding agents like GitHub Copilot CLI, isolation is key for security and keeping your host environment clean. While Docker Desktop provides a native Sandbox feature for Mac and Windows, Linux users often face different challenges.&lt;/p&gt;

&lt;p&gt;In this post, I’ll share how to set up a robust sandbox environment for GitHub Copilot CLI on Linux, based on my recent experiments.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;Official Docker Sandboxes are currently not supported on Linux.&lt;/p&gt;

&lt;p&gt;To solve this, I used the following template:&lt;br&gt;
&lt;a href="https://github.com/henrybravo/docker-sandbox-run-copilot" rel="noopener noreferrer"&gt;henrybravo/docker-sandbox-run-copilot&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Troubleshooting the Setup on Linux
&lt;/h2&gt;

&lt;p&gt;When using the repository above on a Linux machine, you might encounter a few hurdles:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Quickstart Limitations
&lt;/h3&gt;

&lt;p&gt;The "Option 1: Using Docker Sandbox" recommended in many guides is not applicable because the &lt;code&gt;docker sandbox&lt;/code&gt; command is missing on Linux.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. CRLF Line Ending Issues
&lt;/h3&gt;

&lt;p&gt;If you try "Option 2: Using Docker Run (Standalone)", you might encounter errors because the &lt;code&gt;entrypoint.sh&lt;/code&gt; file in some repositories is saved with Windows-style line endings (CRLF). Linux environments require LF.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. The Solution: Local Build
&lt;/h3&gt;

&lt;p&gt;To get everything working correctly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repository.&lt;/li&gt;
&lt;li&gt;Fix the line endings of &lt;code&gt;entrypoint.sh&lt;/code&gt; (e.g., using &lt;code&gt;dos2unix&lt;/code&gt; or your editor).&lt;/li&gt;
&lt;li&gt;Follow &lt;strong&gt;Option 3: Build Locally&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Persisting Session Data
&lt;/h2&gt;

&lt;p&gt;By default, a sandbox environment is ephemeral. This means you lose your session information, such as planning results (&lt;code&gt;plan.md&lt;/code&gt;) or research logs, once the container stops.&lt;/p&gt;

&lt;p&gt;To fix this, you need to mount the state directory from your host to the container. &lt;/p&gt;
&lt;h3&gt;
  
  
  How to mount the session state:
&lt;/h3&gt;

&lt;p&gt;Add a volume mount to your &lt;code&gt;docker run&lt;/code&gt; command for the following path:&lt;br&gt;
&lt;code&gt;/home/agent/.local/state/.copilot&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;An example of complete commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; &lt;span class="s1"&gt;'{{.Names}}'&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s2"&gt;"^copilot-container$"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
docker start &lt;span class="nt"&gt;-ai&lt;/span&gt; copilot-container &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
docker run &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt; copilot-container &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/workspace &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-v&lt;/span&gt; ./.copilot:/home/agent/.copilot &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$GITHUB_TOKEN&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    copilot-sandbox &lt;span class="se"&gt;\&lt;/span&gt;
    copilot &lt;span class="nt"&gt;--autopilot&lt;/span&gt; &lt;span class="nt"&gt;--yolo&lt;/span&gt; &lt;span class="nt"&gt;--model&lt;/span&gt; gpt-5.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why not use the official Docker Sandbox?&lt;/strong&gt;&lt;br&gt;
Even on Mac, the current implementation of Docker Sandboxes does not support volume mounts or port forwarding. By using a standard Docker container approach on Linux (or Mac), you actually gain more flexibility in managing your data.&lt;/p&gt;

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

&lt;p&gt;Setting up a sandbox for GitHub Copilot CLI on Linux requires a bit of manual tweaking—specifically handling line endings and choosing a local build over the automated sandbox commands. However, the ability to mount volumes and to use port forwarding currently makes this "manual" approach superior in some use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/henrybravo/docker-sandbox-run-copilot" rel="noopener noreferrer"&gt;docker-sandbox-run-copilot (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/docker/desktop-feedback/issues/73" rel="noopener noreferrer"&gt;Docker Sandbox Feedback - Issue #73 (Mounting directories)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally posted on &lt;a href="https://zenn.dev/lunran/scraps/5105de92cb9687" rel="noopener noreferrer"&gt;Zenn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>linux</category>
      <category>githubcopilot</category>
      <category>sandbox</category>
    </item>
    <item>
      <title>Fixed Multilingual CLIP demo</title>
      <dc:creator>Lunran</dc:creator>
      <pubDate>Sun, 23 Oct 2022 16:03:10 +0000</pubDate>
      <link>https://forem.com/lunran/fixed-multilingual-clip-demo-a7a</link>
      <guid>https://forem.com/lunran/fixed-multilingual-clip-demo-a7a</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fixed demo （Google Colaboratory）&lt;br&gt;
&lt;a href="https://drive.google.com/file/d/1q04sOt2rrrhlFzXOs0-WDYk-MRMj1qSJ/view?usp=sharing"&gt;https://drive.google.com/file/d/1q04sOt2rrrhlFzXOs0-WDYk-MRMj1qSJ/view?usp=sharing&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Original repo&lt;br&gt;
&lt;a href="https://github.com/FreddeFrallan/Multilingual-CLIP"&gt;https://github.com/FreddeFrallan/Multilingual-CLIP&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Changes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Changed text, vision encoder&lt;/li&gt;
&lt;li&gt;Used pytorch model&lt;/li&gt;
&lt;li&gt;Supported GPU (Converted tokenizer output)&lt;/li&gt;
&lt;/ul&gt;


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

</description>
      <category>clip</category>
      <category>multilingual</category>
      <category>pytorch</category>
      <category>colab</category>
    </item>
    <item>
      <title>Translator Voicebot in VRChat 2</title>
      <dc:creator>Lunran</dc:creator>
      <pubDate>Sat, 18 Jun 2022 03:00:02 +0000</pubDate>
      <link>https://forem.com/lunran/translator-voicebot-in-vrchat-2-4egc</link>
      <guid>https://forem.com/lunran/translator-voicebot-in-vrchat-2-4egc</guid>
      <description>&lt;h2&gt;
  
  
  What's this?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Voicebot that implemented speech-to-speech translation in VRChat

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/DVAsHKrHV0Q"&gt;https://youtu.be/DVAsHKrHV0Q&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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

&lt;h2&gt;
  
  
  System
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ASR, Translation: googletrans

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/googletrans/"&gt;https://pypi.org/project/googletrans/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;TTS: gtts&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/gTTS/"&gt;https://pypi.org/project/gTTS/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;Sound Pipeline&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;application -&amp;gt; speaker -&amp;gt; dialog.py -&amp;gt; mic -&amp;gt; application&lt;/li&gt;
&lt;li&gt;Direct loop also exists.. (application -&amp;gt; speaker -&amp;gt; mic -&amp;gt; application)&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;(TBD) Release the scripts in GitHub&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need to clean the codes and write documents..&lt;/li&gt;
&lt;/ul&gt;


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

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu 18.04.5 LTS&lt;/li&gt;
&lt;li&gt;Voice chat application (VRChat for example)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
$ sudo apt install portaudio19-dev pavucontrol python-xlib scrot&lt;br&gt;
$ git clone https://github.com/Lunran/sts.git&lt;br&gt;
$ cd sts&lt;br&gt;
$ python3 -m venv venv&lt;br&gt;
$ . venv/bin/activate&lt;br&gt;
$ pip install --upgrade pip&lt;br&gt;
$ pip install -r requirements.txt&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Run VRChat

&lt;ul&gt;
&lt;li&gt;Open "Settings", "Audio Volume"&lt;/li&gt;
&lt;li&gt;Mute "UI/Menu", "World" and "Avatars" &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Run the script

&lt;ul&gt;
&lt;li&gt;refer to "$ python dialog.py -h" for details&lt;/li&gt;
&lt;/ul&gt;


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

</description>
      <category>vr</category>
      <category>vrchat</category>
      <category>ai</category>
    </item>
    <item>
      <title>Conversational AI in VRChat 2</title>
      <dc:creator>Lunran</dc:creator>
      <pubDate>Sun, 08 May 2022 02:10:09 +0000</pubDate>
      <link>https://forem.com/lunran/conversational-ai-in-vrchat-2-29p4</link>
      <guid>https://forem.com/lunran/conversational-ai-in-vrchat-2-29p4</guid>
      <description>&lt;h2&gt;
  
  
  What's this?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction of a voicebot that implemented conversational AI in VRChat

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/j9L51pASeiQ"&gt;https://youtu.be/j9L51pASeiQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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

&lt;h2&gt;
  
  
  System
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ASR: googletrans

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/googletrans/"&gt;https://pypi.org/project/googletrans/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Text Generation: Rinna (1.3B-parameter Japanese GPT model)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/rinna/japanese-gpt-1b"&gt;https://huggingface.co/rinna/japanese-gpt-1b&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;TTS: tyc-talksoft&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://shirowanisan.com/tyc-talksoft"&gt;https://shirowanisan.com/tyc-talksoft&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;Sound Pipeline&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;application -&amp;gt; speaker -&amp;gt; dialog.py -&amp;gt; mic -&amp;gt; application&lt;/li&gt;
&lt;li&gt;Direct loop also exists.. (application -&amp;gt; speaker -&amp;gt; mic -&amp;gt; application)&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;(TBD) Release the scripts in GitHub&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need to clean the codes and write documents..&lt;/li&gt;
&lt;/ul&gt;


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

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu 18.04.5 LTS&lt;/li&gt;
&lt;li&gt;Voice chat application (VRChat for example)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
$ sudo apt install portaudio19-dev pavucontrol python-xlib scrot&lt;br&gt;
$ git clone https://github.com/Lunran/sts.git&lt;br&gt;
$ cd sts&lt;br&gt;
$ python3 -m venv venv&lt;br&gt;
$ . venv/bin/activate&lt;br&gt;
$ pip install --upgrade pip&lt;br&gt;
$ pip install -r requirements.txt&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Run VRChat

&lt;ul&gt;
&lt;li&gt;Open "Settings", "Audio Volume"&lt;/li&gt;
&lt;li&gt;Mute "UI/Menu", "World" and "Avatars" &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Run the script

&lt;ul&gt;
&lt;li&gt;refer to "$ python dialog.py -h" for details&lt;/li&gt;
&lt;/ul&gt;


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

</description>
      <category>ai</category>
      <category>vr</category>
      <category>vrchat</category>
    </item>
    <item>
      <title>Conversational AI in VRChat 1</title>
      <dc:creator>Lunran</dc:creator>
      <pubDate>Sun, 17 Apr 2022 09:44:34 +0000</pubDate>
      <link>https://forem.com/lunran/conversational-ai-in-vrchat-5gco</link>
      <guid>https://forem.com/lunran/conversational-ai-in-vrchat-5gco</guid>
      <description>&lt;h2&gt;
  
  
  What's this?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction of a voicebot that implemented conversational AI in VRChat

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/8u22YDqhY6Y"&gt;https://youtu.be/8u22YDqhY6Y&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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

&lt;h2&gt;
  
  
  System
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ASR: googletrans

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/googletrans/"&gt;https://pypi.org/project/googletrans/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Text Generation: ILYS-aoba-chatbot (seq2seq model pretrained with Japanese dialog data)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/cl-tohoku/ILYS-aoba-chatbot"&gt;https://github.com/cl-tohoku/ILYS-aoba-chatbot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;TTS: tyc-talksoft&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://shirowanisan.com/tyc-talksoft"&gt;https://shirowanisan.com/tyc-talksoft&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;Sound Pipeline&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;application -&amp;gt; speaker -&amp;gt; dialog.py -&amp;gt; mic -&amp;gt; application&lt;/li&gt;
&lt;li&gt;Direct loop also exists.. (application -&amp;gt; speaker -&amp;gt; mic -&amp;gt; application)&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;(TBD) Release the scripts in GitHub&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need to clean the codes and write documents..&lt;/li&gt;
&lt;/ul&gt;


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

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu 18.04.5 LTS&lt;/li&gt;
&lt;li&gt;Voice chat application (VRChat for example)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
$ sudo apt install portaudio19-dev pavucontrol python-xlib scrot&lt;br&gt;
$ git clone https://github.com/Lunran/sts.git&lt;br&gt;
$ cd sts&lt;br&gt;
$ python3 -m venv venv&lt;br&gt;
$ . venv/bin/activate&lt;br&gt;
$ pip install --upgrade pip&lt;br&gt;
$ pip install -r requirements.txt&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Run VRChat

&lt;ul&gt;
&lt;li&gt;Open "Settings", "Audio Volume"&lt;/li&gt;
&lt;li&gt;Mute "UI/Menu", "World" and "Avatars" &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Run the script

&lt;ul&gt;
&lt;li&gt;refer to "$ python dialog.py -h" for details&lt;/li&gt;
&lt;/ul&gt;


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

</description>
      <category>ai</category>
      <category>vr</category>
      <category>vrchat</category>
    </item>
    <item>
      <title>(Failed attemped) How to get Maixduino connected to AWS IoT</title>
      <dc:creator>Lunran</dc:creator>
      <pubDate>Tue, 22 Dec 2020 10:26:41 +0000</pubDate>
      <link>https://forem.com/lunran/failed-attemped-how-to-get-maixduino-connected-to-aws-iot-1ill</link>
      <guid>https://forem.com/lunran/failed-attemped-how-to-get-maixduino-connected-to-aws-iot-1ill</guid>
      <description>&lt;h1&gt;
  
  
  (Failed attemped) How to get Maixduino connected to AWS IoT
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AWS IoT Preparation
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create Resource

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html"&gt;https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Display MQTT message

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/view-mqtt-messages.html"&gt;https://docs.aws.amazon.com/iot/latest/developerguide/view-mqtt-messages.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Preparing Maixduino
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Smoke test

&lt;ul&gt;
&lt;li&gt;Carry out the setup procedure&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maixpy.sipeed.com/en/get_started/power_on.html"&gt;https://maixpy.sipeed.com/en/get_started/power_on.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Upgrade firmware

&lt;ul&gt;
&lt;li&gt;ussl support was merged into master in 2020/1

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sipeed/MaixPy/issues/105"&gt;https://github.com/sipeed/MaixPy/issues/105&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Build master and flash

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sipeed/MaixPy/blob/develop/build.md"&gt;https://github.com/sipeed/MaixPy/blob/develop/build.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;In the middle of the procedure, enable the ussl module with the following command

&lt;ul&gt;
&lt;li&gt;$ python3 project.py menuconfig&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Place a script to enable WiFi

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sipeed/MaixPy_scripts/blob/master/network/network_esp32.py"&gt;https://github.com/sipeed/MaixPy_scripts/blob/master/network/network_esp32.py&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Send MQTT message over SSL

&lt;ul&gt;
&lt;li&gt;ref. &lt;a href="https://qiita.com/sat0ken/items/ac18b0d14e58e0eae124"&gt;https://qiita.com/sat0ken/items/ac18b0d14e58e0eae124&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;(Caution) The signature of ussl.wrap_socket is different from the one of micropython official

&lt;ul&gt;
&lt;li&gt;Probably not compatible with root certificates (where is the source code?)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/micropython/micropython/issues/2781"&gt;https://github.com/micropython/micropython/issues/2781&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.micropython.org/en/latest/library/ussl.html"&gt;https://docs.micropython.org/en/latest/library/ussl.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;-&amp;gt; Run-time error

&lt;ul&gt;
&lt;li&gt;Is it possible without root certificate..?

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html"&gt;https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&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="nn"&gt;socket&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;ussl&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;ssl&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;network_esp32&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;wifi&lt;/span&gt;

&lt;span class="n"&gt;SSID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"(set yours)"&lt;/span&gt;
&lt;span class="n"&gt;PASW&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"(set yours)"&lt;/span&gt;

&lt;span class="n"&gt;KEY_PATH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'(set yours)'&lt;/span&gt;
&lt;span class="n"&gt;CERT_PATH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'(set yours)'&lt;/span&gt;
&lt;span class="n"&gt;END_POINT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'(set yours)'&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;enable_esp32&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;wifi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isconnected&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="c1"&gt;# Running within 3 seconds of power-up can cause an SD load error
&lt;/span&gt;                &lt;span class="c1"&gt;# wifi.reset(is_hard=False)
&lt;/span&gt;                &lt;span class="n"&gt;wifi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is_hard&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'try AT connect wifi...'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;wifi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SSID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PASW&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;wifi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isconnected&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
                    &lt;span class="k"&gt;break&lt;/span&gt;
            &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'network state:'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;wifi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isconnected&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;wifi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ifconfig&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;send&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;

    &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;ai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getaddrinfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;END_POINT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8883&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Address infos:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ai&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="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="k"&gt;with&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;KEY_PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'rb'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;with&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;CERT_PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'rb'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;cert&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ssl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wrap_socket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cert&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cert&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Connected to Server'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
    &lt;span class="n"&gt;json_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'state'&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="s"&gt;'reported'&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="s"&gt;'Temperature'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;}}}&lt;/span&gt;
    &lt;span class="n"&gt;send_data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s"&gt;"POST /things/ESP32/shadow HTTP/1.1&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s"&gt;"Host: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;END_POINT&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s"&gt;"Content-Length: %d&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;send_data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s"&gt;"Connection: close&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;send_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Send Data to Server'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;recv_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;recv_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'utf8'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&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;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;enable_esp32&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>maixduino</category>
      <category>aws</category>
      <category>iot</category>
      <category>ssl</category>
    </item>
  </channel>
</rss>
