要說整個 2023 年最紅的話題之一,ChatGPT 絕對不會缺席。於 2022 年 11 月橫空出世,在短時間內席捲全世界,並造就直到今天仍在持續的 AI 浪潮。過去所謂的人工智慧,大多都是透過條件式判斷,其實只是有限的自動回覆程式而已;但 ChatGPT 是真的能分析使用者輸入的內容,而且可以根據上下文自己判斷,並給出具建設性的回覆。然而除了單純文字聊天以外,後來有人發現它其實對工程師的程式撰寫也非常有幫助!
我算是 ChatGPT 剛發布時就有關注,也看了不少關於 GPT-3.5 的文章跟影片;不過因為 OpenAI 當時還是個名不見經傳的公司,註冊帳號雖然免費但還要手機驗證有點麻煩,所以一直處於觀望的狀態。後來 GPT-4 問世,更新資料並提高回覆內容的正確性,可是需要花錢訂閱~身為免費仔當然還是繼續觀望。但在微軟爸爸入股後,把 ChatGPT 整合到 Bing 搜尋,偶然看到某個影片分享 Skype 的 Bing 帳號也有導入 GPT-4 模型,重點是幾乎沒有限制而且完全免費!這才讓我開始真正頻繁的使用聊天機器人,來輔助我寫程式。其中一個實際案例是在我寫 Laravel 的 queue 相關程式時,原本苦惱要怎麼在處理 queue 的前後加入動作,後來問了 Bing 才發現原來新版的 Laravel 有提供 queue 的 middleware!使用上跟一般的 middleware 一樣,但是處理邏輯可以拆到另外一個 class 降低耦合並提高重用性。自己思考時絕對想不到的做法,有了聊天機器人相當於多了一位 mentor 可以提問討論。
2023 年 11 月初,在 OpenAI 的開發者大會上,創辦人 Sam Altman 發表了新的 GPT-4 Turbo 模型,擁有更快的回應、更正確的回覆以及更長的上下文,同時也公布 GTPs:任何人都可以客製自己的 ChatGPT 聊天機器人,並分享給其他人。預告會開放官方的商店,讓使用者能更統一更有效率的搜尋適合的聊天機器人。然而發表會幾天後,OpenAI 因為湧入大量使用者而不得不暫時關閉 ChatGPT Plus 的訂閱,直到今天還沒有開放。上周我不知道被什麼東西打到,突然想要來訂閱 ChatGPT Plus,但也因為服務暫停而被拒於門外...還好網路有人分享了可以繞過阻擋機制直接訂閱;當初我看得原始的連結已不可考,後來在網路上搜尋到類似的文章。使用瀏覽器開發者模式 console 的方式對我來說有用...至少在 12/5 時還有用,在暫停訂閱歧見想要突破防線的人可以試試。
20 美元的訂閱,折合台幣大概是 NT 630 左右,另外還要加上大約 NT 10 的刷卡手續費;順帶一題我是用玉山 Pi 拍錢包信用卡,國外消費應該會有最高 4% 的回饋...雖然是 P 幣但不無小補。回到 ChatGPT Plus,訂閱成功之後我簡單比較了一下免費的 GPT-3.5 與訂閱後的 GPT-4,首先反應速度 3.5 狂勝,幾乎是送出後馬上收到回覆;但也有讓不少使用者詬病的正確性問題。使用 4 回覆速度會比較慢,但這也可能表示它比較有經過思考?(心理作用)然後 4 在使用者要求在網路上搜尋時,會調用 Bing 搜尋查找網頁資料,可以多少突破目前 GPT-4 本身知識庫只到 2023 年 4 月的瓶頸。除此之外,一般正常使用好像沒什麼區別...但就跟「繳了補習班費用後才開始用功」的道理一樣,客家小資心裡當然是要在花錢訂閱後更加榨乾好好利用它囉~(欸不是)以下是幾個我在訂閱後嘗試過,覺得可以讓 ChatGPT Plus 更值得的心得:
GPTs
danielhuang030 發表在 痞客邦 留言(0) 人氣(60)

轉眼間使用 Oracle Cloud Free Tier 當免費仔已經快 2 年,期間相當滿意;目前開 2 台 VM 持續正常運作中。不過 3 月份信箱突然收到一封信,原本以為只是維修通知沒有去理會;後來 3 天後又收到一封。仔細看了一下內容才發現,原來是 Oracle Cloud 要回收閒置 VM 的通知!符合以下 3 個條件中其中之一持續 7 天,就會被列入待回收對象:
- 95% 的時間中 CPU 使用率低於 15%
- 網路使用率低於 15%
- 記憶體使用率低於 15% (僅適用於 ARM 的 VM)
雖然 VM 持續使用中,但因為一台專門做為跳板機,一台用來放 side projects 單純 demo,所以 CPU 使用率以及網路流量都非常低...緊急找了網路上其他前輩的文章,發現這篇文章可以應急一下; Oracle-server-keep-alive-script 比較靈活,使用互動式指令,可以簡單切換啟動或關閉,而且還會自動常駐背景,即使重新啟動 VM 也會自己啟動。然而因為使用簡體中文,所以如果 VM 沒有安裝字型會呈現亂碼~問題不大,單純使用數字選擇也可以動。只是不知道為什麼裝在 side projects 那台 VM 時過不久就會當機...(囧)所以我在那台使用 NeverIdle,簡單使用 go 指令消耗 CPU 資源,但需要自己背景執行,重新啟動 VM 時也要手動重啟。

danielhuang030 發表在 痞客邦 留言(0) 人氣(33)
2023-12-01 Updated: 目前機器人已被蝦皮阻擋,作者也萌生退意,此工具已失效,也感謝過去這段時間作者 wdzeng 提供並持續維護這個工具 ![[分享][已失效] wdzeng/shopee-coins- [分享][已失效] wdzeng/shopee-coins-](//s.pixfs.net/f.pixnet.net/images/emotions/regular_smile.gif)
前陣子在 PTT 省錢版發現有鄉民分享蝦皮自動簽到工具,因為平常就有在貪小便宜收集蝦幣, 如果可以自動化那真是太棒了!後來作者還更神的串接了 Github 的 Actions 服務,只要有 Github 帳號搭配簡單的設定步驟,就能實現每天自動領蝦幣的功能。可惜好景不長...或許是因為太多人使用引發官方關注,不到一個月 repo 就被強制關閉 GG 惹~沒辦法只好回頭去研究 docker 的用法。儘管作者對於 docker 的使用也有詳細步驟說明,但我在實作時還是有踩到一些坑;所以在這裡稍微紀錄一下:
- 環境準備
- 作者提供的簽到執行方式是 docker,所以首先必須自己準備一個已經安裝好 docker 的主機環境
- 自己的電腦當然也可以,但考量到之後會使用排自動執行,雲端空間會比較恰當
- 我是使用去年介紹過的 Oracle Cloud Free Tier,有興趣的人可以參考一下
- Failed to save cookie: EISDIR: illegal operation on a directory
- 發生原因是因為 volume cookie 檔時連結到目錄而不是檔案
- 解決方式是在 volume 之前先建立一個空的文字檔,再執行 docker run
- 排程建立方式
- 作者提供的 docker run command 是一次性的指令,如果想要自動執行,當然就必須倚靠排程
- 在設定 crontab 的過程中,發現 docker run 一直 run 不起來,後來 goolge 後才知道 crontab 在使用 docker 時不需要加 -it 的參數
- 另外 docker run 後的 container 會殘留在列表之中,可以透過指令清除
- 最後我把一連串動作寫成 shell script,透過排程設定每天執行,達成自動化的目的
- shopee-coins-bot.sh
#!/bin/sh # 紀錄現在的時間 now=$(date) echo "$now" # 執行 docker run 蝦皮自動簽到機器人 docker run -v /home/ubuntu/shopee-coins-bot-cookie:/cookie hyperbola/shopee-coins-bot:1 -f -c /cookie # 睡 5 分鐘,通常執行大概會花 1 分鐘左右 sleep 5m # 清除已離開的 docker container docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
- crontab 每天 00:33 執行 shopee-coins-bot.sh,並記錄在 shopee-coins-bot.log
33 0 * * * /bin/bash /home/ubuntu/shopee-coins-bot.sh >> /home/ubuntu/shopee-coins-bot.log
感謝作者 wdzeng 分享這麼實用的工具,也希望有使用的人可以不吝給予專案 star 喔~
danielhuang030 發表在 痞客邦 留言(0) 人氣(1,016)
秉持著客家精神(?),一直以來我的虛擬主機都是用免費方案~(挺)之前是用 AWS 免費方案,但是他給的服務與規格實在太陽春了!EC2 連最基本的 Laravel 跑起來都卡卡 der...(囧)最近一年改用 GCP 免費方案,90 天內提供 300 美金的額度任你用;跑一般的服務絕對是綽綽有餘,到期前基本上用不完。目前已經換了 3 個免洗帳號,用起來沒有什麼缺點,就是時間短了點...儘管透過製作映像檔,轉成 vmdk 匯出的方式,在免洗帳號轉換時,幾乎可以無痛重啟一台一模一樣的 GCE;但是每 3 個月就要重做一次有點兒懶啊~這陣子就在尋覓是不是有更方便的免費方案,突然發現原來 Oracle 也有提供類似的雲端服務:Oracle Cloud,而且也有免費方案,30 天內提供 300 美金的額度,部分服務如果使用指定配置甚至是永久免費聽起來就很威!申請一個免費帳號不會很難,網路上教學資源豐富,我就不特別說明了。我申請的時候需要輸入手機號碼,但是沒有簡訊驗證;目前亞洲區域離我們比較近的地點,只有首爾、東京跟大阪。我自己是選東京,區域選擇後就不能轉換,可以根據自己的喜好(?)決定。另外申請後頁面明明說 15 分鐘就可以啟用,但我等了大概 12 小時才真正完成整個手續;如果有急用在線等可能要考慮一下~
操作介面算是淺顯易懂,主要會用到的大概是「運算 / 執行處理」:相當於 EC2/GCE,還有「網路 / 虛擬雲端網路」:網路防火牆相關設定。永久免費好像可以開 2 台最低規格的執行處理,目前我也只開 2 台所以不清楚。機器的等級是 1CPU, 1GB 記憶體,個人覺得比 AWS, GCP 要好,實際使用起來也有比較順。比較特別的是如果建立時使用 Ubuntu 20.04,裡面的 iptables 有特別的設定,所以即使網路防火牆有開還是會被作業系統自己的 iptables 擋掉,所以要自己手動清除 iptables 原本的設定。
目前用起來感覺還不錯,目前建立的執行處理也都有註明是「永久免費」;只是不確定 30 天後的情況如何,就先再觀察看看囉~
10/2 更新:
目前使用大概快 2 個月,永久免費方案給的蠻大方的,目前我運行 2 台 instance,規格開最低,不過使用起來還蠻順暢的。其中一台是用來做 SSH Tunnel,上班日都會連回家裡的 NAS 聽音樂;原本有點擔心流量爆表,但是目前為止還沒被收過錢!另外還給了一組固定 IP,我覺得整個就是佛心來著的~非常推薦拿來架一些小型 Side Project 或是個人使用的服務。感恩 Oracle,讚嘆 Oracle!
danielhuang030 發表在 痞客邦 留言(0) 人氣(383)
這幾天收到 Let's encrypt 的提醒網域認證即將過期的信件,覺得奇怪我不是有設定 crontab 自動更新嗎?後來搜尋了一下才發現,原來 Certbot 預設的 renew 在萬用字元 (wildcard) 的域名會失敗。因為我有透過 Cloudflare 做 DNS 管理,網路上建議透過外掛 certbot-dns-cloudflare 更新,以下是設定方式:
- 先到 Cloudflare > 右上角我的設定檔 > API Token > Global API Key > 檢視 取得 token

- 進入主機
-
# 建立目錄與檔案 sudo mkdir ~/certbot sudo vi ~/certbot/cloudflare.ini
dns_cloudflare_email = "Cloudflare 的帳號" dns_cloudflare_api_key = "Global API Key"
# 修改目錄與檔案權限 sudo chmod 0700 ~/certbot sudo chmod 0400 ~/certbot/cloudflare.ini
# 安裝前需要同意 certbot 使用 root 權限 sudo snap set certbot trust-plugin-with-root=ok # 安裝 certbot-dns-cloudflare sudo snap install certbot-dns-cloudflare
# 重新認證域名 example.com, *.example.com 請改為你的域名 sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/certbot/cloudflare.ini -d "example.com" -d "*.example.com" --preferred-challenges dns-01
不過這時我才發現,使用免費域名(Freenom)的認證仍會失敗,因為無法透過 API 自動修改 Cloudflare DNS 設定...(囧)好吧,那就只能手動重新認證域名
# 手動認證域名,cloudflare 新增 TXT 訊息,example.ga, *.example.ga 請改為你的域名 sudo certbot certonly --preferred-challenges dns --manual -d "example.ga" -d "*.example.ga" --server https://acme-v02.api.letsencrypt.org/directory # 確認 TXT 是否生效 nslookup -type=txt _acme-challenge.example.ga # 成功通過認證後重啟 nginx sudo service nginx restart # 確認認證 sudo certbot certificates
總算是延期成功,沒想到萬用字元域名更新竟然需要另外特別處理,當免費仔還不給用 API!(怒)要繼續當下去只好勤奮一點,每三個月自己手動認證一次囉~其實也不會很麻煩啦!
danielhuang030 發表在 痞客邦 留言(0) 人氣(57)
前一陣子在研究 CI/CD,想到前公司是使用 GitLab 作為版本控管以及 CI/CD 的解決方案,那就來架一台試試看吧。現在要自架 GitLab 服務相當簡單,除了自己準備好環境即可一鍵安裝,使用 docker 快速建立也是個好選擇。以下分別以二種方式進行安裝,順便留個紀錄:
GCP
- 建立 Compute Engine,GitLab 服務本身算是蠻吃記憶體的,官方建議的配備是四核心 CPU 以及 4GB 以上的 RAM。我開了一台雙核 4GB 的機器個人使用沒有問題,再低可能會有跑不起來的問題,請選用 e2-medium (2 個 vCPU,4 GB 記憶體) 以上等級的規格
- 根據官方提供的安裝文件進行安裝,這邊以 ubuntu 為例
# 更新套件來源並安裝相關套件 sudo apt-get update sudo apt-get install curl openssh-server ca-certificates postfix tzdata -y # 下載 gitlab ce 一鍵安裝包 curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash # 安裝 gitlab ce sudo apt-get install gitlab-ce # 修改 external_url 參數為對外網址 sudo vi /etc/gitlab/gitlab.rb # 更新設定並重新啟動 GitLab sudo gitlab-ctl reconfigure
- 第一次 GitLab 連線需要設定 root 的密碼,設定完後就算是建立完成了
- 因為之後需要串 CI/CD,所以還需要建立 GitLab Runner;它算是實際執行 CI/CD 時的程序。安裝方式也有很多種,這邊我偷懶使用 docker 快速建立,請先確認 docker 已經安裝完成
# 啟用一個 GitLab Runner 的 docker container docker run -d --name gitlab-runner --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ gitlab/gitlab-runner:latest # 查看列表確認是否啟用成功 docker ps -a
docker on NAS
- 這邊以 NAS 為主,去年趁雙 11 特價購入的 NAS 上面,已有多個使用 docker 自架的服務;不過自行升級到 16GB 的記憶體使用率一直很低...明明有多餘的 RAM 卻沒有用到感覺很虧!(咦?)這次試著在上面安裝 GitLab,總算是讓使用率突破 20% 了!以下是 QNAP Container Station,docker-compose.yml 的設定,這邊一併把 GitLab Runner 也包含進去:
version: '3' services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always environment: GITLAB_OMNIBUS_CONFIG: | # GitLab 對外網址 external_url "https://gitlab.xxx" # ssh 對外顯示 port;這邊要特別注意,這個 port 是對外顯示用,所以要跟下面 ports 對應,但實際 docker 內部仍是使用 22 作為 ssh 的 port gitlab_rails['gitlab_shell_ssh_port'] = 50022 gitlab_rails['lfs_enabled'] = true gitlab_rails['manage_backup_path'] = true gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" gitlab_rails['backup_keep_time'] = 604800 gitlab_rails["time_zone"] = "Asia/Taipei" # 這邊因為我有用 SSH Tunnel 服務,所以只開 80 port nginx['listen_port'] = 80 nginx['listen_https'] = false # GitLab 有內建 letsencrypt 自動更新,不過我有透過 SSH Tunnel 服務已有 https,不確定設定這個是不是有用... letsencrypt['enable'] = true # 憑證快到期仍未更新時,發送通知的 email letsencrypt['contact_emails'] = ['gitlab@gmail.com'] letsencrypt['auto_renew_hour'] = "12" letsencrypt['auto_renew_minute'] = "30" letsencrypt['auto_renew_day_of_month'] = "*/7" volumes: - ./gitlab/config:/etc/gitlab - ./gitlab/logs:/var/log/gitlab - ./gitlab/data:/var/opt/gitlab ports: - "50443:443" - "50080:80" - "50022:22" gitlab-runner: container_name: gitlab-runner image: gitlab/gitlab-runner:latest restart: always volumes: - "/var/run/docker.sock:/var/run/docker.sock" - "./gitlab/runner-config:/etc/gitlab-runner"
danielhuang030 發表在 痞客邦 留言(0) 人氣(597)
最近入手一台新 NAS,因為內建 docker,自架了不少服務在上面。可惜家裡的使用社區網路,沒有對外的實體 IP;通常需要透過業者設定 Port Forwarding,才能從外部連回家裡的機器。致電客服要求申請,他們卻回覆目前已經沒有提供這個服務了;想換一家業者,但合約到期還要 3 個多月...萬念俱灰的情況下,突然想到 ngrok 這個第三方服務,提供 SSH Tunnel 技術,實現本機也可以對外的目的。既然有這種服務,那應該也會有開源的解決方法吧?找了一下果然有,而且還不少;我試用了其中的 antoniomika/sish, beyondcode/expose 不過自架的過程不太順利,server 端感覺有架起來,但 client 端連不過去~後來發現 frp,用 Go 撰寫提供執行檔馬上可用,而且還有中文文件可以查閱。利用 GCP 免費帳號建立的 Compute Engine 做為跳板,終於建立成功了!
下面紀錄一下建立的步驟:
1. 在有實際 IP 的 Compute Engine,防火牆要開 server 監聽的 port(9000) 與管理介面的 port(9999)
danielhuang030 發表在 痞客邦 留言(0) 人氣(191)
CI/CD 在整個開發流程中算是最後的環節,如果公司大一些有 MIS/DevOps 部門,這一塊通常會有專業人士處理;工程師寫完程式後只要 merge master branch,理論上就會自動觸發 CI/CD。不過個人專案不比公司產品,不會特別花錢購買完整的服務不說,自己還要學習怎麼「兜」出 CI/CD 的處理流程。市面上有不少提供 CI/CD 服務的廠商,這邊選用的是 CircleCI,免費版提供每周 2500 的額度,以及單線程處理。額度的部分老實說我不是很懂他怎麼計算的,至少我目前還沒有遇到超額得情況?單線程處理對於個人專案來說絕對夠用,畢竟只有一個人開發嘛...(汗)
CircleCI 帳號的建立以及與 GitHub 的串接,這部分網路上已有不少前輩分享請自行 Google;這邊我會以個人專案 twitter-test 為例,直接說明 config.yml 的設定配置。以下是 CI/CD 大致的流程:
- 把程式碼 merge 到 GitHub 的 master branch,觸發 CircleCI
- 開始 build
- 透過 docker 建立環境,使用 CircleCI 專用的 .env 以及測試設定,進行單元測試與整合測試
- 開始 deploy
- 利用在 CircleCI 設定的 SSH Keys,以 ssh 的方式登入 AWS EC2 更新程式碼並執行 deploy.sh
- 完成整個 CI/CD 流程
其中 5. 需要在 CircleCI 設定 SSH Keys,設定流程如下:
- 先進入 AWS EC2 主機後,設定一組 CircleCI 用的登入 key
danielhuang030 發表在 痞客邦 留言(0) 人氣(134)
偶然發現 AWS 有提供教育版免費試用的服務,稱為:AWS Educate。剛好手邊有個之前申請的美國 edu email,來試著申請看看吧!
- 點選「加入 AWS Educate」

- 選擇「Student」

danielhuang030 發表在 痞客邦 留言(0) 人氣(31)
- 安裝 docker/docker-compose
sudo apt-get update sudo apt-get remove docker docker-engine docker.io sudo apt install docker.io -y sudo service docker start
- docker-compose 最新版安裝請參考官網說明
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
danielhuang030 發表在 痞客邦 留言(0) 人氣(79)