發表文章

sendmail routing: virtusertable, mailertable, smarttable

圖片
 公司老闆對信件的管制都會有一些要求, sendmail的routing機制, 其實都可以應付的來, 其中3個主要設定表格應該就可以處理大部份狀況: virtusertable, mailertable, smarttable, 分別討論如下。 1. virtusertable   這個表格原本用來做主機代管, 一台主機要host 10家公司(網域)的email, 必然會收到10個不同網域的信件, 但實際上這主機的名稱只有一個; 這時, 就用這個表格來將對應虛擬email address到實際的位址。例如: sales@example.com            jill info@book.org                    sara@writer.com 2. mailertable  這個表格用來決定特定收件者網域的信要用什麼協定轉寄到那台主機(或網域), 它不管寄信者是誰。所以如果你想要設定的規則是"由誰寄來的都如何....", 那麼這個表格無法處理。它可以處理的是"寄到某網域的信都轉到那裡..."這樣的要求, 例如: book.org                  smtp:writer.com 這樣的設定, 會將要寄到book.org這個網域的信都轉寄到writer.com這個網域, 而且改用smtp這個協定來傳送, 現在一般都使用esmtp這個比較新的協定, 如果有比較老舊的主機無法處理新的協定, 利用這個mailertable, 也是一個方式。 writer.com               local:pat 這個設定可以將所有要寄到writer.com網域的信, 都轉寄給本機上的pat這個使用者。  writer.net                 esmtp:[192.168.0.1] 這個設定, 則是直接將要寄到writer.net網域的信, 都轉寄給192.168.0.1這台主機。前面的例子中, 指定轉寄到另一個網域時, sendmail還是要決定那個網域的郵件主機是那台, 然後還是將信傳送到那台主機。而這個決定的方法, 就取決於你的sendmail設定, 還有DNS裡MX record的設定。所以如果你想跳過那些設定, 或者讓轉寄到那台主機更明確, 這個設定法就簡單明瞭。 3.

pca10059 (nRF52840 Dongle) + circuitPython + micro SD card 讀取或寫入資料

圖片
 有些時候,我們的IoT裝置並不連網,又或者我們就是想存些資料在micro SD卡上。在nRF52840 Dongle上,實現這個要求,搭配circuitPython的情況下,只要加裝一片SD Card模組和撰寫少許程式就可以完成。 我使用這個模組,這應該是市面上最常見也最便宜的micro SD card模組了,大約NT$40-50.  nRF52840 Dongle就長得如上圖,硬體接線的話要使用到總共6條線,我選擇使用Dongle(以上圖來看)下方的6個接腳(由左到右分別是:1.15, 0.02, 0.29, 0.31, GND, VDO OUT): micro SD card module         nRF52840 Dongle ------------------       ---------------- CS                                    1.15 MISO                                0.02 MOSI                                0.29 SCK                                 0.31 GND                                 GND VCC                                 VDO OUT Note: 注意哦!因為我選擇使用3V的電壓,這顆micro SD card模組的1117已經被我拔掉!另外還把其中2個接點接在一起。如下圖: 這樣的話,這個模組就可以使用和nRF52840 Dongle一樣的3V電壓,如果你不想移掉1117和改線路,那就要給這個模組VCC腳位5V的電,以nRF52840 Dongle來說,可以由VBUS這個腳位來供電(但前提是,nRF52840 Dongle必須插在USB插槽上)。 circuitPython似乎預設是支持micro SD,所以code.py的內容: ''' Mount a MicroSD Card, using SPI interface SPI Pin mapping: ------------------------ GPIO 0.31, SCK GPIO 0.29,

Oracle 11g R2 突然無法連入事件 (CLOSE_WAIT, TIME_WAIT)

 昨日我們一台Oracle 11g主機突然無法連入, 檢查後發現用SSH連入主機正常, 在主機上存取Oracle也都正常, 主機CPU, 記憶體, HD用量也都正常。只有透過網路存取Oracle的連線變得很難連上, 有時等很久之後可以連上。同事直接重開該台主機(shutdown, reboot)後, 就可以正常連上, 但沒多久又發現同樣連不上的情況! 我將listener 關下, 再打開後, 也一樣正常一下子, 然後就又連不上了。同事發現listener log檔已經非常大, 決定將log檔copy走, 刪除, 讓log檔重新開始。但是重開listener後, 情況一樣沒改善! 此時, listener log檔內可以看到一些錯誤訊息: 26-DEC-2023 12:02:54 * (CONNECT_DATA=(SERVICE_NAME=orcl)(CID=(PROGRAM=c:\windows\system32\inetsrv\w3wp.exe)(HOST=xxxx )(USER=NETWORK?SERVICE))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=1234)) * establish * orcl * 12518 TNS-12518: TNS:listener could not hand off client connection  TNS-12547: TNS:lost contact   TNS-12560: TNS:protocol adapter error    TNS-00517: Lost contact     Linux Error: 32: Broken pipe 使用netstat -ant, netstat -anp | grep 1521 或者lsof -i:1521查看會發現有很多TCP/IP連線的狀態一直都呈現TIME_WAIT, CLOSE_WAIT之類的的不正常狀態, 而且很多都不會消失, 還愈來愈多! tcp        0      0 127.0.0.1:62333             127.0.0.1:1521              ESTABLISHED 4316/ora_pmon_orcl tcp        0      0

基金日記: 基金的績效怎麼看?

圖片
  這支基金成立至今2年多, 成立時正好是FED為了因應全球Covid-19疫情造成的全球經濟困局, 而大量印鈔的時候。當時, FED救市, 直昇機式的大撒幣, 美國人手上現金滿滿, 股票市場熱鬧。利率降到0, 如下圖。此時也成就了不少少年股神!  但接著, 通膨就來了, FED為了對抗通膨, 已開始有傳出要升息的聲音。那時, 我對基金公司在此時成立這支基金, 心裡就有一些疑問? 這種全球趨勢的基金, 又不是反做或平衡型, 以趨勢來看, 不是正好去接掉下來的刀子嗎? 但因為理專的推銷, 我就意思意思的買一點點, 反正當做一個指標來觀察也好。 果然, FED開始升息後, 其淨值就開始掉掉掉, 到現在2年多, FED抗通膨有了一些成果, 開始傳出明年會啟動降息的消息, 這個基金的淨值就慢慢的回升。 現在事後諸葛一下, 檢討如何操作才是比較好的策略:  1. 一般人會想, 買在最低, 賣在最高是最好的策略, 但這個策略的問題在於, 沒有人知道什麼時候是最低點, 什麼時候是最高點。所以, 理論很好, 但現實不可行。 2. 一個說法是最好的買點是十年前, 其次是今天。但這個策略的問題是, 很可能買在最高點, 當然也很可能買在最低點, 反正全看運氣。 3. 我想, 應該盡可能買在低點, 利用一些工具來提高猜測的準確度, 就可以有不差的效果。以FED的利率來看, 升息開始後約半年, 就是基金淨值的最低點。到利率最高點時, 淨值都是向上的走法。當然此期間, 淨值還是上上下下的走。這段期間, 如果定期分批買進, 其實是會獲利的。 配合基金的績效圖表來看, 孤注一擲的在2年前下好離手, 到現在就是-9.43%(虧錢)。那如果是孤注一擲的在1年前下好離手, 到現在就是29.18%(大賺錢), 即使在半年前孤注一擲, 至今也有8.14%。但這種策略其實很難實行! 因為很難猜到何時是最低點。 實戰後, 會發現, 比較好實行的策略會是, 依照FED的利率, 配合全球景氣的相關數據, 定期(不)定額的買入。以績效圖表來看2年前就開始定期定額, 到現在也有15.61%, 就算是1年前開始到現在也有14.41%。

nRF52840 Dongle CircuitPython 類比輸入腳位

圖片
 如同大多數的MCU只有特定幾支腳有支援類比輸入的功能, nRF52840 Dongle 也是只有幾支腳位有類比輸入功能。但其實我也懶得查文件,所以就直接測試看看: 進入REPL,輸入指令: >>> import board >>> from analogio import AnalogIn >>> analog_in = AnalogIn(board.P1_10) Traceback (most recent call last):   File "<stdin>", line 1, in <module> ValueError: Invalid pin 這樣P1_10 (即下圖中的左下角 1.10 Pin) 這支腳位就是不支援的,如此,有點耐心的一支腳一支腳的試,全部試完,就知道了,:-) >>> analog_in = AnalogIn(board.P0_31) >>> analog_in = AnalogIn(board.P0_29) >>> analog_in = AnalogIn(board.P0_02) 結果,只有這3支腳位 (0.02, 0.29, 0.31) 沒有出現錯誤訊息。 那應該就是這樣了,之後找時間,實際接個電路來試試。

由Python程式來存取Google sheets (試算表)

圖片
 可以在Raspberry Pi上讀取TMP102的温度值後, 我想要把温度值存放在那裡? 存在本機的檔案上, 網路上已有現成Python程式, 放在MQTT Server, 以前就玩過。想到放到Google 試算表應該也不錯, 以前也沒試過, 不如來試試! 首先找到這一貼文 Reading and writing to Google Spreadsheets using Python , 此文言簡意賅, 只有3個步驟就做完, 文章印出來也只要2頁! 但是第一個步驟因為要操作 Google API Console , 而這個網頁看來操作方式有些修改過了, 所以照著做會有些困難。自己摸索一陣時間後, 才弄清楚! 其實網路上討論這個部份的貼文不少,  【Python 網頁爬蟲 #1】設定 google sheet API 並取得 json 金鑰,讓我們的資料能同步更新至雲端 google sheet 表格 (內含完整圖片說明) 這篇貼文就很詳細, 文章是去年寫的, 還算新, Google API Console的操作界面和現在的一致。另外,  How to Read and Write Google Sheets Data Using Python 這篇貼文在設定Google Cloud Console部份, 描述的更詳細, 而且Python程式部份使用不同的套件。還有一篇陳濤半年前寫的 [筆記] 使用 pygsheets 記錄實驗數據到 google sheet 也很不錯, 特別是把Python pygsheets套件的幾個常用操作點出, 值得看一下。 我就不重複講了, 只提幾個重點: ===  步驟 1 === 1. 要先建專案  2. 在建好的專案裡, 啟用2個API。Google Drive API, Google Sheets API (有些文章只提到要啟用Google Sheets API, 那就要看你之後的程式的寫法, 我因為後面Python程式有用到, 所以要這2個都啟用) 3. 建立憑證 (有3個可以選: API, OAuth ID, 服務帳戶。要選服務帳戶, 建完後會得到一個電子郵件地址, 類似 xxx@xxx.iam.gserviceaccount.com ) 4. 針對這個服務帳戶, 建立金鑰, 並下載其JSON檔案 (命名為creds.json

How to add (and remove) Tmp102 sensor to Raspberry Pi 4

圖片
(註: 此圖截自SparkFun文章:  Python Programming Tutorial: Getting Started with the Raspberry Pi , 本文的接線方式和此相似, 只是GND接到Pin 9, 而不是Pin 6, 因為Pin 6被散熱風扇佔走! ) 將TMP102温度感測器連接到Raspberry Pi (R-pi), 之後就可以利用R-pi來監測環境温度。只是簡單的把環境温度記錄到log檔, 或者儲存到雲端讓人們隨時可透過網路查詢; 或者加上觸發條件在温度高於或低於特定值時可進行通知的動作。這些都是可以做的。本文先嘗試踏出第一步, 將TMP102接上R-pi, 讓系統可以存取其感測到的温度值, 也讓我們可以寫Python程式來存取温度值。 Raspberry Pi temperature sensor using TMP102 這篇貼文, 其實就在說明如何將TMP102連接到R-pi, 但因為Raspberry Pi出來很多年了, 出的板子種類也很多(2, 3, 4, Zero, Zero 2, etc), 同樣的在其上跑的OS也很多, 有官方的Raspberry Pi OS, Ubuntu, Freebsd, 等等。所以, 這文章以現在來說,有一些需要小修改的地方。 本文針對Raspberry Pi 4B, 使用官方Raspberry OS 64bit的環境,嘗試加入TMP102,基於以上所提文章做一些補充。 先進行以下設定: 1. Enable I2C $ sudo raspi-config 選3 Interface Options 然後選I5 I2C, 接下來會問你要enable I2C嗎? 選是. 往下記得重開機! 2. 安裝以下套件: $ sudo apt-get install lm-sensors   (出現一些問題, 但不用管它!) $ sudo apt-get install i2c-tools ================== 硬體接線 ================== TMP102模塊上的4支腳(VCC, SDA, SCL, GND), 分別接到Raspberry Pi GPIO的(1,3,5,9), 如上圖, 都在上面左方, 我打勾的4個腳位。記得接線前, 先把Raspberry Pi關機,