樂園日記
相關資料統計表
向量浮屠
大航海時代online手札
2020年10月29日,星期四
21:43:40

今天惡補了一下NoSQL領域的資料庫,像是MongoDB、redis、Neo4j和Cassandra⋯

MongoDB,適合非交易性的應用場合,具延展性,小的時候可用社群版,大的時候,可付費請專業的來幫忙。

redis,對於需要極高速的處裡的環境下,最適合使用。

Neo4j,需要處理類似圖學概念的情況下,可大幅提升效率與降低所需要的資料量。

Cassandra,Apple使用了7500節點,存了10PB的資料量,需要更多效能與空間時,加機器就好,延展性最佳。

以上是粗淺的心得,略而記之。


2020年10月28日,星期三
23:3:2

youtubelist在這台主機上的回應時間太長,怕讓大家久等了,所以使用了定時產生靜態頁面的作法,讓第一個頁面的速度不會被嫌棄。

方法很簡單,就是當第一個頁面的動態頁面判斷沒有參數時,轉向到靜態頁面的檔案,有參數時則依舊執行原程式碼。


2020年10月27日,星期二
13:28:0

Google雲端主機的CentOS 7,跑著跑著,既然也會出現記憶體不夠的狀態,不知道是不是mariadb的memory leak問題?

只能重新啟動。


2020年10月26日,星期一
19:36:37

樹莓派2B使用外接的wifi介面卡時,就是那種USB介面的,常常會有斷線的問題,即使是樹莓派3B內建的wifi,偶爾也會造成一樣的困擾。因此,為了穩定度,必須手動做一些調整並加上一些程式碼來強化之!

首先,把電源管理的功能關閉是必要的。樹莓派2B中,可以修改/etc/network/interfaces,在這個檔案中加入「wireless-power off」的敘述,重開機即可。但是這個方法在樹莓派3B上行不通,而需要在/etc/rc.local增加「/sbin/iwconfig wlan0 power off」,再重開機。是否已經正確關閉電源管理功能,可由指令「iwconfig」,看看Power Management是否為off。

再來,配合sudo crontab -e排程來執行網路介面是否up或down的修正,如下範例:

#!/bin/bash
NOW=`date "+%Y-%m-%d %H:%M:%S"`
HOST=`hostname`
wlan0=`cat /sys/class/net/wlan0/operstate`
down="down"

if [ "$wlan0" == "$down" ]; then
    ip link set wlan0 down
    ip link set wlan0 up
    /sbin/wpa_cli -i wlan0 select_network 0
    MSG="${NOW}: restart wlan0"
    echo "$MSG"
    sleep 10
    wlan0again=`cat /sys/class/net/wlan0/operstate`
    if [ "$wlan0again" == "$down" ]; then
        MSG="${NOW}: reboot ${HOST}"
        echo "$MSG"
        /sbin/shutdown -r now
    else
        echo "${NOW}: wlan0 is ok"
    fi
else
    echo "${NOW}: wlan0 is ok"
fi

 


2020年10月24日,星期六
16:32:10

macos下,使用dd指令,即可完成sd卡轉存為映像檔,也可以把映像檔複製到sd卡上,以下是指令示範:

sudo dd if=/dev/disk2 of=~/Downloads/u2004sd32g.dmg

反過來,如果要把映像檔拷貝到sd卡,指令為:

sudo dd if=~/Downloads/u2004sd32g.dmg of=/dev/disk2

如果不知道sd卡的代號是哪一個,則可藉助下面指令查詢:

diskutil list

16:9:29

如果想要在樹莓派運行中,複製運行中的SD卡,可用rpi-clone來完成。

先安裝rpi-clone,指令如下:
git clone https://github.com/billw2/rpi-clone.git
sudo cp rpi-clone/rpi-clone /usr/local/sbin
rm -rf rpi-clone


插入USB碟之後,輸入下面指令:
sudo fdisk -l

上面的指令在於了解插入的USB碟是sda還是sdb…如果只有一個,基本上就是sda,這時輸入:
sudo rpi-clone sda -v -x

再依照畫面的指示,輸入必要的參數,然後等著複製的工作完成,把USB碟移除,即可。

有了備份好的USB碟,即可利用另一台電腦製作映像檔,再把映像檔還原到另外的SD卡。

1:45:59

macos下,以dd指令把USB碟整個複製到sd卡

先以下面指令確認目前儲存裝置的狀況:

diskutil list

然後插入USB碟,並且以前一個指令確認USB碟的代號,最後插入SD卡,重複前一個指令確認SD卡代號,在此,假設USB碟為/dev/disk2,SD卡/dev/disk3。

當USB碟與SD卡的代號都確認後,輸入以下指令:

sudo diskutil umountDisk /dev/disk2

sudo diskutil umountDisk /dev/disk3

sudo dd if=/dev/rdisk2 of=/dev/rdisk3 bs=1m conv=noerror,sync

當畫面出現如下的資訊時,就表示已經完成複製:

dd: /dev/rdisk3: short write on character device
dd: /dev/rdisk3: Input/output error
30437+0 records in
30436+1 records out
31914983424 bytes transferred in 2217.743738 secs (14390744 bytes/sec)
 
特別注意:當USB碟越大時,需要越多時間,以32GB來說,約需38分鐘。 

2020年10月23日,星期五
16:29:20

更換ffmpeg之後,後來又出現不能運行的狀況,只好於SRA4增加一行指令來協助偵錯。

最後發現問題點在於,多餘的UserAgent與Header資訊,造成對應的串流伺服器無法回應的錯誤,只要把UserAgent與Header的資訊去除,就恢復正常了。


2020年10月22日,星期四
11:25:55

ffmpeg也要跟著時代升級了,2016年使用的ffmpeg 3.0,因為已經無法解讀新一代的串流格式,而需要改用20191223-5b42d33這個版本。


2020年10月9日,星期五
15:27:5

Google Play後台改版,補充一些必要的資訊。

話說這些補充的資訊,其中有一項,應該是不需要補充的,因為之前上架的時候,都有填過,真是怪怪!


2020年10月8日,星期四
21:48:13

這篇算是2020-10-05把樹莓派弄掛的後續處理。

因為是安裝ClamAV的關係,導致系統太忙碌的問題,所以把ClamAV的啟動移除掉,即可。方法就是,找個Linux平台或是在Windows、MACOS下掛載該SD卡,把ClamAV相關的檔案,從掛載的目錄下移除(/etc/systemd/system/multi-user.target.wants),再把該SD卡移回樹莓派,問題就解決了。


2020年10月5日,星期一
14:4:21

為了讓ClamAV可以在3310埠上運作,結果把整個樹莓派弄掛了!

還好之前有備份的SD卡,直接把備份的SD換上,不然光是環境設定,大概又要花掉一整天。

只是上次備份後,樹莓派的環境還是有些小變動,還是需要手動把這些變動完成。


2020年10月4日,星期日
21:46:59

隨著mail server的架設完成,舊有的論壇功能也隨著恢復起來,能發email是很重要的,因為論壇的身份認證都依賴電子郵件。

雖然PHP Mail函式不支援新一代的電子郵件認證等規格,雖然可以使用PHPMailer來支援新一代的電子郵件服務,但需要改寫程式碼!想抄捷徑,方法就是設定區網,讓區網內可以不需要認證寄信,也就是Open Relay。

19:8:9

郵件伺服器2020設定重點:

  1. 設定IP反解,即PTR Record(rDNS),以Hinet來說,設定後需24小時,方能生效。
  2. DNS伺服器設定SPF Record。
    SPF(Sender Policy Framework),由RFC 4408定義,用來防止偽造身份網路釣魚或寄出垃圾郵件。
  3. DNS伺服器設定DKIM。
    DKIM(DomainKeys Identified Mail),以public key方式提供數位簽章與身份驗證,檢測郵件相關內容是否被竄改或是偽造,2007年2月成為標準。
  4. DNS伺服器設定DMARC。
    DMARC(Domain-based Message Authentication, Reporting and Conformance),主要目的在於了解是否有第三方偽造網域身份寄出電子郵件的回報管理機制。
  5. 郵件伺服器設定SSL憑證。
    這個年代,沒有加密的話,大概就是光著屁股跑全世界啦~
    可以使用Let's Envrypt提供的SSL憑證。

這與1995那個年代,只要把DNS伺服器MX搞定,郵件伺服器域名、帳號設定好加上避免Open Relay,多了很多細節。最主要的目的在於避免垃圾郵件,強化管理與安全。


2020年10月3日,星期六
21:58:32

PHPMailer 6.1,在中文的使用上有幾點需要注意的,避免亂碼:

  1. 修改原始程式碼「PHPMailer.php」,把send函式在try之後增加一行,$this->CharSet = 'UTF-8';
  2. 寄件者與主旨,前綴需要加上'=?utf-8?B?',並以base64_encode編碼之後,後綴增加'?='。

這樣利用Gmail來發信,中文就正確無誤了,只不過在Gmail內要先設定為低安全應用程式,才可正確送信!免費的Gmail帳號,每日可發送500封,G Suite的付費帳號每日2000封。如果需要更大的發送數量,可以考慮和Google搭配的Mailgun或其他第三方的服務,像是Sendgrid。如果發送的數量實在龐大,又不想付費的話,那就需要固定IP,把DNS反解設好,自己架Mail Server啦。


2020年10月1日,星期四
22:23:21

昨天才剛說Blank Page的問題,今日就發現問題點,排除了!

問題出在php的執行記憶體的大小,用預設值,因為不夠用,要刷新多次後,才能觸發記憶體釋放的動作,把php的執行記憶體往上調,問題就解決了。

當然啦,會發生這樣的問題,另一個因素是直接使用3rd的元件,沒注意到該元件太消耗記憶體。

再加上把error_reporting設為0!因此,發生了什麼樣的錯誤都不知道,只看到一個空白的頁面,這就是Blank Page的原因。

18:25:19

如果資料表龐大,有時候要抓出問題點還真不容易,這時候,就要把所有新增、修改與刪除的資料通通都記錄下來!

只是資料表眾多,欄位眾多,手動寫程式碼來抓,還真的不知道哪年哪月呢?於是,自動產生紀錄資料的的程式碼產生器誕生了。

針對MariaDB或MySQL,只要指定好資料庫的名稱,就會產生對應的紀錄資料庫與所有的程式碼,這樣一來,不管是哪一筆資料被新增、修改或刪除,在紀錄資料庫內都可以看得清清楚楚。

當然,如果您需要Oracle、MS-SQL、或是PostgreSQL類似的紀錄資料庫功能,歡迎來信詢問。

14:34:36

嘗試以ProxyReverse多機的方式,恢復以前舊有的論壇服務。


2020年9月30日,星期三
23:9:43

不知道是不是樹莓派計算能量的問題,還是設定檔的問題,總是有Blank Page的問題!

於是,只好把youtubelist移回Apache2,由Apache2來服務。

18:25:9

在資料層就把一些相關的資料邏輯處理完畢,是最直接不過的,比如說,當某個資料表的欄位有更新時,就要把對應的時間欄位也跟著更新一下。

以下是一個MariaDB(MySql)建立觸發器(Trigger)的樣板:

DELIMITER $
 
CREATE TRIGGER `trgUpdateTableNameAnditsField` AFTER UPDATE ON `theTableName`
 
  FOR EACH ROW BEGIN
 
    UPDATE `theTable` SET `theField` = NOW() WHERE `keyField` = keyFieldValue;
 
  END
 
$
 
DELIMITER ;


2020年9月28日,星期一
22:18:12

翻譯的字典資料同步自動化,之前因為需要了解各項翻譯資料的準確性,手動同步了好一段時間,今天正式將之自動化。

當然,人工確認翻譯資料的正確性,還是需要的,本項自動化的目的在於降低人工維護多主機的字典資料的繁瑣,無論何時字典檔資料有更新,其他電腦也能隨之自動更新,不需要手動匯出與匯入。


2020年9月26日,星期六
19:39:0

Google Cloud 使用 curl 來進行 ftps 檔案上傳時,會發生「NSS錯誤-5938(PR_END_OF_FILE_ERROR)」

解決辦法如下:

sudo yam install gcc

sudo yum install wget

sudo yum install gnutls gnutls-devel libssh2 libssh2-devel

wget https://curl.haxx.se/download/curl-7.54.0.tar.gz

tar -xvzf curl-7.54.0.tar.gz && cd curl-7.54.0/ ./configure --with-gnutls --with-libssh2 --prefix=/usr/local

make

sudo make install

sudo rm /usr/bin/curl

sudo ln -s /usr/local/bin/curl /usr/bin/curl

16:56:45

Python把「共用變數放到同一個檔案」

1.建立一個叫做「dbConfig.py」的檔案,內容如下:
#!/usr/bin/env python3
HOST             = "yourComputerIPOrName"
USER              = "dbUser"
PASSWORD = "dbPassword"
DATABASE   = "dbName"

2.在需要引入上面建立的檔案,可用:
from dbConfig import *

來引入所有在「dbConfig.py」所有的變數,
這種引入的方式,可以直接使用變數名稱。

3.另一種引入的方式,如下:
import dbConfig

但這種方式,在需要使用變數名稱時,需要再加上
dbConfig. 的前綴,就就是變成
dbConfig.HOST
dbConfig.USER

當然,可以使用AS來簡化前綴,如下範例:
import dbConfig as db

要使用變數的名稱,則可簡化為:
db.HOST
db.USER
 


2020年9月25日,星期五
18:15:40

看到螢幕上噴出來的錯誤,才想起目前資料庫的watch code是另外一個頻道的,就是當初測試自動轉錄上傳的頻道!

趕緊修正資料庫的相關欄位和程式碼。


2020年9月24日,星期四
21:8:9

EEE64變更網路連線方式。

19:27:18

雲端主機新增一支程式,用來重設上傳失敗的轉錄檔案,若已經重設,則刪除該轉錄檔案。

每次只要雲端主機出問題,手動重新上傳檔案自是免不了,只是每天有上傳額度的限制,需要計算好重傳的檔案數,才不會出問題。檔案數量一多,就變成天天要定時手動重傳!

在這樣的情況下,乾脆寫支程式來克服這個問題。


2020年9月23日,星期三
19:15:36

EEE變更網路連線方式,其中一個wifi網卡連線改為有線網路,保持穩定性。

有時候,還是只能用回老方法,才是最穩定的。


2020年9月14日,星期一
14:50:1

把 ubuntu 20.04 desktop 當作桌面,發現了一些問題。其中最嚴重的問題,就是使用一段時間後,滑鼠會當掉!

查了資料之後,原來這是藍牙的問題,使用下面指令來修正:

sudo rmmod btusb
sudo modprobe btusb
sudo /etc/init.d/bluetooth start
sudo systemctl enable bluetooth

以上的指令就是把藍芽模組先移除,再重新掛上、重新啟動藍芽的服務並開機時啟動之。

果真,滑鼠再也不當了。


2020年9月13日,星期日
7:19:51

ubuntu 20.04 以下列指令安裝音效輸入切換之後,就有聲音了:

sudo apt-add-repository ppa:yktooo/ppa -y && sudo apt-get update && sudo apt-get install indicator-sound-switcher -y

2020年9月10日,星期四
13:13:13

樹莓派2B自啟用以來,SSH與XRDP伺服器會掛點,是件很討厭的事情,不過也沒時間去找問題,直到最近。

原來,這個問題在早期的樹莓派上很常見,原因在韌體與核心的搭配。那就更新一下,應該再也不會出現問題了吧!

更新指令參考如下:

sudo apt-get install rpi-udate

sudo rpi-update

sudo shutdown -r now

過往的日記

本頁執行共花了: 0.021988868713379秒