跳到主要內容

發表文章

目前顯示的是有「Python」標籤的文章

利用Ollama建立本地的翻譯API

 最近在上一門線上課程,該課程有提供英文字幕檔,所以我就寫一個簡單的Python程式將該文字檔利用 Google Translate API 翻譯成中文。但是因為在下是免費黨,希望在自己的電腦就能提供還可以的翻譯,不要把Google 的免費額度用光,非必要的翻譯使用本地LLM達成。

AI寫程式紀錄網路斷線時間

 最近幾週發現家中的光世代會瞬斷,最長不到3分鐘,最短2秒就回復,通常1~2小時才斷一次,很難發現。找了市面上的監控程式沒有符合需求的,所以就叫LLM來寫。 我使用免費的Gemini和ChatGPT 4o來做,比較後Gemini的程式比較好,所以僅摘錄Gemini產生的回應。以下是我下的Prompt: 我的網路偶爾會中斷幾秒又恢復,需要紀錄斷線時間,你寫一個監控程式給我。   上圖是Gemini產生的程式,已經可以顯示目前網路狀態。但這是不夠的,所以我再下指令。 幫我把日期時間格式改為 yyyy/MM/dd HH:mm:ss 看起來舒服多了,但要的是記錄,所以得儲存到檔案。於是再下 Prompt: 請再增加斷線時,將斷線資訊另存一份到名為 network-down.txt 檔案 接下來就差不多完成了,我最後再下一次Prompt: 恢復連線與Offline時間的資訊,也請寫到 network-down.txt  這樣就收工,程式請自行產生,就不附在後面占篇幅,而且應該會寫得越來越好,敬請期待。其實我稍微有再花幾分鐘修改,這程式不太需要修改也能執行。唯一要注意的是它用 Linux / Mac 的ping呼叫方式,所以在 Windows 環境時建議使用 WSL 執行。 後記: 我執行此程式之後,就記錄約2小時斷一次,每次1~2秒,整晚有2次斷線2分鐘,若沒有程式記錄真是難以追查。種花在我報修後,隔天就來換光纖數據機,非常有效率。

Python Flask Web API 中文亂碼

 最近在試著用 Flask 做一個簡單的Web API,結果回傳的中文亂碼,看起來是做了escape encode。 程式碼: 瀏覽器結果:

Visual Studio 2015程式檔編碼相容問題

最近試了Visual Studio 2015,發現若不是UTF-8編碼的cs檔案,常常在編譯時會發生錯誤。可參考黑暗大的 潛盾機-解決VS2015程式檔BIG5相容問題 。VS2015的UTF-8檔案要用有 BOM 才會正常。 想起來我之前也有做類似的東西,原本放在Google Code的 Chinese Autoconvert ,現在放在 Bitbucket 和 Github 。原本希望拋磚引玉,沒想到沒什麼人用,所以只好自己動手把功能補足。這次改版過了好幾年,所以也改成使用較新式的寫法,若之後還要改,會改成符合Python3的版本,這次仍維持在Python 2。 usage: g2butf8.py [-h] [-r] [-nb] [-nobom] [-x extension [extension ...]]  [-t type] [-u userdic] [-nu]  files [files ...] positional arguments:   files                 會自動偵測編碼,再轉換成有BOM的UTF-8 optional arguments:   -h, --help            show this help message and exit   -r, --recursive       包含子目錄(預設不包括)   -nb, --nobackup       不要產生.bak備份檔 (預設有)   -nobom, --nobom       不要產生BOM標題 (預設有)   -x extension [extension ...]                         副檔名, (預設為所有檔案)   -t type, --type ty...

完美簡繁轉換

因為之前一直用ConvertZ轉影片字幕檔,但是我在家用Mac居多, 加上聽完HITCON 2011後在公司也不太想用Windows了(大誤) ,而且ConvertZ必須自己指定檔案的編碼,對於多檔轉換時很麻煩(找的字幕檔編碼不一定是某種編碼),希望能有更方便的解決方案。原本想要用 開放中文轉換 , opencc ,但是在Windows編譯上遇到困難,後來又看到 convert2utf8 ,本以為它會自動轉換編碼,用了才發現不會,再找了 Universal Encoding Detector ,自己加上自動編碼偵測,並在轉換檔加上 BOM 。

Postfix mailbox quota check

因為敝公司近幾年來新人都用WebMail,又因為OpenWebMail只能用mailbox,因此偶爾會發生用戶mailbox爆掉的情形。 搜尋後並沒找到Postfix內建有警告功能,網路上只有 Postfix Checking Maildir Disk Usage ,是駱駝文寫的,我不會改 =.= 最後決定自己動手做,雖然不會大蟒蛇還是勉強寫出個小程式,用Crontab排程每天檢查一次,再自動通知用戶。 #!/usr/bin/env python #coding: utf-8 import os import smtplib from email.mime.text import MIMEText def sendWarnMail(account, name): fromaddr="Email系統 <postmaster@example.com.tw>"; toaddrs=name +" "+ "<"+account+"@example.com.tw>"; msg = MIMEText(name +" 您好:\n\t您的email容量即使用完畢, 請將伺服器上的郵件搬移一部份至其他郵件匣,以免無法收信,謝謝。", 'plain','utf-8'); msg['Subject'] = "Email容量不足通知"; msg['From'] = fromaddr; msg['To'] = toaddrs; server = smtplib.SMTP('localhost'); #server.set_debuglevel(1); server.sendmail(fromaddr, toaddrs, msg.as_string()); server.quit(); return; def getPostfixMailBoxLimit(config): f=open(config,'r'); lim...

機油教學的小錯誤

雖然昨天沒能參加ericsk介紹GAEO,但今天仍然抽空在我的Ubuntu上玩一下機油。 發現在 http://doc.gaeo.org/tutorials/getting-started 的 export GAEO_HOME='/home/ericsk/sdk/gaeo' # put your installation directory here. export PATH='${GAEO_HOME}/bin:${PATH} 應該是 export GAEO_HOME= " ${HOME}/sdk/gaeo " # put your installation directory here. export PATH= " ${GAEO_HOME}/bin:${PATH} " 我覺得不會混淆就不用大刮號直接寫 export GAEO_HOME="$HOME/sdk/gaeo" export PATH="$GAEO_HOME/bin:$PATH"

將過大的mailbox移到收件匣

最近由於某些新進同仁都使用WebMail,但又不砍信,造成Mail Server繁忙,只好請他們自行砍信/移信。有些 皮比較癢 公務繁忙的同仁沒空處理,只好抽空寫支小程式處理。 由於Openwebmail的限制,不能用maildir,只能維持使用mailbox,這是系統loading高的主因。由於許多原因以及沒有功能更齊全的webmail前提下,只能暫時如此處理。本來要用比較熟悉的Java寫,但是搜尋之下並沒有功能完整的library,而Python內建就支援mailbox處理,在缺乏其他支援/資源的情況下也只能硬著頭皮寫。因為我比較懶,裏頭有用到一個 date parser ,使用前請先安裝。 這裏的環境針對FreeBSD + Postfix+Openwebmail,sendmail/qmail應該也適用,我在Ubuntu開發,所以在Linux"應該"也能正常執行。 完整程式如下: #!/usr/bin/env python # coding: utf-8 import datetime import mailbox import email.Errors import os from stat import ST_SIZE #由於python沒有內建的Date Parser,所以找了一個dateutil parser, http://labix.org/python-dateutil #FreeBSD ports裏在 /usr/ports/devel/py-dateutil from dateutil.parser import parse def mailbox_apart(inputfile, outputfile, splitdate): inbox = mailbox.mbox(inputfile); mboxNew = mailbox.mbox(outputfile); for key, message in inbox.iteritems(): timex = parse(message['date']); timex = datetime.date(timex.year, timex.month, timex.day); if cmp(tim...

駭客中繼站阻絕設定

Update: 由於在 2018年4月Cloudflare與APNIC合作建置全球最快的 Public DNS 1.1.1.1 上線,所以將範例裡的IP改為 127.0.0.1 ,參考 隱私優先、速度最快,公共DNS服務1.1.1.1上線了 VB超人接了某個政府機關的案子,有台主機代管在敝公司。日前很不幸地又收到資安管理通知,這次是要求做駭客中繼站阻絕設定,設定方法如下:

Python的編輯器

在下一直不瞭解Python,但前幾天抓了一支小程式下來看,內建的idle太遜了,於是找到 SPE IDE 來用。SPE是用Python寫的,所以當然用起來沒有太大的問題,用wxPython肯定可以跨平台。 後來又發現 DrPython ,也是利用wxPython寫的,不過我試用有些問題,覺得SPE比較好。 另外基於GTK+的多功能編輯器 Geany 編寫Python也很棒,支援的平台也很多(缺Mac)。 以上三個編輯器在Ubuntu都有內建,可直接從套件管理程式點選安裝;Windows平台也可以使用。