各位好,感謝各位對於「夜市小霸王」的喜愛,由於目前公司越來越步上正軌,組織也不在只是我個人,因此我們決定搬家到自己的網站,這裡雖然不會關閉,但也不會再更新,希望大家能到新網站給我們支持喔。

另外一個原因就是這裡的廣告我們沒辦法控制,有時候廣告內容會讓人臉紅心跳~所以還是請大家移駕到我們的新網站

夜市小霸王:https://www.nmking.io/index.php/blog/

image


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

今天在Ubuntu安裝系統,依照這四個網頁的教學分別設定apach, mysql, php, phpmyadmin

1. apach:https://ui-code.com/archives/179

2. mysql:https://ui-code.com/archives/293

3. php:https://ui-code.com/archives/286

4. phpmyadmin:https://ui-code.com/archives/297

在2.安裝Mysql後,要啟動密碼設定結果失敗,錯誤訊息是:

"MySQL Failed! Error: SET PASSWORD has no significance for user ‘root’@’localhost’ as the authentication method used doesn’t store authentication data in the MySQL server. Please consider using ALTER USER"

搜尋一下文章後,這樣做即可

1. 再開啟另外的terminal視窗,因為現在的視窗被輸入密碼卡死了,跳不出來

2. 關閉上一次密碼設定執行緒:sudo killall -9 mysql_secure_installation

3. 進入Mysql:sudo mysql

4. 在Mysql命令中輸入:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密碼';

5. 退出Mysql命令:exit

6. 重新進入密碼設定:sudo mysql_secure_installation

最後要記得把phpmyadmin的對外功能關閉,修改/etc/phpmyadmin/apache.conf

在</IfModule>下方輸入以下文字即可

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php

    <IfModule mod_php5.c>
           ......
    </IfModule>
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</Directory>

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

Anaconda 是非常好用的虛擬環境管理工具,但是GUI圖形界面Navigator無法在ubuntu開啟,只能用命令來控制虛擬環境,對於熟習視窗作業系統的使用者界面來說有點不方便

不過後來查到其實是可以開啟的,這樣在教學上就方便多了。

image

開啟其實很簡單,利用命令

source ~/anaconda3/bin/activate root
anaconda-navigator

也可以寫成.sh以後直接執行即可

1. 開啟文字編譯器,輸入以下內容


#!/bin/bash
source ~/anaconda3/bin/activate root
anaconda-navigator
chmod +x runme.sh


2. 存檔成anaconda.sh

3. 後續只要執行
bash anaconda.sh


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

當我們使用ESP32時,可以像傳統Arduino UNO使用中斷語法

中斷(Interrupt)這個功能,類似我們以前寫C#時的Callback,也就是物件導向裡面的事件(Event)驅動,當特定事件發生時,我們再去處理這件事所對應的功能Function。

舉個例子來說,在還沒學習到中斷以前,我們的來客報知機(人體感測器+錄放音機)是利用Loop內的不斷偵測,delay時間還不能太長,避免沒偵測到,而沒有觸發歡迎詞,但是如果來客報知機還有其他用途時,例如偵測光敏,就必須也寫在loop內,這樣兩個功能就可能互相干擾,delay時間可能不同之類。

中斷的功能則是把「偵測」、「觸發」的部份合併在一起,並且可以拉出去Loop外,讓系統來幫我們做,不過偵測只能數位偵測(HIGH或LOW),另外中斷內不放置Delay,越簡單越好。

以下範例程式,可以讓ESP32依據腳位14發生變化時,改變腳位2的燈號,例如當人體感測器發生變化時,會點亮LED燈。能偵測的變化有四種類型

LOW:狀態成為LOW就觸發
HIGH:狀態成為HIGH就觸發
CHANGE:狀態改變就觸發,例如LOW->HIGH,或HIGH->LOW都算
RISING:狀態由LOW->HIGH就觸發,反之無效
FALLING:狀態由HIGH->LOW就觸發,反之無效

最後當要取消中斷時,可以用detachInterrupt(GPIOPin);來取消即可


int interruptPin = 14;  //中斷腳位
int ledPin=2; //LED腳位
int state = 0;   //預設LED狀態LOW
void setup() {
  pinMode(ledPin, OUTPUT);  
  pinMode(interruptPin, INPUT); //人體感測輸入
  attachInterrupt(digitalPinToInterrupt(interruptPin), isr_Callback, CHANGE);  
  //CHANGE:狀態改變就觸發
}

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

最近在開發一些文字辨識的Python程式,用了EasyOCR或是Tesseract,效果說真的都很爛,無意間看到一個套件Paddle,測試一下發現效果非常好。

但是移植到其他電腦卻發現執行錯誤:

ModuleNotFoundError: No module named 'paddle.fluid.core_noavx'

稍微搜尋一下發現是CPU規格的問題,似乎是有些低階的CPU不包含AVX核心,所以一模一樣的安裝方法有些電腦可以,有些卻會出現問題,最好的方式是直接安裝不含AVX的2.0.1核心,安裝順序及步驟如下


#with avx
pip3 install paddlepaddle==2.4.0
#without avx
#pip3 install paddlepaddle==2.0.1 -f https://paddlepaddle.org.cn/whl/stable/noavx.html 
pip3 install common dual tight data prox
pip3 install paddle==1.0.2
pip3 install paddleocr==2.6.1.1
pip3 install numpy==1.23.1

 


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

安裝好Ubuntu之後,習慣會安裝Chrome瀏覽器,目前在Ubuntu的Chrome是藍色的Chromium版本,可以直接用安裝方法apt方式安裝

sudo apt install chromium-browser

不過安裝好後,-發現中文變成框框的亂碼:□ ,類似下圖

HnhAc.png

查了下網路,解決方式也很簡單,以超級使用者開啟編譯器

sudo gedit

然後開啟這個字形檔案

etc/fonts/conf.d/49-sansserif.conf

然後修改最後一個設定為<string>monospace</string>

然後重開Chromium即可~

image

 


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

在幾千萬年前,非洲的東岸有一群猴子,當時的非洲有著茂密的森林,因此猴子們愉快的生活在樹上,肚子餓就抓森林的昆蟲及果子來吃,而面對的掠食者也非常少,因此就這樣一直相安無事幾千萬年。

不過有一天發生大地震,地上裂開了一個大峽谷(東非大裂谷),硬生生的把東非切成兩半,由於地形發生變化,也嚴重影響當地的氣候,裂谷西半部的仍然中非大森林區,在此處居住的猴子們生活條件沒有發生變化,因此的生活方式依然跟千萬年一樣。

不過倒霉的是當時位在東邊的猴子了,森林逐漸消失,形成的是廣大無比的草原,猴子能棲身的樹木越來越少,食物也越來越匱乏,逼得這些猴子必須到地面尋找食物,而到了地面就必須面對獅子這種頂級掠食者,也讓這些猴子直立身體以觀察四周更早發現危險,而猴子間為了互相通知獅子靠近,發展出更多的群體溝通方式,逐漸形成早期的群體生活。

這些在東岸直立行走的猴子在當時可能會被全世界的猴子排擠吧。
西邊的鍵盤猴:「你看東邊那群猴子,用怪異的方式走路耶,笑死我了,上帝給我們四隻就是用來走路的,他們只用了兩隻,剩下兩隻不用是不尊重上帝賜予,會下地獄的」。

此時東岸猴子不僅要隨時面對獅子猛獸,還要到處遷徙尋找食物,相對於西邊的猴子食物充足每天悠閒著生活,真是充滿了苦難,不過呢,幾百萬年後,情勢逆轉了,由於東岸的猴子們必須每天跟自然對抗才能生存,因此更能適應環境,而解放的雙手也製造出更多的捕獵工具,成為比獅子更恐怖的頂級掠食者。

最後,他們踏出東岸,走向全世界,成為意義上的第一代人類。
而處在西岸的猴子們呢?經過了千萬年,他們依舊是猴子,生活在樹上。

 


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

最近有一個案子使用到RPI,程式用Python寫的,不過如果RPI意外被關機,或者停電,那麼就要重新啟動我寫的程式,如果希望系統啟動時,能順便把Python程式執行就更好了,在Windows時代,我們可以找到一個「C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp」,把程式放到裡面就可以隨著Windows開機自動執行,那麼RPI有沒有呢?

一個朋友剛好也問我這個問題,我說我研究看看,但是過幾天他說他找到資料,並且傳網址給我,感謝您

網址:https://forums.raspberrypi.com/viewtopic.php?t=294014

上面網址有列出四個方法,我用的是「System Method」,也就是說,任何使用者登入,都會啟動。

步驟:

1. 開啟自動程式程式:
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
image
內容是:
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash

2.將要執行的程式加到最後,例如我要執行的是Python程式,那麼加上完整路徑的Python
  2.1有Terminal視窗
    @lxterminal -e python3  /home/pi/Python/hello.py 
  2.2 如果不希望有視窗的話就
    @python3  /home/pi/Python/hello.py 

image

3.存檔:Ctrl+X、Y、Enter即可。

 

文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

Arduino雖然屬於C語言,但是很多副程式沒有包進去,最近要我拆解CSV檔案,也就是逗號分隔檔,發現Arduino沒有原生的split功能,本來想自己寫,但是Google一下就有了,在此付上


//此副程式用來拆解','分隔的字串
String getValue(String data, char separator, int index){
    int found = 0;
    int strIndex[] = { 0, -1 };
    int maxIndex = data.length() - 1;
    for (int i = 0; i <= maxIndex && found <= index; i++) {
        if (data.charAt(i) == separator || i == maxIndex) {
            found++;
            strIndex[0] = strIndex[1] + 1;
            strIndex[1] = (i == maxIndex) ? i+1 : i;
        }
    }
    return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}


使用時

String a1=getValue("aa,bb,cc",',',0);

就可以抓到aa了


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

網路真的太方便了,以前SSL要錢,還要定時手動更新,現在使用免費的SSL :Let’s Encrypt不僅可以免費,還可以自動定時更新憑證。
以下測試環境是Ubuntu20+Apache2

1. 申請SSL
 1.1 安裝certbot
       sudo apt install python3-certbot-apache
 1.2 申請SSL
       sudo certbot --apache -d abc.com.tw <-這是你的網域名稱
此時會問一堆問題
包括你的Mail, 還有一些選項,可以參考我下面的寫法
最後會有一個選項要選1或2
1:保留80port做非加密,再新增443做SSL
2:將80Port強制轉址到443,也就是80port幾乎無法使用了。
我這裡選擇2,也就是說如果有人輸入http://mqttgo.io,就會直接變成https://mqttgo.io
如果你不確定的話,可以建議使用"1"。
image

2. 自動更新
由於SSL 3個月到期,就要更新憑證,這裡可以安裝自動更新,語法如下:
sudo certbot renew --dry-run

3. pem轉jks

# convert certificate chain + private key to the PKCS#12 file format

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()