<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Virtual Farmer]]></title><description><![CDATA[Thoughts, stories and ideas.]]></description><link>https://blog.dsm.mone.one/</link><image><url>https://blog.dsm.mone.one/favicon.png</url><title>Virtual Farmer</title><link>https://blog.dsm.mone.one/</link></image><generator>Ghost 5.8</generator><lastBuildDate>Thu, 14 May 2026 07:29:43 GMT</lastBuildDate><atom:link href="https://blog.dsm.mone.one/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Nvidia Jetson Nano Install Vino for VNC]]></title><description><![CDATA[<figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo apt update
sudo apt install vino</code></pre><figcaption><strong>&#x5B89;&#x88DD; VNC Server</strong></figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo vi /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml</code></pre><figcaption>&#x7DE8;&#x8F2F;&#x6B64;&#x6A94;&#x6848;</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash"># &#x6DFB;&#x52A0;&#x5982;&#x4E0B;&#x5167;&#x5BB9;
&lt;key name=&apos;enabled&apos; type=&apos;b&apos;&gt;
   &lt;summary&gt;Enable remote</code></pre></figure>]]></description><link>https://blog.dsm.mone.one/nvidia-jetson-nano-install-vino-for-vnc/</link><guid isPermaLink="false">655c48b9a9373100018369a2</guid><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Tue, 21 Nov 2023 07:23:11 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2023/11/Nvidia-Jetson-Nano-Install-Vino-for-VNC.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo apt update
sudo apt install vino</code></pre><figcaption><strong>&#x5B89;&#x88DD; VNC Server</strong></figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo vi /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml</code></pre><figcaption>&#x7DE8;&#x8F2F;&#x6B64;&#x6A94;&#x6848;</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash"># &#x6DFB;&#x52A0;&#x5982;&#x4E0B;&#x5167;&#x5BB9;
&lt;key name=&apos;enabled&apos; type=&apos;b&apos;&gt;
   &lt;summary&gt;Enable remote access to the desktop&lt;/summary&gt;
   &lt;description&gt;
   If true, allows remote access to the desktop via the RFB
   protocol. Users on remote machines may then connect to the
   desktop using a VNC viewer.
   &lt;/description&gt;
   &lt;default&gt;false&lt;/default&gt;
&lt;/key&gt;</code></pre><figcaption>&lt;key&gt; ... &lt;/key&gt; &#x7D50;&#x69CB;&#x70BA;&#x4E00;&#x7D44;&#xFF0C;&#x5225;&#x5F04;&#x58DE;&#x539F;&#x59CB;&#x8CC7;&#x6599;&#x4E86;</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo glib-compile-schemas /usr/share/glib-2.0/schemas</code></pre><figcaption>&#x63A5;&#x8457;&#x7DE8;&#x8B6F;&#x4E00;&#x4E0B;</figcaption></figure><img src="https://blog.dsm.mone.one/content/images/2023/11/Nvidia-Jetson-Nano-Install-Vino-for-VNC.png" alt="Nvidia Jetson Nano Install Vino for VNC"><p>&#x7136;&#x5F8C;&#x6309;&#x7167;<a href="https://developer.nvidia.com/embedded/learn/tutorials/vnc-setup">&#x5B98;&#x65B9;&#x8CC7;&#x6599;</a>&#xFF0C;&#x7B2C;&#x4E00;&#x6B65;&#x9A5F;&#x8ACB;&#x4F9D;&#x4F60;&#x5BE6;&#x969B;&#x60C5;&#x6CC1;&#x57F7;&#x884C;<strong><strong>&#x3002;</strong></strong></p><figure class="kg-card kg-code-card"><pre><code class="language-bash">mkdir -p ~/.config/autostart
cp /usr/share/applications/vino-server.desktop ~/.config/autostart/.</code></pre><figcaption>&#x6211;&#x9019;&#x908A;&#x662F;Nano 4GB</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">gsettings set org.gnome.Vino enabled true
gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino require-encryption false</code></pre><figcaption>&#x7B2C;&#x4E00;&#x884C;&#x6307;&#x4EE4;&#x8207;&#x5148;&#x524D;&#x7DE8;&#x8F2F;&#x7684;&#x5167;&#x5BB9;&#x6709;&#x95DC;(&#x5B98;&#x65B9;&#x8CC7;&#x6599;&#x6C92;&#x6709;)</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">gsettings set org.gnome.Vino authentication-methods &quot;[&apos;vnc&apos;]&quot;
gsettings set org.gnome.Vino vnc-password $(echo -n &apos;thepassword&apos;|base64)

sudo reboot</code></pre><figcaption>thepassword &#x8ACB;&#x66FF;&#x63DB;&#x6210;&#x4F60;&#x7684;&#x5BC6;&#x78BC;&#xFF0C;&#x5F8C;&#x7E8C;&#x4F7F;&#x7528;VNC&#x5BA2;&#x6236;&#x7AEF;&#x9023;&#x7DDA;&#x6642;&#x6703;&#x7528;&#x5230;</figcaption></figure><p>&#x81F3;&#x6B64;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;VNC&#x53EF;&#x6236;&#x7AEF;&#x9023;&#x7DDA;&#x4E86;&#x3002;&#x4E0B;&#x8F09;<a href="https://www.realvnc.com/en/connect/download/viewer/">RealVNC&#xAE; Viewer</a></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2023/11/Screenshot-2023-11-21-143936.png" class="kg-image" alt="Nvidia Jetson Nano Install Vino for VNC" loading="lazy" width="724" height="631" srcset="https://blog.dsm.mone.one/content/images/size/w600/2023/11/Screenshot-2023-11-21-143936.png 600w, https://blog.dsm.mone.one/content/images/2023/11/Screenshot-2023-11-21-143936.png 724w" sizes="(min-width: 720px) 720px"><figcaption>&#x586B;&#x4E0A;Jetson&#x7684;IP &#x540D;&#x7A31;&#x81EA;&#x8A02; &#x6309;OK</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2023/11/Screenshot-2023-11-21-150606.png" class="kg-image" alt="Nvidia Jetson Nano Install Vino for VNC" loading="lazy" width="1450" height="352" srcset="https://blog.dsm.mone.one/content/images/size/w600/2023/11/Screenshot-2023-11-21-150606.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2023/11/Screenshot-2023-11-21-150606.png 1000w, https://blog.dsm.mone.one/content/images/2023/11/Screenshot-2023-11-21-150606.png 1450w" sizes="(min-width: 720px) 720px"><figcaption>&#x8F38;&#x5165;&#x5148;&#x524D;&#x66FF;&#x63DB; thepassword &#x7684;&#x5BC6;&#x78BC;</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2023/11/Screenshot-2023-11-21-143816.png" class="kg-image" alt="Nvidia Jetson Nano Install Vino for VNC" loading="lazy" width="1026" height="800" srcset="https://blog.dsm.mone.one/content/images/size/w600/2023/11/Screenshot-2023-11-21-143816.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2023/11/Screenshot-2023-11-21-143816.png 1000w, https://blog.dsm.mone.one/content/images/2023/11/Screenshot-2023-11-21-143816.png 1026w" sizes="(min-width: 720px) 720px"><figcaption>&#x5927;&#x529F;&#x544A;&#x6210;!!</figcaption></figure><p>&#x756B;&#x9762;&#x89E3;&#x6790;&#x5EA6;&#x8ABF;&#x6574;</p><pre><code class="language-bash">xrandr --fb 1024x768</code></pre><p></p><p>&#x7121;&#x6CD5;&#x9023;&#x63A5;?</p><p>&#x6211;&#x524D;&#x9762;&#x4E00;&#x5927;&#x5806;&#x64CD;&#x4F5C;&#xFF0C;&#x90FD;&#x662F;&#x900F;&#x904E;&#x96FB;&#x8166;ssh&#x9032;&#x53BB;&#xFF0C;&#x958B;&#x767C;&#x677F;&#x58D3;&#x6839;&#x6C92;&#x63A5;&#x87A2;&#x5E55;(&#x4E5F;&#x6C92;&#x767B;&#x5165;)&#xFF0C;ssh&#x7D42;&#x7AEF;&#x88E1;&#x6211;&#x60F3;&#x624B;&#x52D5;&#x958B;&#x555F;&#x4E5F;&#x90FD;&#x7121;&#x6CD5;&#xFF0C;&#x6211;&#x9019;&#x908A;&#x5361;&#x5230;&#x61F7;&#x7591;&#x4EBA;&#x751F;!</p><p>&#x4E4B;&#x5F8C;&#x722C;&#x6587;&#x767C;&#x73FE;&#x5230;&#xFF0C;&#x5373;&#x4F7F;&#x8A2D;&#x5B9A;&#x81EA;&#x52D5;&#x958B;&#x555F;VNC&#x670D;&#x52D9;&#xFF0C;&#x82E5;&#x958B;&#x6A5F;&#x5F8C;&#x6C92;&#x6709;&#x767B;&#x5165;&#xFF0C;&#x5C31;&#x4E0D;&#x6703;&#x57F7;&#x884C;&#x3002;</p><p>&#x6240;&#x4EE5;&#x6211;&#x9019;&#x908A;&#x662F;&#x8A2D;&#x5B9A;&#x958B;&#x767C;&#x677F;&#x4E0A;&#x96FB;&#x958B;&#x6A5F;&#x5F8C;&#x6703;&#x81EA;&#x52D5;&#x767B;&#x5165;</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf

# &#x6DFB;&#x52A0;&#x5982;&#x4E0B;&#x5167;&#x5BB9;
allow-guset=false       #&#x7981;&#x6B62;&#x8A2A;&#x5BA2;&#x767B;&#x5165;
Autologin-user=UserName #&#x6307;&#x5B9A;UserName&#x70BA;&#x81EA;&#x52D5;&#x767B;&#x5165;&#x5E33;&#x865F;</code></pre><figcaption>UserName &#x66FF;&#x63DB;&#x6210;&#x4F60;&#x7684;&#x958B;&#x767C;&#x677F;&#x767B;&#x5165;&#x5E33;&#x865F;</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo vi /etc/gdm3/custom.conf

# &#x627E;&#x5230; [daemon]
# &#x53D6;&#x6D88;&#x8A3B;&#x89E3;&#x5982;&#x4E0B;&#x5167;&#x5BB9;
AutomaticLoginEnable=true
AutomaticLogin=UserName</code></pre><figcaption>UserName &#x66FF;&#x63DB;&#x6210;&#x4F60;&#x7684;&#x958B;&#x767C;&#x677F;&#x767B;&#x5165;&#x5E33;&#x865F;</figcaption></figure><p>&#x5F80;&#x5F8C;&#x6BCF;&#x6B21;&#x4E0A;&#x96FB;&#x958B;&#x6A5F;&#xFF0C;VNC&#x5BA2;&#x6236;&#x7AEF;&#x5C31;&#x53EF;&#x4EE5;&#x9023;&#x7DDA;&#x4E86;&#xFF0C;&#x958B;&#x767C;&#x677F;&#x5C31;&#x53EF;&#x4EE5;&#x4F4E;&#x8ABF;&#x8EB2;&#x5728;&#x89D2;&#x843D;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[Certbot to obtain certs for HTTPS]]></title><description><![CDATA[<p>Firt you need install Homebrew.(macOs only for this article)</p><!--kg-card-begin: markdown--><pre><code class="language-bash">brew install certbot
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">sudo certbot certonly --manual --preferred-challenges http -m yourmail@gmail.com -d yourdomain.com
</code></pre>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2022/12/Certbot-to-obtain-certs-for-HTTPS-1-.png" class="kg-image" alt loading="lazy" width="901" height="561" srcset="https://blog.dsm.mone.one/content/images/size/w600/2022/12/Certbot-to-obtain-certs-for-HTTPS-1-.png 600w, https://blog.dsm.mone.one/content/images/2022/12/Certbot-to-obtain-certs-for-HTTPS-1-.png 901w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><p>After you store file to your server containing specific data, then you&apos;ll receive a message as follow:</p>
<pre><code class="language-bash">Successfully received certificate.
Certificate is</code></pre>]]></description><link>https://blog.dsm.mone.one/certbot/</link><guid isPermaLink="false">645fd03ad4bc280001d86bf1</guid><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Wed, 28 Dec 2022 12:32:06 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2022/12/Install-Certbot-on-Ubuntu-18.04-and-Secure-Apache-Server-with-Lets-Encrypt.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2022/12/Install-Certbot-on-Ubuntu-18.04-and-Secure-Apache-Server-with-Lets-Encrypt.jpg" alt="Certbot to obtain certs for HTTPS"><p>Firt you need install Homebrew.(macOs only for this article)</p><!--kg-card-begin: markdown--><pre><code class="language-bash">brew install certbot
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">sudo certbot certonly --manual --preferred-challenges http -m yourmail@gmail.com -d yourdomain.com
</code></pre>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2022/12/Certbot-to-obtain-certs-for-HTTPS-1-.png" class="kg-image" alt="Certbot to obtain certs for HTTPS" loading="lazy" width="901" height="561" srcset="https://blog.dsm.mone.one/content/images/size/w600/2022/12/Certbot-to-obtain-certs-for-HTTPS-1-.png 600w, https://blog.dsm.mone.one/content/images/2022/12/Certbot-to-obtain-certs-for-HTTPS-1-.png 901w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><p>After you store file to your server containing specific data, then you&apos;ll receive a message as follow:</p>
<pre><code class="language-bash">Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/yourdomain.com/privkey.pem
This certificate expires on 2023-03-28.
These files will be updated when the certificate renews.
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>Then get your ssl certificate.</p>
<pre><code class="language-bash">sudo cat /etc/letsencrypt/live/yourdomain.com/privkey.pem
sudo cat /etc/letsencrypt/live/yourdomain.com/cert.pem
sudo cat /etc/letsencrypt/live/yourdomain.com/chain.pem
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Nvidia Jetson nano 安裝 Dlink - DWA-T185 USB 無線網卡驅動程式(RTL88x2BU-Linux-Driver)]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p><a href="https://github.com/RinCat/RTL88x2BU-Linux-Driver#supported-devices">Supported Devices</a></p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">git clone https://github.com/RinCat/RTL88x2BU-Linux-Driver.git
cd RTL88x2BU-Linux-Driver
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">//Install dkms
sudo apt-get install dkms
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">//Build
VER=$(sed -n &apos;s/\PACKAGE_VERSION=&quot;\(.*\)&quot;/\1/p&apos; dkms.conf)
sudo rsync -rvhP ./ /usr/src/rtl88x2bu-${VER}
sudo dkms add -m rtl88x2bu -v ${VER}
sudo dkms build</code></pre>]]></description><link>https://blog.dsm.mone.one/nvidia-jetson-nano-an-zhuang-dlink-dwa-t185-usb-wu-xian-wang-qia-qu-dong-cheng-shi-rtl88x2bu-linux-driver/</link><guid isPermaLink="false">645fd03ad4bc280001d86bf0</guid><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Sat, 10 Dec 2022 10:18:53 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2022/12/Nvidia-Jetson-nano----Dlink---DWA-T185-USB----------RTL88x2BU-Linux-Driver-.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.dsm.mone.one/content/images/2022/12/Nvidia-Jetson-nano----Dlink---DWA-T185-USB----------RTL88x2BU-Linux-Driver-.png" alt="Nvidia Jetson nano &#x5B89;&#x88DD; Dlink - DWA-T185 USB &#x7121;&#x7DDA;&#x7DB2;&#x5361;&#x9A45;&#x52D5;&#x7A0B;&#x5F0F;(RTL88x2BU-Linux-Driver)"><p><a href="https://github.com/RinCat/RTL88x2BU-Linux-Driver#supported-devices">Supported Devices</a></p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">git clone https://github.com/RinCat/RTL88x2BU-Linux-Driver.git
cd RTL88x2BU-Linux-Driver
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">//Install dkms
sudo apt-get install dkms
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">//Build
VER=$(sed -n &apos;s/\PACKAGE_VERSION=&quot;\(.*\)&quot;/\1/p&apos; dkms.conf)
sudo rsync -rvhP ./ /usr/src/rtl88x2bu-${VER}
sudo dkms add -m rtl88x2bu -v ${VER}
sudo dkms build -m rtl88x2bu -v ${VER} # Takes ~3-minutes
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">//Install
sudo dkms install -m rtl88x2bu -v ${VER}
sudo modprobe 88x2bu
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>Optional</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">//Check network device
sudo nmcli dev
//Enable  wifi
sudo nmcli r wifi on
//Scan wifi
sudo nmcli dev wifi
//Connect wifi
sudo nmcli dev wifi connect &quot;your_wifi_name&quot; password &quot;your_wifi_code&quot; ifname wlan0
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">//Speed test
sudo apt install speedtest-cli
speedtest-cli
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[偷金幣]]></title><description><![CDATA[<p>&#x6709;x&#x500B;&#x623F;&#x9593;(int array count)&#xFF0C;&#x9EC3;&#x91D1;&#x7684;&#x50F9;&#x503C;&#x70BA;&#x6574;&#x6578;&#x9663;&#x5217;&#x7684;&#x503C;&#xFF0C;&#x76F8;&#x9130;&#x7684;&#x623F;&#x5B50;(item)&#x4E0D;&#x80FD;&#x9023;&#x7E8C;&#x88AB;&#x5C0F;&#x5077;&#x76DC;&#x53D6;&#xFF0C;&#x6C42;&#x5F97;&#x6700;&#x9AD8;&#x76DC;&#x53D6;&#x7372;&#x5229;&#x3002;</p><!--kg-card-begin: markdown--><pre><code class="language-swift">/*
Input:
 House = [3,</code></pre>]]></description><link>https://blog.dsm.mone.one/fei-bo-na-qi-shu-lie/</link><guid isPermaLink="false">645fd03ad4bc280001d86bef</guid><category><![CDATA[Swift]]></category><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Thu, 11 Nov 2021 18:56:42 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2021/11/cover-1600163097975.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2021/11/cover-1600163097975.png" alt="&#x5077;&#x91D1;&#x5E63;"><p>&#x6709;x&#x500B;&#x623F;&#x9593;(int array count)&#xFF0C;&#x9EC3;&#x91D1;&#x7684;&#x50F9;&#x503C;&#x70BA;&#x6574;&#x6578;&#x9663;&#x5217;&#x7684;&#x503C;&#xFF0C;&#x76F8;&#x9130;&#x7684;&#x623F;&#x5B50;(item)&#x4E0D;&#x80FD;&#x9023;&#x7E8C;&#x88AB;&#x5C0F;&#x5077;&#x76DC;&#x53D6;&#xFF0C;&#x6C42;&#x5F97;&#x6700;&#x9AD8;&#x76DC;&#x53D6;&#x7372;&#x5229;&#x3002;</p><!--kg-card-begin: markdown--><pre><code class="language-swift">/*
Input:
 House = [3, 5, 2, 10]
 
Output:
 15
*/
</code></pre>
<pre><code class="language-swift">//&#x6F14;&#x7B97;
class Solution {
    
    func GetGold(houses: [Int]) -&gt; Int {
        var memo: [Int] = Array(0...houses.count - 1)
        for i:Int in memo {
            memo[i] = -1
        }
        return GetMemo(id: 0, memo: &amp;memo, houses: houses)
    }
    
    func GetMemo(id: Int, memo: inout [Int], houses: [Int]) -&gt; Int {
        if (id &gt;= memo.count) {
            return 0
        }
        if (memo[id] != -1) {
            return memo[id]
        }
        let selectFirstElement: Int = houses[id] + GetMemo(id: id + 2, memo: &amp;memo, houses: houses)
        let unselectFirstElement: Int = GetMemo(id: id + 1, memo: &amp;memo, houses: houses)
        
        memo[id] = max(selectFirstElement, unselectFirstElement)
        return memo[id]
    }
}
</code></pre>
<pre><code class="language-swift">//&#x57F7;&#x884C;&#x6E2C;&#x8A66;
var solution = Solution()
print(solution.GetGold(houses: [3, 5, 2, 10]))
print(solution.GetGold(houses: [8, 5, 4, 10, 9]))
print(solution.GetGold(houses: [5, 4, 9]))
</code></pre>
<pre><code class="language-swift">//&#x8F38;&#x51FA;
15
21
14
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[二元樹的走訪(前序、中序、後序)]]></title><description><![CDATA[<p>&#x4F7F;&#x7528;Swift</p><!--kg-card-begin: markdown--><pre><code class="language-swift">/*
 * &#x7D66;&#x51FA;&#x4E00;&#x500B;&#x6574;&#x6578;&#x9663;&#x5217;&#x3002;
 * &#x6309;&#x9806;&#x5E8F;&#x904D;&#x6B77;&#x4E8C;&#x5143;&#x6A39;&#xFF08;Pre_Order&#x3001;In_Order&#x3001;Post_Order&#xFF09;&#x3002;
 *
  &#x8F38;&#x5165; &#xFF1A;
  &#x6839; = [1, 2, 3, -1, 4, 5, 6]
  &#x5716;&#x5F62;&#xFF1A;
       1
      / \
     2   3
    /\   /\
  &#x7121; 4</code></pre>]]></description><link>https://blog.dsm.mone.one/er-yuan-shu-de-zou-fang/</link><guid isPermaLink="false">645fd03ad4bc280001d86bed</guid><category><![CDATA[Swift]]></category><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Fri, 01 Oct 2021 18:16:28 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2021/10/1_CMGFtehu01ZEBgzHG71sMg.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2021/10/1_CMGFtehu01ZEBgzHG71sMg.png" alt="&#x4E8C;&#x5143;&#x6A39;&#x7684;&#x8D70;&#x8A2A;(&#x524D;&#x5E8F;&#x3001;&#x4E2D;&#x5E8F;&#x3001;&#x5F8C;&#x5E8F;)"><p>&#x4F7F;&#x7528;Swift</p><!--kg-card-begin: markdown--><pre><code class="language-swift">/*
 * &#x7D66;&#x51FA;&#x4E00;&#x500B;&#x6574;&#x6578;&#x9663;&#x5217;&#x3002;
 * &#x6309;&#x9806;&#x5E8F;&#x904D;&#x6B77;&#x4E8C;&#x5143;&#x6A39;&#xFF08;Pre_Order&#x3001;In_Order&#x3001;Post_Order&#xFF09;&#x3002;
 *
  &#x8F38;&#x5165; &#xFF1A;
  &#x6839; = [1, 2, 3, -1, 4, 5, 6]
  &#x5716;&#x5F62;&#xFF1A;
       1
      / \
     2   3
    /\   /\
  &#x7121; 4   5 6
  -1 &#x8868;&#x793A; nil&#xFF0C;&#x4E00;&#x500B;&#x6B63;&#x6574;&#x6578;&#x8868;&#x793A;&#x7BC0;&#x9EDE;&#x7684;&#x503C;&#xFF08;&#x552F;&#x4E00;&#xFF09;&#x3002;
  &#x8F38;&#x51FA; (Pre_Order)&#xFF1A;
  [1, 2, 4, 3, 5, 6]
 *
 */
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-swift">// &#x9996;&#x5148;&#xFF0C;&#x8A2D;&#x8A08;&#x4E00;&#x500B;&#x679A;&#x8209;&#x4F86;&#x5340;&#x5206;&#x524D;&#x5E8F;&#x3001;&#x4E2D;&#x5E8F;&#x3001;&#x5F8C;&#x5E8F;
enum OrderType {
    case Pre_Order // &#x524D;&#x5E8F;
    case In_Order // &#x4E2D;&#x5E8F;
    case Post_Order // &#x5F8C;&#x5E8F;
}
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-swift">// &#x8A2D;&#x8A08;&#x4E00;&#x500B;&#x201C;&#x7BC0;&#x9EDE;&#x201D;&#x7269;&#x4EF6;
class Node {
    var value:Int
    var left:Node?
    var right:Node?
    
    init(value:Int!) {
        self.value = value
    }
}
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-swift">// &#x8A2D;&#x8A08;&#x4E00;&#x500B;&#x985E;&#xFF0C;&#x7528;&#x4F86;&#xFF1A;
class Solution {
    
    // &#x5EFA;&#x7ACB;&#x4E8C;&#x5143;&#x6A39;
    func BuildTree(nums: [Int], pos: Int) -&gt; Node? {
        if (pos &gt;= nums.count || nums[pos] == -1) {
            return nil
        }
        let node = Node(value: nums[pos])
        node.left = BuildTree(nums: nums, pos: pos * 2 + 1)
        node.right = BuildTree(nums: nums, pos: pos * 2 + 2)
        return node
    }
    
    // &#x8D70;&#x8A2A;&#x4E8C;&#x5143;&#x6A39;
    func Traversal(root: Node!, orderType: OrderType) -&gt; [Int] {
        var result = [Int]()
        switch orderType {
            case .Pre_Order:
                PreOrderTraversal(root: root, result: &amp;result)
            case .In_Order:
                InOrderTraversal(root: root, result: &amp;result)
            case .Post_Order:
                PostOrderTraversal(root: root, result: &amp;result)
        }
        
        return result
    }
    
    // &#x524D;&#x5E8F;&#x8D70;&#x8A2A;
    func PreOrderTraversal(root: Node!, result: inout [Int]) {
        if (root == nil) {
            return
        }
        result.append(root.value)
        PreOrderTraversal(root: root.left, result: &amp;result)
        PreOrderTraversal(root: root.right, result: &amp;result)
    }
    
    // &#x4E2D;&#x5E8F;&#x8D70;&#x8A2A;
    func InOrderTraversal(root: Node!, result: inout [Int]) {
        if (root == nil) {
            return
        }
        InOrderTraversal(root: root.left, result: &amp;result)
        result.append(root.value)
        InOrderTraversal(root: root.right, result: &amp;result)
    }
    
    // &#x5F8C;&#x5E8F;&#x8D70;&#x8A2A;
    func PostOrderTraversal(root: Node!, result: inout [Int]) {
        if (root == nil) {
            return
        }
        PostOrderTraversal(root: root.left, result: &amp;result)
        PostOrderTraversal(root: root.right, result: &amp;result)
        result.append(root.value)
    }
}
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-swift">var solution = Solution()
if let root = solution.BuildTree(nums: [1, 2, 3, -1, 4, 5, 6], pos: 0) {
    print(&quot;Pre_Order :&quot;)
    print(solution.Traversal(root: root, orderType: OrderType.Pre_Order))
    print(&quot;In_Order :&quot;)
    print(solution.Traversal(root: root, orderType: OrderType.In_Order))
    print(&quot;Post_Order :&quot;)
    print(solution.Traversal(root: root, orderType: OrderType.Post_Order))
}
else {
    print(-1)
}
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code>// Output:
Pre_Order :
[1, 2, 4, 3, 5, 6]
In_Order :
[2, 4, 1, 5, 3, 6]
Post_Order :
[4, 2, 5, 6, 3, 1]
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-swift">if let root = solution.BuildTree(nums: [], pos: 0) {
    print(&quot;Pre_Order :&quot;)
    print(solution.Traversal(root: root, orderType: OrderType.Pre_Order))
    print(&quot;In_Order :&quot;)
    print(solution.Traversal(root: root, orderType: OrderType.In_Order))
    print(&quot;Post_Order :&quot;)
    print(solution.Traversal(root: root, orderType: OrderType.Post_Order))
}
else {
    print(-1)
}
</code></pre>
<pre><code>// Output:
-1
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[ESP32-Cam DIY : Homekit Camera]]></title><description><![CDATA[<p>ESP32-CAM &#x662F;&#x4E00;&#x7247;&#x4EE5; ESP32 &#x70BA;&#x57FA;&#x790E;&#x7684;&#x958B;&#x767C;&#x7248;&#xFF0C;&#x672C;&#x8EAB;&#x5167;&#x5EFA; WIFI &#x53CA; &#x85CD;&#x82BD; BLE &#x4E4B;&#x5916;&#xFF0C;&#x518D;&#x52A0;&#x4E0A; OV2640 &#x5169;&#x767E;&#x842C;&#x756B;&#x7D20;&#x76F8;&#x6A5F;&#x6A21;&#x7D44;&#x3001; &#x9583;&#x5149;&#x71C8;&#x6A21;&#x7D44;&#x7B49;&#x3002;</p><p>ESP32-CAM &#x53EF;&#x4EE5;</p>]]></description><link>https://blog.dsm.mone.one/diy/</link><guid isPermaLink="false">645fd03ad4bc280001d86bec</guid><category><![CDATA[Arduino]]></category><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Sun, 26 Sep 2021 09:04:35 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2021/09/ESP32-Cam-DIY---Homekit-Camera.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2021/09/ESP32-Cam-DIY---Homekit-Camera.png" alt="ESP32-Cam DIY : Homekit Camera"><p>ESP32-CAM &#x662F;&#x4E00;&#x7247;&#x4EE5; ESP32 &#x70BA;&#x57FA;&#x790E;&#x7684;&#x958B;&#x767C;&#x7248;&#xFF0C;&#x672C;&#x8EAB;&#x5167;&#x5EFA; WIFI &#x53CA; &#x85CD;&#x82BD; BLE &#x4E4B;&#x5916;&#xFF0C;&#x518D;&#x52A0;&#x4E0A; OV2640 &#x5169;&#x767E;&#x842C;&#x756B;&#x7D20;&#x76F8;&#x6A5F;&#x6A21;&#x7D44;&#x3001; &#x9583;&#x5149;&#x71C8;&#x6A21;&#x7D44;&#x7B49;&#x3002;</p><p>ESP32-CAM &#x53EF;&#x4EE5;&#x901A;&#x904E;&#x5716;&#x7247;&#x6216;&#x8005;MJPEG IP Camera&#x7684;&#x65B9;&#x5F0F;&#x4F86;&#x4ECB;&#x63A5;&#x81F3;HomeAssistant&#xFF0C;&#x518D;&#x5229;&#x7528;Homebridge&#x63A5;&#x5165;HomeKit&#xFF0C;&#x82E5;&#x60A8;&#x60F3;&#x539F;&#x751F;&#x63A5;&#x5165;HomeKit&#x6703;&#x6BD4;&#x8F03;&#x9EBB;&#x7169;&#xFF0C;Github&#x4E2D;&#x6709;&#x500B;<a href="https://github.com/maximkulkin/esp32-homekit-camera">&#x89E3;&#x6C7A;&#x65B9;&#x6848;</a>&#xFF0C;&#x73FE;&#x5728;&#x9019;&#x91CC;&#x5206;&#x4EAB;&#x4E0B;&#x5982;&#x4F55;&#x7DE8;&#x8B6F;&#x53CA;&#x71D2;&#x9304;&#x3002;</p><p>&#x672C;&#x6587;&#x96FB;&#x8166;&#x74B0;&#x5883;&#x70BA;macOS&#xFF0C;&#x82E5;&#x60A8;&#x6709;&#x57FA;&#x672C;&#x958B;&#x767C;&#x77E5;&#x8B58;&#x53EF;&#x4EE5;&#x5728;&#x5176;&#x4ED6;&#x5E73;&#x53F0;&#x7DE8;&#x8B6F;&#x3001;&#x5237;&#x5BEB;&#xFF0C;&#x4F46;&#x662F;Apple Home App&#x5C31;&#x7121;&#x53EF;&#x907F;&#x514D;&#x7684;&#x9700;&#x8981;&#x6709;&#x652F;&#x63F4;&#x7684;&#x860B;&#x679C;&#x7CFB;&#x7D71;&#x3002;</p><!--kg-card-begin: markdown--><p>1.&#x9996;&#x5148;&#x8981;&#x6E96;&#x5099;&#x597D;ESP-IDF&#x958B;&#x767C;&#x74B0;&#x5883;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>2.&#x4E0B;&#x8F09;&#x7A0B;&#x5F0F;&#x78BC;</p>
<pre><code class="language-bash">git clone https://github.com/maximkulkin/esp32-homekit-camera.git
</code></pre>
<pre><code class="language-bash">cd esp32-homekit-camera
</code></pre>
<p>&#x66F4;&#x65B0;&#x5B50;&#x6A21;&#x584A;</p>
<pre><code class="language-bash">git submodule update --init --recursive
</code></pre>
<p>&#x6DFB;&#x52A0;CMakeList.txt&#xFF0C;&#x53C3;&#x8003;<a href="https://github.com/maximkulkin/esp32-homekit-camera/issues/80">Issue</a></p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>3.&#x914D;&#x7F6E;<br>
&#x67E5;&#x770B;&#x8A2D;&#x5099;&#x7684;serial&#x961C;&#x865F;&#xFF0C;&#x57F7;&#x884C;&#x6B64;&#x6B65;&#x9A5F;&#x6642;&#xFF0C;&#x53EF;&#x4EE5;&#x5148;&#x4E0D;&#x7528;&#x63A5;&#x7DDA;&#xFF0C;&#x5F8C;&#x9762;&#x6703;&#x8AAA;&#x660E;&#xFF0C;&#x53EA;&#x9700;&#x8981;&#x5C07;TTL&#x6A21;&#x7D44;USB&#x63D2;&#x9032;&#x96FB;&#x8166;&#x5373;&#x53EF;&#x57F7;&#x884C;&#x67E5;&#x8A62;&#x3002;</p>
<pre><code class="language-bash">ls /dev/tty.*
</code></pre>
<p>ex. /dev/tty.usbserial-0001</p>
<p>&#x958B;&#x59CB;&#x914D;&#x7F6E;</p>
<pre><code class="language-bash">make menuconfig
</code></pre>
<p>&#x5982;&#x679C;&#x60A8;&#x50CF;&#x6211;&#x4E00;&#x6A23;&#xFF0C;&#x662F;&#x4F7F;&#x7528;VSCode + ESP-IDF &#x7684;&#x65B9;&#x5F0F;&#x5EFA;&#x7ACB;&#x74B0;&#x5883;&#xFF0C;&#x9019;&#x908A;&#x53EF;&#x80FD;&#x7121;&#x6CD5;&#x9806;&#x5229;&#x57F7;&#x884C;&quot;make menuconfig&quot;&#x3002;</p>
<p>&#x63A5;&#x4E0B;&#x4F86;&#x53EA;&#x9700;&#x8981;&#x7D42;&#x7AEF;&#x6A5F;&#xFF0C;&#x66AB;&#x6642;&#x62CB;&#x958B;VSCode&#x3002;<br>
&#x9032;&#x5165;esp-idf&#x7684;&#x5B89;&#x88DD;&#x8DEF;&#x5F91;&#xFF0C;&#x82E5;&#x4F60;&#x5FD8;&#x4E86;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;VSCode&#x4E2D;ESPRESSIF Extension&#x67E5;&#x770B;:<br>
<img src="https://blog.dsm.mone.one/content/images/2021/09/Screen-Shot-2021-09-26-at-3.21.20-PM.png" alt="ESP32-Cam DIY : Homekit Camera" loading="lazy"><br>
&#x6211;&#x7684;&#x8DEF;&#x5F91;&#x662F;&#x5728;home&#x4E0B;&#xFF0C;&#x6240;&#x4EE5;&#x53EF;&#x7701;&#x7565;&#x6210;~/</p>
<pre><code class="language-bash">cd ~/esp/esp-idf
</code></pre>
<p>or</p>
<pre><code class="language-bash">cd /{YOUR_PATH}/esp/esp-idf
</code></pre>
<p>&#x63A5;&#x8457;&#x57F7;&#x884C;</p>
<pre><code class="language-bash">./install.sh
</code></pre>
<pre><code class="language-bash">. ./export.sh
</code></pre>
<p>&#x518D;&#x6B21;&#x56DE;&#x5230;esp32-homekit-camera</p>
<pre><code class="language-bash">cd {YOUR_PATH}/esp32-homekit-camera
</code></pre>
<p>&#x6253;&#x958B;&#x914D;&#x7F6E;&#x7A97;</p>
<pre><code class="language-bash">make menuconfig
</code></pre>
<p><img src="https://blog.dsm.mone.one/content/images/2021/09/Screen-Shot-2021-09-26-at-3.05.38-PM.png" alt="ESP32-Cam DIY : Homekit Camera" loading="lazy"><br>
&#x4F9D;&#x7167;&#x4E0B;&#x5217;&#x8CC7;&#x8A0A;&#x4F86;&#x914D;&#x7F6E;</p>
<ul>
<li>Serial flasher config
<ul>
<li>Default serial port</li>
<li>Flash size = <strong>4 MB</strong></li>
</ul>
</li>
<li>Partition Table
<ul>
<li>Partition Table = <strong>Custom partition table CSV</strong></li>
<li>Custom partition CSV file = <strong>partitions.csv</strong></li>
</ul>
</li>
<li>Component config
<ul>
<li>Driver configuration
<ul>
<li>RTCIO configuration
<ul>
<li>Support array <code>rtc_gpio_desc</code> for ESP32 = <strong>check</strong></li>
</ul>
</li>
</ul>
</li>
<li>ESP32-specific
<ul>
<li>Support for external, SPI-connected RAM = <strong>check</strong></li>
<li>SPI RAM config
<ul>
<li>Initialize SPI RAM during startup = <strong>check</strong></li>
<li>SPI RAM access method = <strong>Make RAM allocatable using malloc() as well</strong></li>
</ul>
</li>
</ul>
</li>
<li>Camera configuration
<ul>
<li>OV2640 Support = <strong>check</strong></li>
</ul>
</li>
<li>HomeKit
<ul>
<li>SPI flash address for storing HomeKit data = <strong>0x3A0000</strong></li>
</ul>
</li>
</ul>
</li>
<li>ESP32 HomeKit Camera
<ul>
<li>WiFi SSID</li>
<li>WiFi Password</li>
<li>Select Camera Pinout
<ul>
<li>Select Camera Pinout = <em>your variant of module</em></li>
</ul>
</li>
<li>LED Pin
<ul>
<li>PIN = <em>your variant of module</em>
<ul>
<li>ESP32-CAM by AI-Thinker == <strong>33</strong></li>
</ul>
</li>
</ul>
</li>
<li>Image sensor vertical flip <em>(optional)</em>
<ul>
<li>Toggle if HomeKit app has video feed upside down</li>
</ul>
</li>
<li>Image sensor horizontal mirror <em>(optional)</em>
<ul>
<li>Toggle if HomeKit app has video feed mirrored</li>
</ul>
</li>
<li>Image sensor enhance settings <em>(optional)</em>
<ul>
<li>EXPERIMENTAL: adjusts contrast, saturation, etc for <em>better</em> image quality</li>
</ul>
</li>
<li>HomeKit Device Setup Code <em>(optional)</em></li>
<li>HomeKit Device Manufacturer <em>(optional)</em></li>
<li>HomeKit Device model name <em>(optional)</em></li>
<li>HomeKit Device model number <em>(optional)</em></li>
<li>HomeKit Device Serial number <em>(optional)</em></li>
<li>HomeKit Device Firmware version <em>(optional)</em></li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>4.&#x4F7F;&#x7528;USB&#x8F49;TTL&#x6A21;&#x7D44;&#x4F86;&#x5237;&#x5BEB;<br>
&#x63A5;&#x7DDA;&#xFF1A;<br>
ESP32-Cam --------  TTL&#x6A21;&#x7D44;&#x5DE5;&#x5177;<br>
TX        --------  RX<br>
RX        --------  TX<br>
GND       --------  GND<br>
3.3V      --------  3.3V (&#x9019;&#x908A;&#x8981;&#x4F7F;&#x7528;5V&#x4E5F;&#x53EF;&#x4EE5;)<br>
GPIO0     --------  GND  (&#x958B;&#x767C;&#x7248;&#x4E0A;&#x96FB;&#x524D;&#x8981;&#x63A5;&#x597D;&#xFF0C;&#x4E0A;&#x96FB;&#x5F8C;&#x6703;&#x9032;&#x5165;&#x5237;&#x5BEB;&#x6A21;&#x5F0F;)</p>
<p>&#x64E6;&#x9664;flash</p>
<pre><code class="language-bash">make erase_flash
</code></pre>
<p>&#x958B;&#x59CB;&#x5237;&#x5BEB;</p>
<pre><code class="language-bash">make flash
</code></pre>
<p>&#x82E5;&#x6C92;&#x6709;&#x7DE8;&#x8B6F;&#x904E;&#xFF0C;&#x6703;&#x81EA;&#x52D5;&quot;make all&quot;&#x7DE8;&#x8B6F;&#x3002;</p>
<p>&#x4E00;&#x9663;&#x7DE8;&#x8B6F;&#xFF08;&#x6703;&#x6709;&#x4E00;&#x4E9B;&#x8B66;&#x544A;&#xFF09;&#x5F8C;&#xFF0C;&#x6703;&#x6709;&#x5BEB;&#x5165;&#x7684;&#x767E;&#x5206;&#x6BD4;&#x9032;&#x5EA6;&#xFF0C;&#x76F4;&#x5230;&#x51FA;&#x73FE;<br>
Hard resetting via RTS pin...<br>
&#x4EE3;&#x8868;&#x5237;&#x5BEB;&#x5B8C;&#x6210;&#x4E86;&#xFF0C;&#x6B64;&#x6642;&#x79FB;&#x9664;&#x6389;GPIO0&#xFF0C;&#x91CD;&#x65B0;&#x63D2;&#x96FB;(&#x5EFA;&#x8B70;&#x96FB;&#x6E90;&#x6709;2A&#xFF0C;&#x4E26;&#x4E14;&#x54C1;&#x8CEA;&#x4E0D;&#x8981;&#x592A;&#x7CDF;&#x7CD5;&#xFF0C;&#x82E5;&#x60A8;&#x4F9D;&#x7136;&#x4F7F;&#x7528;&#x6A21;&#x7D44;&#x5DE5;&#x5177;&#x4F86;&#x4F9B;&#x96FB;&#xFF0C;&#x53EF;&#x80FD;&#x6703;&#x4E0D;&#x7A69;&#x5B9A;)&#x3002;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>5.HomeApp&#x6DFB;&#x52A0;&#x8A2D;&#x5099;<br>
(&#x7531;&#x4E0A;&#x5230;&#x4E0B;&#xFF0C;&#x7531;&#x5DE6;&#x81F3;&#x53F3;&#xFF0C;&#x770B;&#x5716;&#x64CD;&#x4F5C;)<br>
<img src="https://blog.dsm.mone.one/content/images/2021/09/ESP32-CAM-Homekit.png" alt="ESP32-Cam DIY : Homekit Camera" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Flutter 使用 Firebase]]></title><description><![CDATA[<p> &#x76EE;&#x6A19;&#xFF1A;&#x672C;&#x6587;&#x5C07;&#x4E00;&#x6B65;&#x6B65;&#x5E36;&#x60A8;&#x6574;&#x5408;Firebase&#x81F3;Flutter&#x505A;&#x4F7F;&#x7528;&#x3002;</p><!--kg-card-begin: markdown--><p>&#x6B65;&#x9A5F;&#xFF1A;</p>
<ol>
<li>&#x78BA;&#x8A8D;&#x7576;&#x524D;Flutter SDK branch &#x4F4D;&#x5728; stable 1.22.6</li>
<li>&#x5275;&#x5EFA;Flutter&#x5C08;&#x6848;&#xFF0C;&#x914D;&#x7F6E;packageName(&#x4E0B;&#x4E00;&#x6B65;&#x6703;&#x7528;</li></ol>]]></description><link>https://blog.dsm.mone.one/flutter-shi-yong/</link><guid isPermaLink="false">645fd03ad4bc280001d86bea</guid><category><![CDATA[Flutter]]></category><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Mon, 01 Mar 2021 13:43:04 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2021/03/Flutter_Integrate_Firebase.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2021/03/Flutter_Integrate_Firebase.png" alt="Flutter &#x4F7F;&#x7528; Firebase"><p> &#x76EE;&#x6A19;&#xFF1A;&#x672C;&#x6587;&#x5C07;&#x4E00;&#x6B65;&#x6B65;&#x5E36;&#x60A8;&#x6574;&#x5408;Firebase&#x81F3;Flutter&#x505A;&#x4F7F;&#x7528;&#x3002;</p><!--kg-card-begin: markdown--><p>&#x6B65;&#x9A5F;&#xFF1A;</p>
<ol>
<li>&#x78BA;&#x8A8D;&#x7576;&#x524D;Flutter SDK branch &#x4F4D;&#x5728; stable 1.22.6</li>
<li>&#x5275;&#x5EFA;Flutter&#x5C08;&#x6848;&#xFF0C;&#x914D;&#x7F6E;packageName(&#x4E0B;&#x4E00;&#x6B65;&#x6703;&#x7528;&#x5230;)</li>
<li>&#x767B;&#x5165;Firebase&#xFF0C;&#x5275;&#x5EFA;&#x5C08;&#x6848;&#xFF0C;&#x914D;&#x7F6E;iOS, Android&#x7684;Service&#x6A94;&#x6848;(.plist &amp; .json)</li>
<li>Flutter&#x5C08;&#x6848;&#x4E2D;&#xFF0C;&#x65BC;pubspec.yaml&#x4E2D;&#x5F15;&#x5165;dependencies&#x9805;&#x76EE;</li>
</ol>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>&#x5167;&#x6587;&#xFF1A;</p>
<ol>
<li>&#x78BA;&#x8A8D;&#x7576;&#x524D;Flutter SDK branch &#x4F4D;&#x5728; stable 1.22.6<br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-8.38.45-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"></li>
</ol>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><ol start="2">
<li>&#x5275;&#x5EFA;Flutter&#x5C08;&#x6848;&#xFF0C;&#x914D;&#x7F6E;packageName</li>
</ol>
<p>iOS<br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-8.53.59-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"></p>
<p>Android(&#x8ACB;&#x4E00;&#x4F75;&#x914D;&#x7F6E;&#x5716;&#x4E2D;&#x5176;&#x4ED6;&#x8A2D;&#x5B9A;&#xFF1A;minSDK=&gt;21)<br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-8.55.51-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"></p>
<pre><code class="language-bash"># &#x6DFB;&#x52A0;&#x9019;&#x884C;
apply plugin: &apos;com.google.gms.google-services&apos;
</code></pre>
<p><img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-8.57.19-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"></p>
<pre><code class="language-bash"># &#x6DFB;&#x52A0;&#x9019;&#x884C;
classpath &apos;com.google.gms:google-services:4.3.3&apos;
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>3.(1)&#x767B;&#x5165;Firebase&#xFF0C;&#x5275;&#x5EFA;&#x5C08;&#x6848;</p>
<p><img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.02.49-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"><br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.03.23-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"><br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.03.39-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"><br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.04.42-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"><br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.07.18-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"></p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>3.(2)&#x65BC;Firebase&#x751F;&#x6210;iOS, Android&#x7684;Service&#x6A94;&#x6848;(.plist &amp; .json)<br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.08.56-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"></p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>3.(3) iOS<br>
&#x586B;&#x5165;&#x7A0D;&#x65E9;&#x914D;&#x7F6E;&#x7684;bundleName<br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.15.19-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"><br>
&#x4E0B;&#x8F09;.plist&#x6A94;&#x6848;&#xFF0C;&#x4F9D;&#x7167;&#x8AAA;&#x660E;&#x62D6;&#x66F3;&#x9032;&#x53BB;&#x5C08;&#x6848;&#x4E2D;<br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.15.48-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"><br>
&#x5F8C;&#x7E8C;&#x6B65;&#x9A5F;&#x90FD;&#x7701;&#x7565;&#x6389;&#x4E0D;&#x624B;&#x52D5;&#x6DFB;&#x52A0;&#xFF0C;&#x4EA4;&#x7531;Flutter&#x4F86;&#x505A;&#x3002;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>3.(4) Android &#x4E5F;&#x662F;&#x96F7;&#x540C;&#x64CD;&#x4F5C;&#xFF0C;&#x4E0B;&#x8F09;&#x5B8C;&#x6A94;&#x6848;&#xFF0C;&#x5F8C;&#x7E8C;&#x7684;&#x6B65;&#x9A5F;&#x5176;&#x5BE6;&#x7A0D;&#x65E9;&#x6211;&#x5011;&#x5DF2;&#x7D93;&#x6709;&#x505A;&#x6DFB;&#x52A0;&#x4E86;&#xFF0C;&#x76F4;&#x63A5;&#x8DF3;&#x904E;&#x3002;<br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.22.44-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"></p>
<p>Done!!!<br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.26.06-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"></p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>4.Flutter&#x5C08;&#x6848;&#x4E2D;&#xFF0C;&#x65BC;pubspec.yaml&#x4E2D;&#x5F15;&#x5165;dependencies&#x9805;&#x76EE;<br>
<img src="https://blog.dsm.mone.one/content/images/2021/03/Screen-Shot-2021-03-01-at-9.30.45-PM.png" alt="Flutter &#x4F7F;&#x7528; Firebase" loading="lazy"></p>
<pre><code class="language-bash">firebase_core: ^0.5.3  
cloud_firestore: ^0.14.4
# &#x5176;&#x4ED6;&#x66F4;&#x591A;&#x4F9D;&#x8CF4;...
firebase_auth: ^0.18.4+1
firebase_storage: ^5.2.0
</code></pre>
<!--kg-card-end: markdown--><p> &#x914D;&#x7F6E;&#x5B8C;&#x6210;&#xFF0C;&#x5728;&#x60A8;&#x6DFB;&#x52A0;&#x76F8;&#x95DC;&#x7A0B;&#x5F0F;&#x78BC;&#x524D;&#xFF0C;&#x4E0D;&#x59A8;&#x5169;&#x5E73;&#x53F0;&#x5148;&#x8DD1;&#x4E00;&#x6B21;&#x8A66;&#x8A66;&#x3002;</p><!--kg-card-begin: markdown--><p><a href="https://github.com/der1598c/Flutter_Firebase_Tutorial">DEMO(Github)</a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[NodeMCU在BigSur系統下燒錄問題(ArduinoIDE)]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x554F;&#x984C;&#x63CF;&#x8FF0;&#xFF1A;<br>
Executable segment sizes:<br>
IROM   : 232856          - code in flash         (default or ICACHE_FLASH_ATTR)<br>
IRAM   : 26888   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...)<br>
DATA   : 1248  )         - initialized variables (global, static) in RAM/HEAP<br>
RODATA : 728   ) / 81920 - constants             (global, static) in RAM/HEAP<br></p>]]></description><link>https://blog.dsm.mone.one/nodemcuzai/</link><guid isPermaLink="false">645fd03ad4bc280001d86be9</guid><category><![CDATA[Arduino]]></category><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Sun, 21 Feb 2021 18:38:58 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2021/02/NodeMCU_Flash_Error.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.dsm.mone.one/content/images/2021/02/NodeMCU_Flash_Error.png" alt="NodeMCU&#x5728;BigSur&#x7CFB;&#x7D71;&#x4E0B;&#x71D2;&#x9304;&#x554F;&#x984C;(ArduinoIDE)"><p>&#x554F;&#x984C;&#x63CF;&#x8FF0;&#xFF1A;<br>
Executable segment sizes:<br>
IROM   : 232856          - code in flash         (default or ICACHE_FLASH_ATTR)<br>
IRAM   : 26888   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...)<br>
DATA   : 1248  )         - initialized variables (global, static) in RAM/HEAP<br>
RODATA : 728   ) / 81920 - constants             (global, static) in RAM/HEAP<br>
BSS    : 24928 )         - zeroed variables      (global, static) in RAM/HEAP<br>
Sketch uses 261720 bytes (25%) of program storage space. Maximum is 1044464 bytes.<br>
Global variables use 26904 bytes (32%) of dynamic memory, leaving 55016 bytes for local variables. Maximum is 81920 bytes.<br>
pyserial or esptool directories not found next to this upload.py tool.<br>
An error occurred while uploading the sketch</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>&#x74B0;&#x5883;&#xFF1A;<br>
Arduino IDE version: 1.8.13<br>
esp8266 Core version: 2.7.4</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>&#x89E3;&#x6C7A;&#x65B9;&#x6CD5;&#xFF1A;<br>
1.- &#x627E;&#x5230;list_ports_osx.py ~/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.4/tools/pyserial/serial/tools/list_ports_osx.py<br>
2.- &#x8A3B;&#x89E3;&#x6389;29&#x8207;30&#x884C;&#xFF0C;&#x4E26;&#x65B0;&#x589E;&#x4E0B;&#x9762;&#x5169;&#x884C;:</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">iokit = ctypes.cdll.LoadLibrary(&apos;/System/Library/Frameworks/IOKit.framework/IOKit&apos;)
   cf = ctypes.cdll.LoadLibrary(&apos;/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation&apos;)
</code></pre>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2021/02/Screen-Shot-2021-02-22-at-1.30.28-AM.png" class="kg-image" alt="NodeMCU&#x5728;BigSur&#x7CFB;&#x7D71;&#x4E0B;&#x71D2;&#x9304;&#x554F;&#x984C;(ArduinoIDE)" loading="lazy" width="2000" height="1408" srcset="https://blog.dsm.mone.one/content/images/size/w600/2021/02/Screen-Shot-2021-02-22-at-1.30.28-AM.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2021/02/Screen-Shot-2021-02-22-at-1.30.28-AM.png 1000w, https://blog.dsm.mone.one/content/images/size/w1600/2021/02/Screen-Shot-2021-02-22-at-1.30.28-AM.png 1600w, https://blog.dsm.mone.one/content/images/2021/02/Screen-Shot-2021-02-22-at-1.30.28-AM.png 2082w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><p><a href="https://forum.arduino.cc/index.php?topic=702144.0">&#x53C3;&#x8003;</a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[FlutterSDK配置(macOS 11)]]></title><description><![CDATA[<p> &#x4E0B;&#x8F09;Flutter SDK</p><!--kg-card-begin: markdown--><pre><code class="language-bash">git clone https://github.com/flutter/flutter.git
</code></pre>
<!--kg-card-end: markdown--><p> &#x6253;&#x958B;Terminal&#xFF0C;&#x7DE8;&#x8F2F; .zshrc</p><!--kg-card-begin: markdown--><pre><code class="language-bash">#&#x82E5;&#x6C92;&#x6709;.zshrc&#x6A94;&#x6848;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;nano&#x5275;&#x5EFA;&#x4E00;&#x500B;&#x3002;
nano ~/.zshrc
#&#x5EFA;&#x7ACB;&#x5F8C;&#x6703;&#x662F;&#x4E00;&#x500B;&#x7DE8;&#x8F2F;&#x8996;&#x7A97;&#xFF0C;</code></pre>]]></description><link>https://blog.dsm.mone.one/fluttersdkpei-zhi-macos-11/</link><guid isPermaLink="false">645fd03ad4bc280001d86be8</guid><category><![CDATA[Flutter]]></category><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Sun, 03 Jan 2021 14:04:25 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2021/01/maxresdefault.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2021/01/maxresdefault.jpg" alt="FlutterSDK&#x914D;&#x7F6E;(macOS 11)"><p> &#x4E0B;&#x8F09;Flutter SDK</p><!--kg-card-begin: markdown--><pre><code class="language-bash">git clone https://github.com/flutter/flutter.git
</code></pre>
<!--kg-card-end: markdown--><p> &#x6253;&#x958B;Terminal&#xFF0C;&#x7DE8;&#x8F2F; .zshrc</p><!--kg-card-begin: markdown--><pre><code class="language-bash">#&#x82E5;&#x6C92;&#x6709;.zshrc&#x6A94;&#x6848;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;nano&#x5275;&#x5EFA;&#x4E00;&#x500B;&#x3002;
nano ~/.zshrc
#&#x5EFA;&#x7ACB;&#x5F8C;&#x6703;&#x662F;&#x4E00;&#x500B;&#x7DE8;&#x8F2F;&#x8996;&#x7A97;&#xFF0C;&#x7DE8;&#x8F2F;&#x5B8C;&#x6210;&#x5F8C;&#xFF0C;&#x6309;Ctrl + X -&gt; Y(&#x78BA;&#x5B9A;&#x66F4;&#x6539;) -&gt; enter(&#x78BA;&#x8A8D;&#x6A94;&#x540D;)

#&#x7DE8;&#x8F2F;.zshrc
vim ~/.zshrc
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-bash">#&#x6DFB;&#x52A0;&#x4F60;&#x7684;SDK&#x8DEF;&#x5F91;
export PATH=&quot;$PATH:/{YOUR_FLUTTER_DIR}/flutter/bin&quot;
</code></pre>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2021/01/Screen-Shot-2021-01-03-at-9.56.05-PM.png" class="kg-image" alt="FlutterSDK&#x914D;&#x7F6E;(macOS 11)" loading="lazy" width="416" height="42"><figcaption>cat .zshrc</figcaption></figure><!--kg-card-begin: markdown--><pre><code class="language-bash">#&#x6AA2;&#x67E5;&#x7576;&#x524D;flutter&#x7248;&#x672C;
flutter --version
</code></pre>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2021/01/Screen-Shot-2021-01-03-at-9.53.53-PM.png" class="kg-image" alt="FlutterSDK&#x914D;&#x7F6E;(macOS 11)" loading="lazy" width="514" height="83"><figcaption>flutter --version</figcaption></figure>]]></content:encoded></item><item><title><![CDATA[在Java專案中手動導入Kotlin開發的三方庫]]></title><description><![CDATA[<p>&#x6700;&#x8FD1;&#x6709;&#x500B;&#x9700;&#x6C42;&#xFF0C;&#x5927;&#x81F4;&#x4E0A;&#x5C31;&#x662F;&#x60F3;&#x8981;&#x5728;App&#x4E2D;&#x505A;&#x4E00;&#x500B;&#x6416;&#x687F;&#x63A7;&#x9375;&#xFF0C;&#x5728;&#x601D;&#x7D22;&#x4E00;&#x4E0B;&#x5F8C;&#xFF0C;&#x76F4;&#x63A5;&#x5728;&#x6211;&#x6BD4;&#x8F03;&#x719F;&#x6089;&#x7684;iOS&#x5C08;&#x6848;&#x4E2D;&#x81EA;&#x5DF1;&#x523B;&#x4E86;&#x8D77;</p>]]></description><link>https://blog.dsm.mone.one/zai-javazhuan-an-zhong-shou-dong-dao-ru-kotlinkai-fa-de-san-fang-ku/</link><guid isPermaLink="false">645fd03ad4bc280001d86be6</guid><category><![CDATA[Android]]></category><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Tue, 24 Nov 2020 15:24:52 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2020/11/Artboard-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2020/11/Artboard-1.png" alt="&#x5728;Java&#x5C08;&#x6848;&#x4E2D;&#x624B;&#x52D5;&#x5C0E;&#x5165;Kotlin&#x958B;&#x767C;&#x7684;&#x4E09;&#x65B9;&#x5EAB;"><p>&#x6700;&#x8FD1;&#x6709;&#x500B;&#x9700;&#x6C42;&#xFF0C;&#x5927;&#x81F4;&#x4E0A;&#x5C31;&#x662F;&#x60F3;&#x8981;&#x5728;App&#x4E2D;&#x505A;&#x4E00;&#x500B;&#x6416;&#x687F;&#x63A7;&#x9375;&#xFF0C;&#x5728;&#x601D;&#x7D22;&#x4E00;&#x4E0B;&#x5F8C;&#xFF0C;&#x76F4;&#x63A5;&#x5728;&#x6211;&#x6BD4;&#x8F03;&#x719F;&#x6089;&#x7684;iOS&#x5C08;&#x6848;&#x4E2D;&#x81EA;&#x5DF1;&#x523B;&#x4E86;&#x8D77;&#x4F86;&#xFF0C;&#x6069;...&#x4E0D;&#x7528;&#x4E00;&#x500B;&#x4E0A;&#x5348;&#x5C31;&#x5B8C;&#x6210;&#x4E86;&#x3002;</p><p>&#x7B49;&#x7B49;&#xFF0C;&#x9084;&#x6709;Android&#x5440;!!!&#x56E0;&#x70BA;&#x9019;&#x500B;&#x5C08;&#x6848;&#x76EE;&#x524D;&#x9084;&#x662F;&#x4F9D;&#x8CF4;&#x539F;&#x751F;&#x8F03;&#x591A;&#xFF0C;&#x4E5F;&#x6C92;&#x6709;&#x8A08;&#x756B;&#x4EE5;Flutter&#x4F86;&#x91CD;&#x5BEB;&#xFF0C;&#x6240;&#x4EE5;&#x8981;&#x5404;&#x81EA;&#x958B;&#x767C;&#x3002;</p><p>&#x5728;&#x700F;&#x89BD;&#x5668;&#x641C;&#x7D22;&#x4E00;&#x756A;&#x5F8C;&#xFF0C;&#x6211;&#x767C;&#x73FE;&#x4E86;&#x4E00;&#x500B;&#x611F;&#x89BA;&#x9084;&#x6EFF;&#x7C21;&#x6F54;&#x7684;&#x6E90;&#x78BC;:</p><p><a href="https://github.com/developer-kaczmarek/CircleDPad">CircleDPad</a></p><p>&#x8A72;&#x4F5C;&#x8005;&#x662F;&#x4EE5; Kotlin&#x958B;&#x767C;&#x7684;&#xFF0C;&#x4E0D;&#x904E;&#x6211;&#x5728;&#x900F;&#x904E;build.gradle&#x5C0E;&#x5165;&#x904E;&#x7A0B;&#x4E2D;&#x4E26;&#x4E0D;&#x9806;&#x5229;&#xFF0C;&#x6CC1;&#x4E14;&#x6211;&#x9700;&#x8981;&#x589E;&#x52A0;&#x5176;&#x529F;&#x80FD;&#xFF0C;&#x6240;&#x5E78;&#x5C31;&#x4F86;&#x624B;&#x52D5;&#x5C0E;&#x5165;&#x5427;!</p><p></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-220435-1.png" class="kg-image" alt="&#x5728;Java&#x5C08;&#x6848;&#x4E2D;&#x624B;&#x52D5;&#x5C0E;&#x5165;Kotlin&#x958B;&#x767C;&#x7684;&#x4E09;&#x65B9;&#x5EAB;" loading="lazy" width="368" height="323"><figcaption>&#x5C07;&#x5C08;&#x6848;&#x62C9;&#x4E0B;&#x4F86;</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-220756-1.png" class="kg-image" alt="&#x5728;Java&#x5C08;&#x6848;&#x4E2D;&#x624B;&#x52D5;&#x5C0E;&#x5165;Kotlin&#x958B;&#x767C;&#x7684;&#x4E09;&#x65B9;&#x5EAB;" loading="lazy" width="1289" height="416" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Screenshot-2020-11-24-220756-1.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Screenshot-2020-11-24-220756-1.png 1000w, https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-220756-1.png 1289w" sizes="(min-width: 720px) 720px"><figcaption>&#x62F7;&#x8C9D;&#x9032;&#x81EA;&#x5DF1;&#x5C08;&#x6848;</figcaption></figure><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-221047-1.png" class="kg-image" alt="&#x5728;Java&#x5C08;&#x6848;&#x4E2D;&#x624B;&#x52D5;&#x5C0E;&#x5165;Kotlin&#x958B;&#x767C;&#x7684;&#x4E09;&#x65B9;&#x5EAB;" loading="lazy" width="694" height="394" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Screenshot-2020-11-24-221047-1.png 600w, https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-221047-1.png 694w"></figure><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-221314-1.png" class="kg-image" alt="&#x5728;Java&#x5C08;&#x6848;&#x4E2D;&#x624B;&#x52D5;&#x5C0E;&#x5165;Kotlin&#x958B;&#x767C;&#x7684;&#x4E09;&#x65B9;&#x5EAB;" loading="lazy" width="1100" height="636" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Screenshot-2020-11-24-221314-1.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Screenshot-2020-11-24-221314-1.png 1000w, https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-221314-1.png 1100w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-222213-1.png" class="kg-image" alt="&#x5728;Java&#x5C08;&#x6848;&#x4E2D;&#x624B;&#x52D5;&#x5C0E;&#x5165;Kotlin&#x958B;&#x767C;&#x7684;&#x4E09;&#x65B9;&#x5EAB;" loading="lazy" width="973" height="444" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Screenshot-2020-11-24-222213-1.png 600w, https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-222213-1.png 973w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><pre><code class="language-bash">include &apos;:circledpad&apos;  
</code></pre>
<pre><code class="language-bash">implementation project(&apos;:circledpad&apos;)  
</code></pre>
<pre><code class="language-bash">ext.kotlin_version = &quot;1.3.72&quot;
classpath &quot;org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version&quot;
classpath &apos;com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4&apos;
classpath &apos;com.github.dcendents:android-maven-gradle-plugin:2.1&apos;
</code></pre>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-222447-1.png" class="kg-image" alt="&#x5728;Java&#x5C08;&#x6848;&#x4E2D;&#x624B;&#x52D5;&#x5C0E;&#x5165;Kotlin&#x958B;&#x767C;&#x7684;&#x4E09;&#x65B9;&#x5EAB;" loading="lazy" width="310" height="189"><figcaption>&#x624B;&#x52D5;&#x5C0E;&#x5165;&#x5B8C;&#x6210;</figcaption></figure><p></p><p> &#x63A5;&#x4E0B;&#x4F86;&#x8981;&#x5728;&#x5C08;&#x6848;&#x4E2D;&#x4F7F;&#x7528;&#x5B83;</p><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-222807.png" class="kg-image" alt="&#x5728;Java&#x5C08;&#x6848;&#x4E2D;&#x624B;&#x52D5;&#x5C0E;&#x5165;Kotlin&#x958B;&#x767C;&#x7684;&#x4E09;&#x65B9;&#x5EAB;" loading="lazy" width="758" height="457" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Screenshot-2020-11-24-222807.png 600w, https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-222807.png 758w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><pre><code class="language-bash">    &lt;io.github.kaczmarek.circledpad.CircleDPad
        android:id=&quot;@+id/cdp&quot;
        android:layout_width=&quot;300dp&quot;
        android:layout_height=&quot;300dp&quot;
        app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
        app:layout_constraintLeft_toLeftOf=&quot;parent&quot;
        app:layout_constraintRight_toRightOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;parent&quot; /&gt;
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-java">import androidx.appcompat.app.AppCompatActivity;
import io.github.kaczmarek.circledpad.CircleDPad;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements CircleDPad.OnClickCircleDPadListener {

    private CircleDPad mDPadButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDPadButton = findViewById(R.id.cdp);
        mDPadButton.setListener(this);
    }

    @Override
    public void onClickButton(int button) {
        switch (button) {
            case CircleDPad.TOP_BUTTON:
                Toast.makeText(getApplicationContext(),&quot;TOP_BUTTON_Click&quot;,Toast.LENGTH_SHORT).show();
                break;
            case CircleDPad.BOTTOM_BUTTON:
                Toast.makeText(getApplicationContext(),&quot;BOTTOM_BUTTON_Click&quot;,Toast.LENGTH_SHORT).show();
                break;
            case CircleDPad.LEFT_BUTTON:
                Toast.makeText(getApplicationContext(),&quot;LEFT_BUTTON_Click&quot;,Toast.LENGTH_SHORT).show();
                break;
            case CircleDPad.RIGHT_BUTTON:
                Toast.makeText(getApplicationContext(),&quot;RIGHT_BUTTON_Click&quot;,Toast.LENGTH_SHORT).show();
                break;
            case CircleDPad.CENTER_BUTTON:
                Toast.makeText(getApplicationContext(),&quot;CENTER_BUTTON_Click&quot;,Toast.LENGTH_SHORT).show();
                break;
        }
    }
}
</code></pre>
<!--kg-card-end: markdown--><p> &#x81F3;&#x6B64;&#xFF0C;&#x5DF2;&#x5B8C;&#x6210;&#x4F7F;&#x7528;&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Screenshot-2020-11-24-224918.png" class="kg-image" alt="&#x5728;Java&#x5C08;&#x6848;&#x4E2D;&#x624B;&#x52D5;&#x5C0E;&#x5165;Kotlin&#x958B;&#x767C;&#x7684;&#x4E09;&#x65B9;&#x5EAB;" loading="lazy" width="379" height="267"><figcaption>&#x5957;&#x4EF6;&#x7684;&#x6E90;&#x78BC;</figcaption></figure><!--kg-card-begin: markdown--><pre><code class="language-kotlin">    interface OnClickCircleDPadListener {
        fun onClickButton(@DPadButton button: Int)
        fun OnReleaseButton(@DPadButton button: Int)  //&#x53EF;&#x4EE5;&#x7531;&#x9019;&#x81EA;&#x5DF1;&#x52A0;&#x958B;&#x4ECB;&#x9762;
    }
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-kotlin">else if (event.action == MotionEvent.ACTION_UP) {
            pressedState.forEachIndexed { index, b -&gt;
                if (b) {
//                    listener?.onClickButton(index)
                    listener?.OnReleaseButton(index) //&#x5728;&#x81EA;&#x5DF1;&#x908F;&#x8F2F;&#x9700;&#x8981;&#x7684;&#x5730;&#x65B9;&#x901A;&#x77E5;&#x51FA;&#x53BB;
                }
            }
            updatePressedState()
        }
</code></pre>
<!--kg-card-end: markdown--><p> &#x6574;&#x500B;&#x904E;&#x7A0B;&#x4E0D;&#x81F3;&#x65BC;&#x5F88;&#x8907;&#x96DC;&#xFF0C;&#x4E0D;&#x904E;&#x76F8;&#x4FE1;&#x5C0D;&#x525B;&#x63A5;&#x89F8;&#x7684;&#x4EBA;&#x6703;&#x6709;&#x5E6B;&#x52A9;~ </p>]]></content:encoded></item><item><title><![CDATA[Synology 安裝 Docker 與 Hoobs]]></title><description><![CDATA[<p> </p><p> &#x9996;&#x5148;&#x5230;&#x5957;&#x4EF6;&#x7BA1;&#x7406;&#x5B89;&#x88DD;&quot;Docker&quot;&#x5957;&#x4EF6;</p><p> &#x63A5;&#x8457;&#x6253;&#x958B;&#x5F8C;&#xFF0C;&#x5230;&#x5009;&#x5EAB;(Registry)&#x641C;&#x5C0B;&quot;hoobs&quot;&#xFF0C;&#x9EDE;&#x53F3;&#x9375;&#x4E0B;&#x8F09;&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Download.png" class="kg-image" alt loading="lazy" width="2000" height="623" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Hoobs_Image_Download.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Hoobs_Image_Download.png 1000w, https://blog.dsm.mone.one/content/images/size/w1600/2020/11/Hoobs_Image_Download.png 1600w, https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Download.png 2120w" sizes="(min-width: 720px) 720px"><figcaption>&#x901A;&#x5E38;&#x5B98;&#x65B9;image&#x661F;&#x661F;&#x6578;&#x6703;&#x6BD4;&#x8F03;&#x591A;&#x3002;</figcaption></figure><p> &#x7B49;</p>]]></description><link>https://blog.dsm.mone.one/synology-an-zhuang/</link><guid isPermaLink="false">645fd03ad4bc280001d86be5</guid><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Tue, 10 Nov 2020 09:17:23 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2020/11/DSM_Docker_Hoobs.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2020/11/DSM_Docker_Hoobs.png" alt="Synology &#x5B89;&#x88DD; Docker &#x8207; Hoobs"><p> </p><p> &#x9996;&#x5148;&#x5230;&#x5957;&#x4EF6;&#x7BA1;&#x7406;&#x5B89;&#x88DD;&quot;Docker&quot;&#x5957;&#x4EF6;</p><p> &#x63A5;&#x8457;&#x6253;&#x958B;&#x5F8C;&#xFF0C;&#x5230;&#x5009;&#x5EAB;(Registry)&#x641C;&#x5C0B;&quot;hoobs&quot;&#xFF0C;&#x9EDE;&#x53F3;&#x9375;&#x4E0B;&#x8F09;&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Download.png" class="kg-image" alt="Synology &#x5B89;&#x88DD; Docker &#x8207; Hoobs" loading="lazy" width="2000" height="623" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Hoobs_Image_Download.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Hoobs_Image_Download.png 1000w, https://blog.dsm.mone.one/content/images/size/w1600/2020/11/Hoobs_Image_Download.png 1600w, https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Download.png 2120w" sizes="(min-width: 720px) 720px"><figcaption>&#x901A;&#x5E38;&#x5B98;&#x65B9;image&#x661F;&#x661F;&#x6578;&#x6703;&#x6BD4;&#x8F03;&#x591A;&#x3002;</figcaption></figure><p> &#x7B49;&#x5F85;&#x4E0B;&#x8F09;&#x5B8C;&#x6210;&#x5F8C;&#xFF0C;&#x555F;&#x52D5;&#x5B83;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Launch.png" class="kg-image" alt="Synology &#x5B89;&#x88DD; Docker &#x8207; Hoobs" loading="lazy" width="1994" height="660" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Hoobs_Image_Launch.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Hoobs_Image_Launch.png 1000w, https://blog.dsm.mone.one/content/images/size/w1600/2020/11/Hoobs_Image_Launch.png 1600w, https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Launch.png 1994w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Create_01.png" class="kg-image" alt="Synology &#x5B89;&#x88DD; Docker &#x8207; Hoobs" loading="lazy" width="1336" height="950" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Hoobs_Image_Create_01.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Hoobs_Image_Create_01.png 1000w, https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Create_01.png 1336w" sizes="(min-width: 720px) 720px"><figcaption>&#x540D;&#x7A31;&#x96A8;&#x610F;&#xFF0C;&#x7CFB;&#x7D71;&#x8CC7;&#x6E90;&#x5206;&#x914D;&#x4E0D;&#x7528;&#x592A;&#x9AD8;&#x3002;</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Create_03.png" class="kg-image" alt="Synology &#x5B89;&#x88DD; Docker &#x8207; Hoobs" loading="lazy" width="1208" height="950" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Hoobs_Image_Create_03.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Hoobs_Image_Create_03.png 1000w, https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Create_03.png 1208w" sizes="(min-width: 720px) 720px"><figcaption>Port&#x6620;&#x5C04;&#x81F3;80&#x3002;</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Create_04.png" class="kg-image" alt="Synology &#x5B89;&#x88DD; Docker &#x8207; Hoobs" loading="lazy" width="1336" height="950" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Hoobs_Image_Create_04.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Hoobs_Image_Create_04.png 1000w, https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Create_04.png 1336w" sizes="(min-width: 720px) 720px"><figcaption>&#x63A5;&#x8457;&#x4E0B;&#x4E00;&#x6B65;&#x3002;</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Create_05.png" class="kg-image" alt="Synology &#x5B89;&#x88DD; Docker &#x8207; Hoobs" loading="lazy" width="1336" height="950" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Hoobs_Image_Create_05.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Hoobs_Image_Create_05.png 1000w, https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Create_05.png 1336w" sizes="(min-width: 720px) 720px"><figcaption>&#x5957;&#x7528;&#x3002;</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Create_06.png" class="kg-image" alt="Synology &#x5B89;&#x88DD; Docker &#x8207; Hoobs" loading="lazy" width="1734" height="950" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Hoobs_Image_Create_06.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Hoobs_Image_Create_06.png 1000w, https://blog.dsm.mone.one/content/images/size/w1600/2020/11/Hoobs_Image_Create_06.png 1600w, https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Image_Create_06.png 1734w" sizes="(min-width: 720px) 720px"><figcaption>Hoobs&#x5BB9;&#x5668;&#x5DF2;&#x7D93;&#x8DD1;&#x8D77;&#x4F86;&#x4E86;&#x3002;</figcaption></figure><p> &#x63A5;&#x4E0B;&#x4F86;&#x8981;&#x5230;&#x81EA;&#x5DF1;&#x8DEF;&#x7531;&#x5668;&#x7BA1;&#x7406;&#x4ECB;&#x9762;&#x505A;&quot;IP &#x8F49;&#x767C;(<em>IP forwarding</em>)&quot;&#xFF0C;&#x6253;&#x958B;&#x4F60;&#x8981;&#x6620;&#x5C04;&#x7684;Port&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Setup.png" class="kg-image" alt="Synology &#x5B89;&#x88DD; Docker &#x8207; Hoobs" loading="lazy" width="815" height="833" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Hoobs_Setup.png 600w, https://blog.dsm.mone.one/content/images/2020/11/Hoobs_Setup.png 815w" sizes="(min-width: 720px) 720px"><figcaption>&#x7DB2;&#x5740;&#x5217;:http://{DSM IP or Domain name}:{port}&#x3002;</figcaption></figure><p> &#x5927;&#x529F;&#x544A;&#x6210;</p><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/11/Screen-Shot-2020-11-10-at-5.04.20-PM.png" class="kg-image" alt="Synology &#x5B89;&#x88DD; Docker &#x8207; Hoobs" loading="lazy" width="1334" height="732" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/Screen-Shot-2020-11-10-at-5.04.20-PM.png 600w, https://blog.dsm.mone.one/content/images/size/w1000/2020/11/Screen-Shot-2020-11-10-at-5.04.20-PM.png 1000w, https://blog.dsm.mone.one/content/images/2020/11/Screen-Shot-2020-11-10-at-5.04.20-PM.png 1334w" sizes="(min-width: 720px) 720px"></figure><p>END.</p>]]></content:encoded></item><item><title><![CDATA[GooglePlay:將應用程式轉移至其他開發人員帳戶]]></title><description><![CDATA[<p> &#x4E0B;&#x6587;&#x7C21;&#x7A31;&#xFF1A;&#x8F49;&#x51FA;&#x5E33;&#x865F; =&gt; A&#x5E33;&#x865F;&#xFF0C;&#x63A5;&#x6536;&#x5E33;&#x865F; =&gt; B&#x5E33;&#x865F;</p><p>&#x9996;&#x5148;&#x662F;&#x5148;&#x767B;&#x5165;B&#x5E33;&#x865F;&#xFF0C;&#x9032;&#x5165;Google&#x5E33;&#x865F;&#x7684;&#x4ED8;&#x6B3E;&#x4E2D;&#x5FC3;(<a href="https://payments.google.com/payments/home">Payment</a>) -&gt; &#x6D3B;&#x52D5; -&gt; &#x67E5;</p>]]></description><link>https://blog.dsm.mone.one/googleplay-jiang-ying-yong-cheng-shi-zhuan-yi-zhi-qi-ta-kai-fa-ren-yuan-zhang-hu/</link><guid isPermaLink="false">645fd03ad4bc280001d86be4</guid><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Mon, 09 Nov 2020 08:32:11 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2020/11/Android.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2020/11/Android.png" alt="GooglePlay:&#x5C07;&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x81F3;&#x5176;&#x4ED6;&#x958B;&#x767C;&#x4EBA;&#x54E1;&#x5E33;&#x6236;"><p> &#x4E0B;&#x6587;&#x7C21;&#x7A31;&#xFF1A;&#x8F49;&#x51FA;&#x5E33;&#x865F; =&gt; A&#x5E33;&#x865F;&#xFF0C;&#x63A5;&#x6536;&#x5E33;&#x865F; =&gt; B&#x5E33;&#x865F;</p><p>&#x9996;&#x5148;&#x662F;&#x5148;&#x767B;&#x5165;B&#x5E33;&#x865F;&#xFF0C;&#x9032;&#x5165;Google&#x5E33;&#x865F;&#x7684;&#x4ED8;&#x6B3E;&#x4E2D;&#x5FC3;(<a href="https://payments.google.com/payments/home">Payment</a>) -&gt; &#x6D3B;&#x52D5; -&gt; &#x67E5;&#x8A62;&#x4EA4;&#x6613;ID&#xFF0C;&#x4E26;&#x8A18;&#x4E0B;&#x4F86;&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/3-1.png" class="kg-image" alt="GooglePlay:&#x5C07;&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x81F3;&#x5176;&#x4ED6;&#x958B;&#x767C;&#x4EBA;&#x54E1;&#x5E33;&#x6236;" loading="lazy" width="906" height="510" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/3-1.png 600w, https://blog.dsm.mone.one/content/images/2020/11/3-1.png 906w" sizes="(min-width: 720px) 720px"><figcaption>&#x67E5;&#x8A62;&#x4EA4;&#x6613;ID</figcaption></figure><p> &#x63A5;&#x8457;&#x767B;&#x5165;A&#x5E33;&#x865F;&#xFF0C;&#x9032;&#x5165;<a href="https://support.google.com/googleplay/android-developer/answer/6230247?visit_id=637404953664156449-1668929024&amp;rd=1">&#x7BA1;&#x7406;&#x4E2D;&#x5FC3;</a>&#xFF0C;<a href="https://play.google.com/console/developers/app-transfer" rel="noopener">&#x63D0;&#x4EA4;&#x8F49;&#x79FB;&#x8981;&#x6C42;</a>&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/2.png" class="kg-image" alt="GooglePlay:&#x5C07;&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x81F3;&#x5176;&#x4ED6;&#x958B;&#x767C;&#x4EBA;&#x54E1;&#x5E33;&#x6236;" loading="lazy" width="906" height="822" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/2.png 600w, https://blog.dsm.mone.one/content/images/2020/11/2.png 906w" sizes="(min-width: 720px) 720px"><figcaption>&#x63D0;&#x4EA4;&#x8F49;&#x79FB;&#x8981;&#x6C42;</figcaption></figure><p> &#xA0;&#x586B;&#x5BEB;&#x597D;&#x8CC7;&#x6599;&#xFF0C;&#x65B0;&#x589E;&#x8981;&#x8F49;&#x79FB;&#x7684;App&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/4.png" class="kg-image" alt="GooglePlay:&#x5C07;&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x81F3;&#x5176;&#x4ED6;&#x958B;&#x767C;&#x4EBA;&#x54E1;&#x5E33;&#x6236;" loading="lazy" width="906" height="510" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/4.png 600w, https://blog.dsm.mone.one/content/images/2020/11/4.png 906w" sizes="(min-width: 720px) 720px"><figcaption>&#x586B;&#x5BEB;&#x8CC7;&#x6599;&#x5F8C;&#x79FB;&#x8F49;</figcaption></figure><p></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.dsm.mone.one/content/images/2020/11/5.png" class="kg-image" alt="GooglePlay:&#x5C07;&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x81F3;&#x5176;&#x4ED6;&#x958B;&#x767C;&#x4EBA;&#x54E1;&#x5E33;&#x6236;" loading="lazy" width="906" height="510" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/11/5.png 600w, https://blog.dsm.mone.one/content/images/2020/11/5.png 906w" sizes="(min-width: 720px) 720px"><figcaption>&#x79FB;&#x4EA4;&#x9032;&#x5EA6;&#x72C0;&#x614B;</figcaption></figure>]]></content:encoded></item><item><title><![CDATA[將您的iOS應用程式轉移到另一個開發者帳戶(2020)]]></title><description><![CDATA[<p>Apple Developer</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://developer.apple.com/membercenter"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Sign In - Apple</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://appleid.cdn-apple.com/daw/IDMSWebAuth/static/07Sep2020/images/favicon.ico" alt><span class="kg-bookmark-author">Apple</span></div></div></a></figure><p> &#x767B;&#x5165;&#x958B;&#x767C;&#x8005;&#x5E33;&#x865F;B(&#x8981;&#x63A5;&#x6536;App&#x7684;&#x5E33;&#x865F;)</p><p> &#x767B;&#x5165;&#x5E33;&#x865F;&#x5F8C;&#xFF0C;&#x9032;&#x5165;Membership&#x3002;</p><p> &#x8A18;&#x4E0B;&#x5E33;&#x865F;B &#x7684;TEAM ID</p><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/10/Artboard-4.png" class="kg-image" alt loading="lazy" width="966" height="575" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/10/Artboard-4.png 600w, https://blog.dsm.mone.one/content/images/2020/10/Artboard-4.png 966w" sizes="(min-width: 720px) 720px"></figure><p> &#x767B;&#x5165;&#x5E33;&#x865F;A</p><p> &#x767B;&#x5165;&#x5E33;&#x865F;&#x5F8C;</p>]]></description><link>https://blog.dsm.mone.one/jiang-nin-de-iosying-yong-cheng-shi-zhuan-yi-dao-ling-yi-ge-kai-fa-zhe-zhang-hu/</link><guid isPermaLink="false">645fd03ad4bc280001d86be2</guid><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Fri, 23 Oct 2020 09:38:20 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2020/11/iOS.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2020/11/iOS.png" alt="&#x5C07;&#x60A8;&#x7684;iOS&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x5230;&#x53E6;&#x4E00;&#x500B;&#x958B;&#x767C;&#x8005;&#x5E33;&#x6236;(2020)"><p>Apple Developer</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://developer.apple.com/membercenter"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Sign In - Apple</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://appleid.cdn-apple.com/daw/IDMSWebAuth/static/07Sep2020/images/favicon.ico" alt="&#x5C07;&#x60A8;&#x7684;iOS&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x5230;&#x53E6;&#x4E00;&#x500B;&#x958B;&#x767C;&#x8005;&#x5E33;&#x6236;(2020)"><span class="kg-bookmark-author">Apple</span></div></div></a></figure><p> &#x767B;&#x5165;&#x958B;&#x767C;&#x8005;&#x5E33;&#x865F;B(&#x8981;&#x63A5;&#x6536;App&#x7684;&#x5E33;&#x865F;)</p><p> &#x767B;&#x5165;&#x5E33;&#x865F;&#x5F8C;&#xFF0C;&#x9032;&#x5165;Membership&#x3002;</p><p> &#x8A18;&#x4E0B;&#x5E33;&#x865F;B &#x7684;TEAM ID</p><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/10/Artboard-4.png" class="kg-image" alt="&#x5C07;&#x60A8;&#x7684;iOS&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x5230;&#x53E6;&#x4E00;&#x500B;&#x958B;&#x767C;&#x8005;&#x5E33;&#x6236;(2020)" loading="lazy" width="966" height="575" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/10/Artboard-4.png 600w, https://blog.dsm.mone.one/content/images/2020/10/Artboard-4.png 966w" sizes="(min-width: 720px) 720px"></figure><p> &#x767B;&#x5165;&#x5E33;&#x865F;A</p><p> &#x767B;&#x5165;&#x5E33;&#x865F;&#x5F8C;&#xFF0C;&#x9032;&#x5165;App Store Connect&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-21-at-2.52.15-PM.png" class="kg-image" alt="&#x5C07;&#x60A8;&#x7684;iOS&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x5230;&#x53E6;&#x4E00;&#x500B;&#x958B;&#x767C;&#x8005;&#x5E33;&#x6236;(2020)" loading="lazy" width="954" height="592" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/10/Screen-Shot-2020-10-21-at-2.52.15-PM.png 600w, https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-21-at-2.52.15-PM.png 954w" sizes="(min-width: 720px) 720px"></figure><p> &#x9EDE;&#x9032;&#x53BB;&#x8981;&#x8F49;&#x51FA;&#x53BB;&#x7684;App</p><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/10/Artboard-5.png" class="kg-image" alt="&#x5C07;&#x60A8;&#x7684;iOS&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x5230;&#x53E6;&#x4E00;&#x500B;&#x958B;&#x767C;&#x8005;&#x5E33;&#x6236;(2020)" loading="lazy" width="966" height="488" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/10/Artboard-5.png 600w, https://blog.dsm.mone.one/content/images/2020/10/Artboard-5.png 966w" sizes="(min-width: 720px) 720px"></figure><p> &#x9032;&#x5165;App information&#xFF0C;&#x9EDE;Transfer App&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/10/Artboard-6.png" class="kg-image" alt="&#x5C07;&#x60A8;&#x7684;iOS&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x5230;&#x53E6;&#x4E00;&#x500B;&#x958B;&#x767C;&#x8005;&#x5E33;&#x6236;(2020)" loading="lazy" width="966" height="539" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/10/Artboard-6.png 600w, https://blog.dsm.mone.one/content/images/2020/10/Artboard-6.png 966w" sizes="(min-width: 720px) 720px"></figure><p> 1.&#x540C;&#x610F;&#x689D;&#x6B3E;,&#x54EA;&#x88E1;&#x4E0D;&#x5408;&#x683C;&#x56DE;&#x53BB;&#x6539;</p><p> 2.&#x586B;&#x5BEB;&#x5E33;&#x865F;B&#x7684;appleID&#x4EE5;&#x53CA;TeamID</p><p> 3.&#x540C;&#x610F;&#x8F49;&#x8B93;</p><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/10/Artboard-7.png" class="kg-image" alt="&#x5C07;&#x60A8;&#x7684;iOS&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x5230;&#x53E6;&#x4E00;&#x500B;&#x958B;&#x767C;&#x8005;&#x5E33;&#x6236;(2020)" loading="lazy" width="966" height="588" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/10/Artboard-7.png 600w, https://blog.dsm.mone.one/content/images/2020/10/Artboard-7.png 966w" sizes="(min-width: 720px) 720px"></figure><p> &#xA0;A&#x5E33;&#x865F;&#x56DE;&#x5230;App Store Connect&#xFF0C;&#x9EDE;Agreements, Tax, and Banking&#xFF0C;&#x53EF;&#x4EE5;&#x53D6;&#x6D88;&#x8F49;&#x8B93;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.dsm.mone.one/content/images/2020/10/Artboard-8.png" class="kg-image" alt="&#x5C07;&#x60A8;&#x7684;iOS&#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8F49;&#x79FB;&#x5230;&#x53E6;&#x4E00;&#x500B;&#x958B;&#x767C;&#x8005;&#x5E33;&#x6236;(2020)" loading="lazy" width="708" height="540" srcset="https://blog.dsm.mone.one/content/images/size/w600/2020/10/Artboard-8.png 600w, https://blog.dsm.mone.one/content/images/2020/10/Artboard-8.png 708w"></figure><p> &#x6539;&#x4EE5;B&#x5E33;&#x865F;&#x5230;App Store Connect&#xFF0C;&#x9EDE;Agreements, Tax, and Banking&#xFF0C;&#x5373;&#x53EF;&#x57F7;&#x884C;&#x63A5;&#x53D7;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[Flutter 打包帶簽章的Apk]]></title><description><![CDATA[<p> &#x6211;&#x662F;&#x4F7F;&#x7528;VSCode IDE&#x4F86;&#x958B;&#x767C;Flutter&#x7684;&#xFF0C;&#x975E;&#x5E38;&#x63A8;&#x85A6;&#xFF0C;&#x6211;&#x4E00;&#x958B;&#x59CB;&#x4E5F;&#x7528;&#x904E;Android Studio&#xFF0C;&#x4F46;VSCode&#x8F15;&#x5DE7;&#x4E86;&#x8A31;&#x591A;&#xFF0C;&#x53EF;&#x73A9;&#x6027;&#x4E5F;&#x6BD4;&#x8F03;&#x591A;&#x3002;</p><!--kg-card-begin: markdown--><p>&#x9996;&#x5148;&#x65B0;&#x589E;&#x4E00;&#x500B;&#x6A94;</p>]]></description><link>https://blog.dsm.mone.one/flutter-da-bao-dai-qian-zhang-de/</link><guid isPermaLink="false">645fd03ad4bc280001d86be1</guid><category><![CDATA[Flutter]]></category><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Fri, 16 Oct 2020 05:19:34 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2020/11/Artboard.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2020/11/Artboard.png" alt="Flutter &#x6253;&#x5305;&#x5E36;&#x7C3D;&#x7AE0;&#x7684;Apk"><p> &#x6211;&#x662F;&#x4F7F;&#x7528;VSCode IDE&#x4F86;&#x958B;&#x767C;Flutter&#x7684;&#xFF0C;&#x975E;&#x5E38;&#x63A8;&#x85A6;&#xFF0C;&#x6211;&#x4E00;&#x958B;&#x59CB;&#x4E5F;&#x7528;&#x904E;Android Studio&#xFF0C;&#x4F46;VSCode&#x8F15;&#x5DE7;&#x4E86;&#x8A31;&#x591A;&#xFF0C;&#x53EF;&#x73A9;&#x6027;&#x4E5F;&#x6BD4;&#x8F03;&#x591A;&#x3002;</p><!--kg-card-begin: markdown--><p>&#x9996;&#x5148;&#x65B0;&#x589E;&#x4E00;&#x500B;&#x6A94;&#x6848;&#xFF1A;key.properties<br>
&#x8DEF;&#x5F91;&#x5982;&#x4E0B;<br>
<img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-11.34.17-AM.png" alt="Flutter &#x6253;&#x5305;&#x5E36;&#x7C3D;&#x7AE0;&#x7684;Apk" loading="lazy"></p>
<p><a href="https://blog.dsm.mone.one/zhi-zuo-keystoreqian-zhang/">&#x88FD;&#x4F5C;KeyStore&#x7C3D;&#x7AE0;</a></p>
<p>&#x586B;&#x5BEB;&#x5167;&#x5BB9;</p>
<pre><code class="language-bash">storePassword=
keyPassword=
keyAlias=
storeFile=
</code></pre>
<p><img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-11.53.21-AM.png" alt="Flutter &#x6253;&#x5305;&#x5E36;&#x7C3D;&#x7AE0;&#x7684;Apk" loading="lazy"></p>
<p>&#x4FEE;&#x6539;gradle<br>
<em>Part1</em></p>
<pre><code class="language-bash">def keystorePropertiesFile = rootProject.file(&quot;key.properties&quot;)
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
</code></pre>
<p><em>Part2</em></p>
<pre><code class="language-bash">signingConfigs {
        release {
            keyAlias keystoreProperties[&apos;keyAlias&apos;]
            keyPassword keystoreProperties[&apos;keyPassword&apos;]
            storeFile file(keystoreProperties[&apos;storeFile&apos;])
            storePassword keystoreProperties[&apos;storePassword&apos;]
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            // signingConfig null
        }
    }
</code></pre>
<p>Ex.<br>
<img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-12.06.26-PM.png" alt="Flutter &#x6253;&#x5305;&#x5E36;&#x7C3D;&#x7AE0;&#x7684;Apk" loading="lazy"></p>
<p>&#x57F7;&#x884C;&#x6253;&#x5305;apk</p>
<pre><code class="language-bash">flutter build apk
</code></pre>
<p><img src="https://blog.dsm.mone.one/content/images/2020/10/Flutter----APK-1.png" alt="Flutter &#x6253;&#x5305;&#x5E36;&#x7C3D;&#x7AE0;&#x7684;Apk" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[製作KeyStore簽章]]></title><description><![CDATA[<p><strong> &#x4F7F;&#x7528;Android Studio</strong></p><p>		&#x9019;&#x662F;&#x6700;&#x7C21;&#x55AE;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;AS&#x63D0;&#x4F9B;&#x53EF;&#x8996;&#x5316;&#x5DE5;&#x5177;&#xFF0C;&#x5F88;&#x7C21;&#x55AE;&#x5C31;&#x53EF;&#x4EE5;&#x88FD;&#x4F5C;&#x5B8C;&#x6210;&#xFF0C;&#x7F3A;&#x9EDE;&#x662F;&#x8981;&#x6253;&#x958B;&#x81C3;&#x816B;&#x7684;AS&#x624D;&#x80FD;&#x64CD;&#x4F5C;&#xFF0C;&#x4E0D;&#x662F;</p>]]></description><link>https://blog.dsm.mone.one/zhi-zuo-keystoreqian-zhang/</link><guid isPermaLink="false">645fd03ad4bc280001d86be0</guid><dc:creator><![CDATA[Marcel]]></dc:creator><pubDate>Fri, 16 Oct 2020 03:23:07 GMT</pubDate><media:content url="https://blog.dsm.mone.one/content/images/2020/10/images.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.dsm.mone.one/content/images/2020/10/images.png" alt="&#x88FD;&#x4F5C;KeyStore&#x7C3D;&#x7AE0;"><p><strong> &#x4F7F;&#x7528;Android Studio</strong></p><p>		&#x9019;&#x662F;&#x6700;&#x7C21;&#x55AE;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;AS&#x63D0;&#x4F9B;&#x53EF;&#x8996;&#x5316;&#x5DE5;&#x5177;&#xFF0C;&#x5F88;&#x7C21;&#x55AE;&#x5C31;&#x53EF;&#x4EE5;&#x88FD;&#x4F5C;&#x5B8C;&#x6210;&#xFF0C;&#x7F3A;&#x9EDE;&#x662F;&#x8981;&#x6253;&#x958B;&#x81C3;&#x816B;&#x7684;AS&#x624D;&#x80FD;&#x64CD;&#x4F5C;&#xFF0C;&#x4E0D;&#x662F;&#x5F88;&#x65B9;&#x4FBF;&#x3002;</p><!--kg-card-begin: markdown--><p>&#x4F9D;&#x5E8F;&#x64CD;&#x4F5C;<br>
<img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-10.27.29-AM.png" alt="&#x88FD;&#x4F5C;KeyStore&#x7C3D;&#x7AE0;" loading="lazy"><br>
<img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-10.27.53-AM.png" alt="&#x88FD;&#x4F5C;KeyStore&#x7C3D;&#x7AE0;" loading="lazy"><br>
<img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-10.28.10-AM.png" alt="&#x88FD;&#x4F5C;KeyStore&#x7C3D;&#x7AE0;" loading="lazy"><br>
<img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-10.31.58-AM.png" alt="&#x88FD;&#x4F5C;KeyStore&#x7C3D;&#x7AE0;" loading="lazy"></p>
<!--kg-card-end: markdown--><p><strong> &#x4F7F;&#x7528;Terminal&#x7D42;&#x7AEF;&#x6A5F;</strong></p><!--kg-card-begin: markdown--><p>&#x6AA2;&#x67E5;&#x74B0;&#x5883;</p>
<pre><code class="language-bash">	which keytool
	java -version
</code></pre>
<p><img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-10.53.39-AM.png" alt="&#x88FD;&#x4F5C;KeyStore&#x7C3D;&#x7AE0;" loading="lazy"></p>
<p>&#x82E5;&#x63D0;&#x793A;&#x6C92;&#x6709;JDK&#xFF0C;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4F7F;&#x7528;Android Studio&#x5167;&#x7684;</p>
<pre><code class="language-bash">	vi .zshrc
	export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/
</code></pre>
<p><img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-10.58.59-AM.png" alt="&#x88FD;&#x4F5C;KeyStore&#x7C3D;&#x7AE0;" loading="lazy"><br>
<img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-10.59.32-AM.png" alt="&#x88FD;&#x4F5C;KeyStore&#x7C3D;&#x7AE0;" loading="lazy"></p>
<p>&#x7522;&#x751F;&#x7C3D;&#x7AE0;</p>
<pre><code class="language-bash">	keytool -v -genkey -v -keystore {file-name} -alias {alias-name} -keyalg RSA -validity 10000
</code></pre>
<p>Ex.</p>
<pre><code class="language-bash">	keytool -v -genkey -v -keystore my_keystore -alias myname -keyalg RSA -validity 10000
</code></pre>
<p><img src="https://blog.dsm.mone.one/content/images/2020/10/Screen-Shot-2020-10-16-at-11.21.30-AM.png" alt="&#x88FD;&#x4F5C;KeyStore&#x7C3D;&#x7AE0;" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>