<?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: Jain Wun</title>
    <description>The latest articles on DEV Community by Jain Wun (@wade3c).</description>
    <link>https://dev.to/wade3c</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%2F830024%2F91f0e333-438c-49f8-a28c-a915b03a1025.png</url>
      <title>DEV Community: Jain Wun</title>
      <link>https://dev.to/wade3c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wade3c"/>
    <language>en</language>
    <item>
      <title>RTX 30系顯卡 + TF 1.15</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Wed, 29 Jun 2022 11:22:23 +0000</pubDate>
      <link>https://dev.to/wade3c/rtx-30xi-xian-qia-tf-115-3elk</link>
      <guid>https://dev.to/wade3c/rtx-30xi-xian-qia-tf-115-3elk</guid>
      <description>&lt;p&gt;30系顯卡終於降價了，來回顧一下怎麼在30系甚至未來的40系的顯卡上繼續使用Tensorflow 1&lt;/p&gt;

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

</description>
    </item>
    <item>
      <title>Nvidia-Docker 安裝 (影片版)</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Tue, 21 Jun 2022 03:00:09 +0000</pubDate>
      <link>https://dev.to/wade3c/nvidia-docker-an-zhuang-ying-pian-ban--1jgl</link>
      <guid>https://dev.to/wade3c/nvidia-docker-an-zhuang-ying-pian-ban--1jgl</guid>
      <description>&lt;ul&gt;
&lt;li&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;WSL2的安裝可以看之前的文章，有一點要補充是必須得用win10 21H2/ 任一版win11&lt;br&gt;
然後windows docker desktop已經自帶nvidia docker不需要額外安裝&lt;br&gt;
nvidia driver的部分也已經內含WSL會需要的&lt;/p&gt;

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

</description>
    </item>
    <item>
      <title>Browser Sync - 在不同裝置的瀏覽器上同步網頁</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Fri, 17 Jun 2022 16:22:53 +0000</pubDate>
      <link>https://dev.to/wade3c/browser-sync-zai-bu-tong-zhuang-zhi-de-liu-lan-qi-shang-tong-bu-wang-ye-1dej</link>
      <guid>https://dev.to/wade3c/browser-sync-zai-bu-tong-zhuang-zhi-de-liu-lan-qi-shang-tong-bu-wang-ye-1dej</guid>
      <description>&lt;ul&gt;
&lt;li&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;它的設計初衷是可以幫助開發者查看網頁在不同裝置上的使用情況&lt;/p&gt;

&lt;p&gt;這裡我們可以把它用來同步顯示html的內容，像是投影片或教學文章等等&lt;/p&gt;

&lt;p&gt;由於他支援scroll的同步，理論上連PDF等文字檔案類型也能同步&lt;/p&gt;

&lt;p&gt;除了CLI指另外他也能搭配grunt/ gulp做使用&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install browser-sync
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  CLI
&lt;/h2&gt;

&lt;p&gt;只要一行就可以serve目前目錄下的所有html&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;npx browser-sync start --server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;執行後會給你目前運作的URL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Browsersync] Access URLs:
 --------------------------------------
       Local: http://localhost:3000
    External: http://192.168.108.1:3000
 --------------------------------------
          UI: http://localhost:3001
 UI External: http://localhost:3001
 --------------------------------------
[Browsersync] Serving files from: ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;當然port想要的話可以自訂，更多的參數設定可以參考&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://browsersync.io/docs/command-line"&gt;https://browsersync.io/docs/command-line&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  UI
&lt;/h3&gt;

&lt;p&gt;會提供目前所有的sync狀況還有相關設定，甚至可以一次控制全部裝置&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kcKlf9oA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/FF93D0A5-FADA-420A-BBB3-A425DEADC175/7f81adb0-d865-4661-b99e-55c498e92d15" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kcKlf9oA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/FF93D0A5-FADA-420A-BBB3-A425DEADC175/7f81adb0-d865-4661-b99e-55c498e92d15" alt="image.png" width="880" height="754"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://browsersync.io/"&gt;Browsersync - Time-saving synchronised browser testing&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Youtrube-dl的替代方案 - yt-dlp</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Sat, 11 Jun 2022 09:50:23 +0000</pubDate>
      <link>https://dev.to/wade3c/youtrube-dlde-ti-dai-fang-an-yt-dlp-4bli</link>
      <guid>https://dev.to/wade3c/youtrube-dlde-ti-dai-fang-an-yt-dlp-4bli</guid>
      <description>&lt;ul&gt;
&lt;li&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;僅作為示範用，請不要用不法營利上&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;在一開始yt-dl被下架時出現的fork方案，現在部分功能比yt-dl還完善&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;compile好的執行檔可以直接去Github release載&lt;/p&gt;

&lt;h4&gt;
  
  
  PhantomJS
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://phantomjs.org/download.html"&gt;Download PhantomJS&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;為了讓yt-dlp能用到PhantomJS，有兩種設定可以選&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;在system path內做設定 (把phantomjs的bin資料夾加到path內)&lt;/li&gt;
&lt;li&gt;把PhantomJS的執行檔移到和yt-dlp的執行檔同一層&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Linux
&lt;/h3&gt;

&lt;p&gt;Linux比較建議裝python版的&lt;/p&gt;

&lt;h4&gt;
  
  
  Python
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m pip install -U yt-dlp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.\yt-dlp.exe [OPTIONS] URL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linux
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yt-dlp [OPTIONS] URL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Options
&lt;/h3&gt;

&lt;p&gt;上面提的Options有以下比較常用到的&lt;/p&gt;

&lt;h3&gt;
  
  
  Login
&lt;/h3&gt;

&lt;p&gt;有些網頁要登入太麻煩可以直接用瀏覽器現成的cookie&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;gt; &lt;strong&gt;Cookies from browser&lt;/strong&gt;: Cookies can be automatically extracted from all major web browsers using &lt;code&gt;--cookies-from-browser BROWSER[+KEYRING][:PROFILE]&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Know Issue
&lt;/h2&gt;

&lt;h3&gt;
  
  
  iq.com
&lt;/h3&gt;

&lt;p&gt;如果影片是被限定前幾周只有會員能看的話，會完全解析不了該網頁&lt;/p&gt;

&lt;p&gt;但只要超過了VIP限制的時間範圍該影片就會正常&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;目前Github上有開相關issue，貌似是iq.com自身的問題&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/yt-dlp/yt-dlp"&gt;GitHub - yt-dlp/yt-dlp: A youtube-dl fork with additional features and fixes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/youtubedl/comments/ou1mtk/ytdlp_how_i_use_cookies_from_browser/"&gt;[yt-dlp] how I use cookies from browser&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Eclipse Theia - 方便客製化的IDE</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Sat, 04 Jun 2022 08:02:46 +0000</pubDate>
      <link>https://dev.to/wade3c/eclipse-theia-fang-bian-ke-zhi-hua-de-ide-45</link>
      <guid>https://dev.to/wade3c/eclipse-theia-fang-bian-ke-zhi-hua-de-ide-45</guid>
      <description>&lt;p&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;&lt;br&gt;
Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;專門為了網頁瀏覽器而生的開源IDE，跟VScode的作法剛好相反過來&lt;/p&gt;

&lt;p&gt;像是著名的Gitpod平台使用的就是Eclipse Theia (Gitpod後期有超多IDE可選)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nx-_dOBU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/90EB6273-B5A0-48C4-AAEE-E485B94D2A92/69f2cb82-5ab9-49cd-9255-e4f98d0314e1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nx-_dOBU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/90EB6273-B5A0-48C4-AAEE-E485B94D2A92/69f2cb82-5ab9-49cd-9255-e4f98d0314e1" alt="image.png" width="880" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;整體介面會和VScode十分的雷同&lt;/p&gt;
&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;一開始推出主要focus在網頁瀏覽器上使用，後來也有推出用electron包的desktop版&lt;/p&gt;
&lt;h3&gt;
  
  
  Docker
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;由於官方比較建議使用Blueprint來包成desktop app&lt;/p&gt;

&lt;p&gt;目前dockerhub上的官方image已經被下架，需要自己build或是找第三方&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/theia-ide/theia-apps#theia-docker"&gt;https://github.com/theia-ide/theia-apps#theia-docker&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;他比code-server的image好，有為了一些語言先打包好對應環境的docker image&lt;/p&gt;
&lt;h4&gt;
  
  
  Editor Only (Web Dev)
&lt;/h4&gt;

&lt;p&gt;預設使用的port是3000&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&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;&lt;span class="s2"&gt;:/home/project:cached"&lt;/span&gt; elswork/theia
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Gitpod
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;對於Gitpod想要有更多了解的話可以參考 &lt;a href="https://dev.tocraftdocs://open?blockId=4d7349dc-303a-49b9-9420-74e050e132d8&amp;amp;spaceId=71bea674-0503-893e-0a7a-91e236797ff9"&gt;Gitpod&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;相較於docker image並沒有維護了，for Gitpod的Dockefile倒是還有在維護&lt;/p&gt;

&lt;p&gt;可以在自己架的Gitpod平台或是官方架好的去測試&lt;/p&gt;

&lt;h4&gt;
  
  
  Gitpod.io
&lt;/h4&gt;

&lt;p&gt;如果用的是Gitpod官方架的平台&lt;/p&gt;

&lt;p&gt;直接點 &lt;a href="https://gitpod.io/#https://github.com/eclipse-theia/theia"&gt;https://gitpod.io/#https://github.com/eclipse-theia/theia&lt;/a&gt; 就可以開始體驗了&lt;/p&gt;

&lt;p&gt;由於他這時是開發模式所以還需要下指令去啟動IDE (以前打開就會是theia介面，現在是VScode)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn browser start ../.. &lt;span class="nt"&gt;--hostname&lt;/span&gt; 0.0.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Build Your Own
&lt;/h2&gt;

&lt;p&gt;透過修改Dockerfile可以建立適合自己的開發環境，撰寫js的話則可以達成客製化的IDE&lt;/p&gt;

&lt;h3&gt;
  
  
  Eclipse Theia Blueprint
&lt;/h3&gt;

&lt;p&gt;讓你可以實作自己會用到的桌面app，這也是Eclipse Theia包成desktop app的方法&lt;/p&gt;

&lt;p&gt;使用的環境並不限定一定要在實體機器上，依舊可以在docker內進行開發&lt;/p&gt;

&lt;p&gt;未來會逐漸取代過往使用的electron&lt;/p&gt;




&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://theia-ide.org/"&gt;Theia - Cloud and Desktop IDE Platform&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/eclipse-theia/theia/blob/master/doc/Developing.md#prerequisites"&gt;theia/Developing.md at master · eclipse-theia/theia&lt;/a&gt;&lt;/p&gt;

</description>
      <category>theia</category>
    </item>
    <item>
      <title>Nvtop - 在Linux即時監控GPU使用率</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Thu, 26 May 2022 14:00:04 +0000</pubDate>
      <link>https://dev.to/wade3c/nvtop-zai-linuxji-shi-jian-kong-gpushi-yong-lu-437g</link>
      <guid>https://dev.to/wade3c/nvtop-zai-linuxji-shi-jian-kong-gpushi-yong-lu-437g</guid>
      <description>&lt;ul&gt;
&lt;li&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c" rel="noopener noreferrer"&gt;https://www.patreon.com/wade3c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87" rel="noopener noreferrer"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.craft.do%2Fuser%2Ffull%2F71bea674-0503-893e-0a7a-91e236797ff9%2Fdoc%2Fee02961e-810c-4b77-b9b3-a16e39d5b8aa%2F270d17ad-0f7a-41fa-9116-15c3d83c0143" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.craft.do%2Fuser%2Ffull%2F71bea674-0503-893e-0a7a-91e236797ff9%2Fdoc%2Fee02961e-810c-4b77-b9b3-a16e39d5b8aa%2F270d17ad-0f7a-41fa-9116-15c3d83c0143" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;同時支援Nvidia以及AMD的GPU&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Apt
&lt;/h3&gt;

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

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nvtop


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Dockerfile
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

FROM nvidia/cuda

RUN apt-get update &amp;amp;&amp;amp; \
    apt-get install -y cmake libncurses5-dev libncursesw5-dev git &amp;amp;&amp;amp; \
    rm -rf /var/lib/apt/lists/*

RUN ln -s /usr/local/cuda-10.1/targets/x86_64-linux/lib/stubs/libnvidia-ml.so /usr/local/lib/libnvidia-ml.so &amp;amp;&amp;amp; \
    ln -s /usr/local/cuda-10.1/targets/x86_64-linux/lib/stubs/libnvidia-ml.so /usr/local/lib/libnvidia-ml.so.1 &amp;amp;&amp;amp; \
    cd /tmp &amp;amp;&amp;amp; \
    git clone https://github.com/Syllo/nvtop.git &amp;amp;&amp;amp; \
    mkdir -p nvtop/build &amp;amp;&amp;amp; cd nvtop/build &amp;amp;&amp;amp; \
    cmake .. &amp;amp;&amp;amp; \
    make &amp;amp;&amp;amp; \
    make install &amp;amp;&amp;amp; \
    cd / &amp;amp;&amp;amp; \
    rm -r /tmp/nvtop &amp;amp;&amp;amp; \
    rm /usr/local/lib/libnvidia-ml.so &amp;amp;&amp;amp; \
    rm /usr/local/lib/libnvidia-ml.so.1

ENTRYPOINT ["/usr/local/bin/nvtop"]


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

&lt;/div&gt;

&lt;p&gt;這裡cuda用的是10.2可能得視自身情況修改 (ex: RTX30不支援)&lt;/p&gt;

&lt;p&gt;或是可以參考nvtop repo內的Dockerfile&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;### Unable to Locate Package&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Update Source List
&lt;/h4&gt;

&lt;p&gt;有可能是清單內沒有可以下載的網址，比較常發生在debian，可以去source list設定non-free&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;sudo &lt;/span&gt;vim /etc/apt/sources.list


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

&lt;/div&gt;

&lt;p&gt;在每行的結尾加上空格與non-free (這個做法不適用於Ubuntu)&lt;/p&gt;

&lt;h4&gt;
  
  
  Manual Compile
&lt;/h4&gt;

&lt;p&gt;有些OS並沒有提供已經編譯好的套件供安裝，這裡就得自己compile了&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;撰寫文章時只支援Ubuntu 20.04/ 20.10，而18.04已經裝不了&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&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;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;cmake libncurses5-dev libncursesw5-dev git


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

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

git clone https://github.com/Syllo/nvtop.git
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; nvtop/build &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;nvtop/build
cmake .. &lt;span class="nt"&gt;-DNVIDIA_SUPPORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ON &lt;span class="nt"&gt;-DAMDGPU_SUPPORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ON
make

&lt;span class="c"&gt;# Install globally on the system&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;make &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Alternatively, install without privileges at a location of your choosing&lt;/span&gt;
&lt;span class="c"&gt;# make DESTDIR="/your/install/path" install&lt;/span&gt;


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

&lt;/div&gt;




&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Syllo/nvtop" rel="noopener noreferrer"&gt;GitHub - Syllo/nvtop: AMD and NVIDIA GPUs htop like monitoring tool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Syllo/nvtop/issues/42" rel="noopener noreferrer"&gt;Wrap NVTOP in docker (Impossible to initialize nvidia nvml) · Issue #42 · Syllo/nvtop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Syllo/nvtop/issues/46" rel="noopener noreferrer"&gt;nvtop not found in Debian Buster repositories · Issue #46 · Syllo/nvtop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nvt</category>
    </item>
    <item>
      <title>Nvidia Docker安裝說明(含WSL2)</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Thu, 19 May 2022 15:33:52 +0000</pubDate>
      <link>https://dev.to/wade3c/nvidia-dockeran-zhuang-shuo-ming-han-wsl2-1fnk</link>
      <guid>https://dev.to/wade3c/nvidia-dockeran-zhuang-shuo-ming-han-wsl2-1fnk</guid>
      <description>&lt;ul&gt;
&lt;li&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Linux下如果還沒裝過docker的話可以參考&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://docs.docker.com/engine/install/ubuntu/"&gt;https://docs.docker.com/engine/install/ubuntu/&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://get.docker.com -o get-docker.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  WSL2
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dJ6JgLB2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/2f657a57-eac6-4ee3-8387-736d50fd789b/e96079d8-e0e5-4765-958f-e6bde0bd2a90" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dJ6JgLB2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/2f657a57-eac6-4ee3-8387-736d50fd789b/e96079d8-e0e5-4765-958f-e6bde0bd2a90" alt="image.png" width="768" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;gt; WSL2在多次更新後也適用和Linux一樣的安裝方式了&lt;/li&gt;
&lt;li&gt;&amp;gt; 21H2後也不用去安裝特殊版的Nvidia driver了&lt;/li&gt;
&lt;li&gt;&amp;gt; docker desktop在3.1版後內建支援WSL2上的nvidia-docker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WSL內的Docker也可以用Linux的裝法，但有時候可能會遇到小問題&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux
&lt;/h2&gt;

&lt;p&gt;要先把nvidia的package server給加進apt的source list&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="nv"&gt;distribution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; /etc/os-release&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$ID$VERSION_ID&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://nvidia.github.io/libnvidia-container/gpgkey | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; https://nvidia.github.io/libnvidia-container/&lt;span class="nv"&gt;$distribution&lt;/span&gt;/libnvidia-container.list | &lt;span class="se"&gt;\&lt;/span&gt;
            &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g'&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
            &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/nvidia-container-toolkit.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;然後就可以直接去裝nvidia-docker套件了&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;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nvidia-docker2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;裝好後記得要去把舊有的docker服務給關掉&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;sudo &lt;/span&gt;service docker restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;用Ubuntu裝的話就不用去設定&lt;code&gt;/etc/docker/daemon.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"default-runtime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"nvidia"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"runtimes"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"nvidia"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"nvidia-container-runtime"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"runtimeArgs"&lt;/span&gt;&lt;span class="p"&gt;:[]}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Test
&lt;/h2&gt;

&lt;p&gt;有多種image可以進行測試，挑一個自己喜歡的就行&lt;/p&gt;

&lt;p&gt;最簡單的就是去看nvidia-smi能不能順利運作&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;sudo &lt;/span&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--gpus&lt;/span&gt; all nvidia/cuda:11.0-base nvidia-smi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker"&gt;Installation Guide — NVIDIA Cloud Native Technologies  documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.docker.com/blog/wsl-2-gpu-support-for-docker-desktop-on-nvidia-gpus/"&gt;WSL 2 GPU Support for Docker Desktop on NVIDIA GPUs - Docker&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>wsl2</category>
    </item>
    <item>
      <title>在GCP VM上開發Python</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Mon, 09 May 2022 14:13:10 +0000</pubDate>
      <link>https://dev.to/wade3c/zai-gcp-vmshang-kai-fa-python-5aie</link>
      <guid>https://dev.to/wade3c/zai-gcp-vmshang-kai-fa-python-5aie</guid>
      <description>&lt;ul&gt;
&lt;li&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  在GCP VM上開發Python
&lt;/h1&gt;

&lt;p&gt;GCP預設是不會像oracle cloud/ azure幫你產生好private key&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;GCP Debian/ Ubuntu VM內預設都沒裝iptables，所以就不像oracle cloud的要特別去設定&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Generate SSH Key Pair
&lt;/h2&gt;

&lt;p&gt;可以自行幫私鑰取名 (建議用WSL2建，powershell/ cmd可能會有路徑問題)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-f&lt;/span&gt; ~/.ssh/[KEY_FILENAME]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Passphrase可以避免私鑰被拿走就能登入，但是每次登入就要打密碼&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;先複製一下對應公鑰 (複製到等號前、含等號)&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;cat&lt;/span&gt; ~/.ssh/[key_filename].pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;先暫時保留以下的結果&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh-rsa [KEY VALUE] [USER_NAME]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  GCP VM Setting
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;不一定要用預設給的username，可以自己創過&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;到現有VM的設定內去找SSH Key&lt;/p&gt;

&lt;p&gt;然後透過add item來放剛剛暫存的key-value pair&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4uKfcOll--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/2072a066-a81b-4b02-886e-c80c02237ae7/3ee460d7-172f-4458-b6a0-a1c59dfb408b" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4uKfcOll--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/2072a066-a81b-4b02-886e-c80c02237ae7/3ee460d7-172f-4458-b6a0-a1c59dfb408b" alt="image.png" width="551" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;打username就好，不需要加上email&lt;/p&gt;

&lt;h2&gt;
  
  
  Terminal
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; &amp;lt;key_name&amp;gt; &amp;lt;username&amp;gt;@&amp;lt;gcp_ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;如果用WSL2創的，實際key會在&lt;code&gt;\\wsl$\Ubuntu-18.04\root\.ssh&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Pycharm
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Interpreter
&lt;/h3&gt;

&lt;p&gt;Pycharm是我個人最常用的IDE，這裡示範直接在Pycharm中透過SSH使用GCP VM&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;在Pycharm就是去設定SSH Interpreter (可以順便設定Remote Host方便傳檔案)&lt;/p&gt;

&lt;p&gt;Default interpreter (conda-forge)會在&lt;code&gt;/opt/conda/bin/python&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fsBsR6y2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/2072a066-a81b-4b02-886e-c80c02237ae7/fa25edbb-0886-46fd-994e-8aa1105a381e" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fsBsR6y2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/2072a066-a81b-4b02-886e-c80c02237ae7/fa25edbb-0886-46fd-994e-8aa1105a381e" alt="image.png" width="880" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;如果想用VScode連進去，也是相同的道理&lt;/p&gt;

&lt;h3&gt;
  
  
  Files
&lt;/h3&gt;

&lt;p&gt;要在遠端server上跑code當然必須要上傳data以及code&lt;/p&gt;

&lt;p&gt;在剛剛設定interpreter時有設定對應server路徑，上傳到那個位置即可&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q-k7ohvc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/2072a066-a81b-4b02-886e-c80c02237ae7/694d39eb-83b6-46f5-9109-f5fb82fc8b8e" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q-k7ohvc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/2072a066-a81b-4b02-886e-c80c02237ae7/694d39eb-83b6-46f5-9109-f5fb82fc8b8e" alt="image.png" width="530" height="227"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=8QGpHQ2SyG8"&gt;Google Cloud Platform (GCP) - How To SSH into your VM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.doit-intl.com/remote-development-with-pycharm-and-google-cloud/"&gt;Remote Coding with PyCharm and Google Cloud - DoiT International&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nirbenz.github.io/pycharm/"&gt;Using GCP With PyCharm&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gcp</category>
      <category>vm</category>
      <category>pycharm</category>
    </item>
    <item>
      <title>[K8s學習筆記] 透過depolyment操控pod</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Mon, 02 May 2022 12:05:02 +0000</pubDate>
      <link>https://dev.to/wade3c/k8sxue-xi-bi-ji-tou-guo-depolymentcao-kong-pod-3b8j</link>
      <guid>https://dev.to/wade3c/k8sxue-xi-bi-ji-tou-guo-depolymentcao-kong-pod-3b8j</guid>
      <description>&lt;ul&gt;
&lt;li&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create a Simple Deployment
&lt;/h3&gt;

&lt;p&gt;最簡單的deployment就是啟動某個image，然後不帶其他設定&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl create deployment &amp;lt;name-of-depl&amp;gt; &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;image-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;可以透過 &lt;code&gt;kubectl get deployment&lt;/code&gt; 檢查deploy的狀態&lt;/p&gt;

&lt;p&gt;等到狀態變成ready後就可以用 &lt;code&gt;kubectl get pod&lt;/code&gt; 看到所有running的pod&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;pod name是由replicaset id + pod id組成&lt;/p&gt;

&lt;p&gt;通常也不會去動replicaset，他會在deployment時由K8s自動設定&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Pod info
&lt;/h4&gt;

&lt;p&gt;要看pod的更詳細訊息可以用&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl describe pod &amp;lt;pod_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;會分別列出到pod成功running前的各步驟花了多久時間&lt;/p&gt;

&lt;h4&gt;
  
  
  Debug a Pod
&lt;/h4&gt;

&lt;p&gt;如果deploy失敗或是要查看log，可以使用&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl logs &amp;lt;pod-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;要連進某個pod的terminal可以透過&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;pod_name&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt; bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;用法和在docker要連進contianer的terminal非常類似&lt;/p&gt;

&lt;h3&gt;
  
  
  Edit the Deployment
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl edit deployment &amp;lt;name-of-depl&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;當你修改並儲存deployment的設定後，pod就會自動重建 (舊的被刪掉，直接創新的)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;但是舊的replicaset並不會被刪掉，只會把剛剛那個Pod從中移除&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Delete the Deployment
&lt;/h3&gt;

&lt;p&gt;要連帶pod + replicaset 一併刪除的話&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl delete deployment &amp;lt;depl-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;可以透過&lt;code&gt;kubectl get replicaset&lt;/code&gt;去確認&lt;/p&gt;

&lt;h3&gt;
  
  
  Create Deployment with YAML File
&lt;/h3&gt;

&lt;p&gt;比較常見的做法還是先寫好YAML檔再去deploy&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; &amp;lt;filename&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;deployment這種型態會根據kind還有apiVersion來決定&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;如果以這種方式deploy的，往後只要修改檔案，pod就會自動重建了&lt;/p&gt;




&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=azuwXALfyRg"&gt;Kubectl Basic Commands - Create and Debug Pod in a Minikube cluster | Kubernetes Tutorial 18&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>k8s</category>
      <category>deployment</category>
    </item>
    <item>
      <title>瀏覽器連到VNC Server</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Mon, 25 Apr 2022 13:05:40 +0000</pubDate>
      <link>https://dev.to/wade3c/liu-lan-qi-lian-dao-vnc-server-57mp</link>
      <guid>https://dev.to/wade3c/liu-lan-qi-lian-dao-vnc-server-57mp</guid>
      <description>&lt;ul&gt;
&lt;li&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;noVNC實際上也是透過Websockify連線到VNC sever&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sKLuFWR7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/d1e81824-3b57-4b65-93c2-94b60a3c2efa/9afd3f12-7c80-4b75-bec0-872f234af563" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sKLuFWR7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/d1e81824-3b57-4b65-93c2-94b60a3c2efa/9afd3f12-7c80-4b75-bec0-872f234af563" alt="image.png" width="880" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以前他們兩個是一起包在同一個GitHub repo下，後來分開維護了&lt;/p&gt;

&lt;p&gt;但是安裝noVNC時還是會自動去裝Websockify&lt;/p&gt;

&lt;h2&gt;
  
  
  Insatll
&lt;/h2&gt;

&lt;p&gt;如果要自行手動安裝的話&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;websockify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;以前websockify和noVNC還沒分家時的用法&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;websockify &lt;span class="nt"&gt;-D&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--web&lt;/span&gt; /usr/share/novnc/ &lt;span class="se"&gt;\&lt;/span&gt;
    6080 &lt;span class="se"&gt;\&lt;/span&gt;
    localhost:5900
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;現在新版的noVNC會自己去call websockify&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;novnc &lt;span class="nt"&gt;--listen&lt;/span&gt; 6080 &lt;span class="nt"&gt;--vnc&lt;/span&gt; localhost:5901
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Nginx Proxy
&lt;/h2&gt;

&lt;p&gt;加上reverse proxy可以讓我們直接call網址/ ip，而不用去指定6080 port&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nginx.conf&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user www-data;
daemon off;

events {
}

http {
  server {
    listen 80 default_server;

    location / {
      root /www/data;
      try_files $uri $uri/ /index.html;
    }

    location /novnc/ {
      proxy_pass http://127.0.0.1:6080/;
    }

    location /novnc/websockify {
      proxy_pass http://127.0.0.1:6080/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
      proxy_set_header Host $host;
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://datawookie.dev/blog/2021/08/websockify-novnc-behind-an-nginx-proxy/"&gt;Websockify &amp;amp; noVNC behind an NGINX Proxy&lt;/a&gt;&lt;/p&gt;

</description>
      <category>websocketif</category>
      <category>novnc</category>
    </item>
    <item>
      <title>把md檔變成Medium文章</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Mon, 18 Apr 2022 12:39:10 +0000</pubDate>
      <link>https://dev.to/wade3c/ba-mddang-bian-cheng-mediumwen-zhang-2k5b</link>
      <guid>https://dev.to/wade3c/ba-mddang-bian-cheng-mediumwen-zhang-2k5b</guid>
      <description>&lt;ul&gt;
&lt;li&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;會員文章列表 &lt;a href="https://coda.io/d/YT-channel_dLrb0LRX0xj/Patreon_supr9#_lu-tL"&gt;https://coda.io/d/YT-channel_dLrb0LRX0xj/Patreon_supr9#_lu-tL&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;公開文章列表 &lt;a href="https://coda.io/d/YT-channel_dLrb0LRX0xj/Patreon_sucfV#_luJfw"&gt;https://coda.io/d/YT-channel_dLrb0LRX0xj/Patreon_sucfV#_luJfw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;粉專 &lt;a href="https://www.facebook.com/wade3c/"&gt;https://www.facebook.com/wade3c/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub &lt;a href="https://github.com/johnny12150"&gt;https://github.com/johnny12150&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Digital Ocean推薦連結 &lt;a href="https://m.do.co/c/1edcf7d6c08e"&gt;https://m.do.co/c/1edcf7d6c08e&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Linode推薦碼 &lt;a href="https://linode.gvw92c.net/a19zeW"&gt;https://linode.gvw92c.net/a19zeW&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;由於Medium不支援直接用markdown輸入文章實在很頭痛&lt;/p&gt;

&lt;p&gt;Google了一番發現目前網路上的自動轉工具幾乎都需要登入你的GitHub帳號，因為他會幫你把code-block自動轉成gist&lt;/p&gt;

&lt;p&gt;但是這個作法除了不是很安全外，他還會把你的gist變的亂七八糟，每一個code-block都會獨立新增一個gist&lt;/p&gt;

&lt;p&gt;這是我目前在GitHub上找到唯一一個不會自動轉成gist的專案，在多數情況下使用起來還算方便&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/fanderzon/markdown-to-medium-tool"&gt;https://github.com/fanderzon/markdown-to-medium-tool&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;但是他在處理heading還有code-block有時候會跑版 (Medium在這兩部份都有改版過)&lt;/p&gt;

&lt;p&gt;這導致我每次都到Medium後都還要手動調整，所以就想來自己找一套更方便的workflow&lt;/p&gt;

&lt;p&gt;這時突然想到很久以前有看過一個叫&lt;code&gt;medium-editor-markdown的&lt;/code&gt;專案&lt;/p&gt;

&lt;p&gt;他支援了把Medium的文章轉成md的功能，但是不能反過來使用&lt;/p&gt;

&lt;p&gt;突發奇想如果我們要借助這個套件把md轉成Medium格式&lt;/p&gt;

&lt;p&gt;或許可以先把md先轉成html，再把html給塞進這個專案&lt;/p&gt;

&lt;p&gt;&lt;code&gt;medium-editor-markdown&lt;/code&gt;這個專案使用到的是turndown.js與medium-editor這兩個套件&lt;/p&gt;

&lt;p&gt;前者負責把md轉成html，後者負責顯示html成Medium Style&lt;/p&gt;

&lt;p&gt;實際的改造作法就會如下：&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1. MD -&amp;gt; HTML
&lt;/h2&gt;

&lt;p&gt;這裡可以用之前分享過的marked.js專案或是上面提到的turndown.js，都能輕鬆且快速的把md轉成html&lt;/p&gt;

&lt;p&gt;如果不想安裝套件去轉，可以直接使用marked.js的demo網頁版來轉&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://marked.js.org/demo/"&gt;https://marked.js.org/demo/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NezXsYKv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/11b8c26d-6322-4827-a886-c275ef54d46d/354367c3-a3ae-4219-9fcf-52dcc449f488" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NezXsYKv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/11b8c26d-6322-4827-a886-c275ef54d46d/354367c3-a3ae-4219-9fcf-52dcc449f488" alt="image.png" width="880" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;如果你用的是macOS，還有&lt;code&gt;marked 2&lt;/code&gt;這個App可以協助你快速取得Html&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0p1Cn5dH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/11b8c26d-6322-4827-a886-c275ef54d46d/3D1D4D53-0D86-4FE0-BEE4-F7EA882B27C5_2/lx6Vi33FpTOMx0YtyGsp8QxDKXzpckVFBDEWzajmzeMz/Image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0p1Cn5dH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/11b8c26d-6322-4827-a886-c275ef54d46d/3D1D4D53-0D86-4FE0-BEE4-F7EA882B27C5_2/lx6Vi33FpTOMx0YtyGsp8QxDKXzpckVFBDEWzajmzeMz/Image.png" alt="Image.png" width="880" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2.HTML -&amp;gt; Medium
&lt;/h2&gt;

&lt;p&gt;再來只要把剛剛拿到的HTML給貼到這個專案中的&lt;code&gt;index.html&lt;/code&gt; 內的&lt;code&gt;editor class&lt;/code&gt;下的&lt;code&gt;left class&lt;/code&gt;裡面就好 (要覆蓋掉原本的內容)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8-CBQhHK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/11b8c26d-6322-4827-a886-c275ef54d46d/652c4128-e4fd-4536-a3dd-fa6f54277ff3" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8-CBQhHK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/11b8c26d-6322-4827-a886-c275ef54d46d/652c4128-e4fd-4536-a3dd-fa6f54277ff3" alt="image.png" width="880" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;開啟這個專案的網頁之後，畫面左側就會顯示Medium形式的內容&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DMxZuI5l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/11b8c26d-6322-4827-a886-c275ef54d46d/94c821e0-3842-499d-aaf3-a3541561c7ff" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DMxZuI5l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.craft.do/user/full/71bea674-0503-893e-0a7a-91e236797ff9/doc/11b8c26d-6322-4827-a886-c275ef54d46d/94c821e0-3842-499d-aaf3-a3541561c7ff" alt="image.png" width="880" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;有些不支援的寫法就會像上圖一樣跑版&lt;/p&gt;

&lt;p&gt;把左側的Medium Style內容複製起來直接貼去Medium就能發文了&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;轉出的code-block內不會有syntax highlight是正常的，因為Medium本身就不支援&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;底下就是實際貼到Medium上的成果&lt;/p&gt;

&lt;h2&gt;
  
  
  All-in-one Site
&lt;/h2&gt;

&lt;p&gt;最後為了方便日後在ithelp和Medium都能發表一致的文章，我有把它包成一個完整的服務&lt;/p&gt;

&lt;p&gt;這個服務是Patreon會員限定的，有興趣可以到我的patreon查看&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/IonicaBizau/medium-editor-markdown"&gt;GitHub - IonicaBizau/medium-editor-markdown: A Medium Editor extension to add markdown support.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>md</category>
      <category>medium</category>
    </item>
    <item>
      <title>[Linux] 讓程式在背景執行</title>
      <dc:creator>Jain Wun</dc:creator>
      <pubDate>Mon, 11 Apr 2022 13:01:38 +0000</pubDate>
      <link>https://dev.to/wade3c/linux-rang-cheng-shi-zai-bei-jing-zhi-xing-c9o</link>
      <guid>https://dev.to/wade3c/linux-rang-cheng-shi-zai-bei-jing-zhi-xing-c9o</guid>
      <description>&lt;ul&gt;
&lt;li&gt;訂閱patreon即可看到更多文章 &lt;a href="https://www.patreon.com/wade3c"&gt;https://www.patreon.com/wade3c&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;會員文章列表 &lt;a href="https://coda.io/d/YT-channel_dLrb0LRX0xj/Patreon_supr9#_lu-tL"&gt;https://coda.io/d/YT-channel_dLrb0LRX0xj/Patreon_supr9#_lu-tL&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;公開文章列表 &lt;a href="https://coda.io/d/YT-channel_dLrb0LRX0xj/Patreon_sucfV#_luJfw"&gt;https://coda.io/d/YT-channel_dLrb0LRX0xj/Patreon_sucfV#_luJfw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube頻道 &lt;a href="https://www.youtube.com/c/%E5%A2%9E%E5%BB%A3%E5%BB%BA%E6%96%87"&gt;https://www.youtube.com/c/增廣建文&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;粉專 &lt;a href="https://www.facebook.com/wade3c/"&gt;https://www.facebook.com/wade3c/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Digital Ocean推薦連結 &lt;a href="https://m.do.co/c/1edcf7d6c08e"&gt;https://m.do.co/c/1edcf7d6c08e&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  讓command在背景跑
&lt;/h3&gt;

&lt;p&gt;在要跑的指令結尾加上 &amp;amp;&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;指令和 &amp;amp; 中間通常會空一格&lt;/p&gt;

&lt;h4&gt;
  
  
  同時又不會output
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/path/to/your/script.sh &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1 代表螢幕輸出，2 代表錯誤輸出&lt;/p&gt;

&lt;h3&gt;
  
  
  檢視背景執行的process
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Kill掉特定背景程式
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;kill&lt;/span&gt; %1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;最後面的數字是取決於jobs給的number (會從1開始)&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="o"&gt;[&lt;/span&gt;1]-  Running                 &lt;span class="nb"&gt;sleep &lt;/span&gt;100 &amp;amp;
&lt;span class="o"&gt;[&lt;/span&gt;2]+  Running                 &lt;span class="nb"&gt;sleep &lt;/span&gt;200 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  讓ssh連線detach後程序能繼續跑
&lt;/h3&gt;

&lt;p&gt;接在已經背景執行的程序後&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;disown&lt;/span&gt;  &lt;span class="nt"&gt;-h&lt;/span&gt;  %1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;或是可以在下背景時同時搭配&lt;code&gt;nohup&lt;/code&gt;&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;nohup &lt;/span&gt;jupyterlab &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nohup會把原本output到terminal的東西給寫到&lt;code&gt;nohup.out&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;如果你的指令會一直輸出內容，就有可能讓&lt;code&gt;nohup.out&lt;/code&gt; 這個檔案異常巨大&lt;/p&gt;

&lt;p&gt;可以搭配上面的&lt;code&gt;&amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;/code&gt; 會將所有輸出直接丟掉&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;nohup&lt;/span&gt; /path/to/your/script.sh &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  其他套件
&lt;/h4&gt;

&lt;p&gt;還能用像是screen/ tmux來假裝連線一直都在&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/9190151/how-to-run-a-command-in-the-background-and-get-no-output"&gt;How to run a command in the background and get no output?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://charleslin74.pixnet.net/blog/post/405455902"&gt;[shell] 2&amp;gt;&amp;amp;1 是什麼意思 @ 痞客興的部落格 :: 痞客邦 ::&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out"&gt;How do I use the nohup command without getting nohup.out?&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>backgroun</category>
      <category>wade3c</category>
    </item>
  </channel>
</rss>
