2022年11月25日 星期五

ld: library not found for -lintl

今天在我的Mac 上build packages 一直遇到如標體的錯誤,查了一下原因可能是 brew 裡面使用的config 跟系統的不一致的關係?
可以使用下面的方式確認

  • 1.查看brew 裡面使用的python版本 /bin/bash brew info python
  • 2. 查看系統 python3-config --ldflags

2022年11月21日 星期一

2022台灣9合一選舉之我見

最近看了公視的選舉報導,發現台灣其實還是有很多有想法的獨立候選人,但都因為缺乏政黨奧援
所以幾乎都是陪榜的,真的衷心希望 台灣有一天 政治可以改革,可以給這些有想法 堅持的候選人一些空間,例如透過一些審核機制或登記機制,讓他們有機會參與地方議會的運作,也能透過這些有理念的人來監督政府,就我的認知,有理念的人比較不容易受到收買

2022年11月15日 星期二

ubunut nfs auto mount on boot

host_ip:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
host_ip:/home               /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

2022年11月8日 星期二

Scale horizontally / Scale out vs Scale vertically / Scale up

horizontal scale 極為 水平擴展,指的是增加更多的機器資源來擴展系統的容量
vertical scale 稱為 垂直擴展,指的是透過增加更多的cpu / memory /disk space 來達到擴展系統容量

2022年11月2日 星期三

Microsoft Rewards 挑戰答案

https://account.microsoft.com/rewards/

點選上述的微軟獎勵,配合答題,可以參考下列的答案作答

【新手教學】
Q:在 Microsoft 購物就能賺取點數。如果您可以挑選 Microsoft 提供的其中一項優惠,您會選擇哪一項?
A:XBOX LIVE GOLD 會員資格

Q:等我們準備好之後,您就會獲得 50 點 - 快來設定兌換目標!
A:NT$60 MICROSOFT 禮物卡

【Reward 挑戰】
Q:Microsoft Rewards 是在哪一年推出?
A:2016

Q:在哪裡購物可以賺取 Microsoft Reward 點數?
A:Microsoft Store

Q:在 Microsoft Store 消費每 __ 元可賺取 1 點
A:30(新台幣)

Q:一個月內累積多少點才能晉升到第 2 級?
A:500點

【瀏覽器免費贈點機智問答】
Q:與其他瀏覽器相較之下,Microsoft Edge 可在 Windows 10 上讓什麼延長 36%-53%?
A:電池續航力

Q:Microsoft Edge 是唯一有 ___ 功能的瀏覽器,可讓您撰寫網頁筆記。
A:網頁筆記

Q:在 Microsoft Edge 中,誰會在您停留的相同網頁上回答問題?
A:Cortana

Q:SmartScreen 篩選工具能在 Microsoft Edge 中為您提供什麼樣的防護?
A:網路釣魚和惡意程式碼

【Microsoft 機智問答】
Q:Microsoft 在美國哪一州創立?
A:新墨西哥州

Q:Windows 95 推出時的主題歌「Start Me Up」是哪個樂團唱的?
A:滾石合唱團

Q:哪一位演員與共同創辦人比爾蓋茲一同演出 2008 年的 Microsoft 廣告?
A:Jerry Seinfeld

Q:Microsoft 共同創辦人保羅艾倫擁有哪一支美式足球隊?
A:西雅圖海鷹

Q:Microsoft 最近收購了哪一個創於瑞典的品牌?
A:Minecraft

2022年10月10日 星期一

iTerm2 is very slow when start

for i in $(seq 1 10); do /usr/bin/time /bin/zsh -i -c exit; done
        6.75 real         4.22 user         1.99 sys
        6.68 real         4.26 user         1.83 sys
        6.02 real         4.13 user         1.79 sys
        5.81 real         4.01 user         1.72 sys
        5.81 real         4.01 user         1.73 sys
        6.11 real         4.22 user         1.82 sys
        6.55 real         4.18 user         1.75 sys
        6.57 real         4.21 user         1.75 sys
        6.58 real         4.15 user         1.75 sys
        6.42 real         4.05 user         1.74 sys

2022年10月5日 星期三

iTerm 2 支援 zModem 傳輸的方法

一直以來都是使用Zoc 來配合zModem 傳輸 (lrzsz), 但最近因為要連線的ssh server需要經過多次跳板,使用Zoc設定上不是那麼直覺,剛好又有傳輸檔案的需求,就想到說可以透過lrzsz這神奇套件來達成目的,在網路找了一下,還真的是有現成的可以使用,使用的套件在下面,重點在於需要額外安裝lrzsz 另外,透過在iTerm上增加Trigger point 來達成
repo:
https://github.com/robberphex/iTerm2-zmodem

2022年10月1日 星期六

如何讓az cli 或 aws cli 可以透過 proxy 甚至可以使用Burp 之類的penetration tool

基本上要解決的問題可以分為下列幾個問題
1)要如何讓az cli 或 AWS cli 透過proxy server
一般來說,如果軟體有特別的支援,就會有相關的設定畫面,如果沒有的話,通常可以透過環境變數去更改http_proxy 跟 https_proxy
例如:
export http_proxy="http://127.0.0.1:8080"
export https_proxy="http://127.0.0.1:8080"
export https_proxy="socks5://127.0.0.1:9999"

2)如何讓az cli 跟aws cli 可以使用self-sign certificate?

Google AdSense 收益

最近終於收到人生中的第一筆Google Adsense 收益。也由於早年設定的西聯在台灣已經不能使用,所以只好去更改支付方式,考量我這種超小流量的用戶,只要方便即可,就直接選了電匯,反正有比沒有好,由於我個人有國泰世華的外幣銀行帳戶,就直接選擇國泰,詳細的匯款資料,如果有使用國泰的App可以到你的外幣帳戶,直接點選"帳戶資訊"你需要的資料就會在上面,等到Google 匯款給你,大概1到2天就會收到國泰的通知,要你去解匯,也旨蓄要再銀行的app上直接操作就可以入帳,實務上,銀行通知人員也會既操作解說的文件給你,滿簡單易用

2022年9月30日 星期五

RedisJson 跟 mongodb 效能比較

參考連結:https://redis.com/blog/redisjson-public-preview-performance-benchmarking/

今天聽到別人分享,在比較RedisJson 跟mongodb 效能比較,看起來RedisJson 效能真的很不錯,特別是在讀取速度方面

2022年9月29日 星期四

硬碟單位 GB and GiB的差別

Things need to know

  1. bit: 簡寫 b 是數據的最小單位
  2. byte: 簡寫B, 數據儲存單位 1 Byte= 8 Bit

目前比較流行的兩種單位,

  1. SI (Internation System of Units), 也有人寫Data(Metric):使用10進位換算
    > 1 MB = 106 bytes = 1,000,000 bytes = 1000 kilobyte
    > 1024 MB = 1 gigabyte(GB)

2.IEC. (internation Electrotechnical Commission) 也有人稱Data(IEC):全部採用2進位計畫

1 MB= 220 bytes = 1048576 bytes = 1024 kibibytes
1024 MiB = 1 gibibyte (GiB)

strace encouter : Operation not permitted

strace -fp 1
strace: Could not attach to process. If your uid matches the uid of the target process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf: Operation not permitted
strace: attach: ptrace(PTRACE_SEIZE, 1): Operation not permitted

Get root access

查看 /etc/sysctl.d/10-prace.conf

kernel.yama.ptrace_scope = 1

把下列的值改成0 , 或者
echo > /proc/sys/kernel/yama/ptrace_scope

2022年9月22日 星期四

解壓縮軟體

pigz 可以使用最多的cpu

zstd :速度慢且佔用最多資源

pigz

用來取代gzip 可以指定使用的cpu cord, 但只能用來處理檔案,無法處理目錄,所以還是得配合tar 來處理解壓縮
tar 根pigz 配合方式,一個是單純使用 | 來做組合技

tar -c /path/to/dir | pigz -1 -p [cpu] 

搭配使用split 來切割檔案

tar -c /path/to/dir | pigz -p 65 -c | split -a 5 -d -b 10G - split_file.gz

解壓縮時,就跟zip 分割檔案一樣,先把分割的檔案組合

 cat split_file.gz* >  split_file.gz
 pigz -p 64 -dc split_file.gz | tar zx -

卡片和筆記法軟體-obsidain 介紹

最近開始學習使用obsidian 寫筆記,主要是用來寫上課的筆記
目前的使用方法如下

1.針對 課程 先寫一頁 筆記

然後在下面根據每週上課的時間,再產生一些日期連結
例如 [[0917-II-1-中藥概論-趙嶸]]

2.如果裡面有考古題,或需要背誦的部分,再利用obsidian 的插件
obsidian-to-anki 轉到 anki 字卡

3.筆記內容遇到,有上網google的,可以透過套件
AutoLinkTitle 自動幫你捉取網頁的標體,這樣可以節省筆記時間
另外,另外再貼上圖片的部分,原本obsidian的圖片,另外copy&paste會自動再同個目錄下產生圖片,雖然搭配插件Local image 你可以事後再自己移動,obsidain 會幫你更動連結,但還是不是那麼方便閱讀,後來找了一個插件 Custom Attachment Location 可以指定 附件的路徑與圖片命名法則

4.筆記的連結
如果在這課程的筆記中需要連結到其他筆記
先用兩個中括號選取到要連結的筆記,然後再打井字鍵#
連結到筆記中的標題

[[連結筆記#標題]]

5.事後筆記複習
a.可以搭配 outgoing link to 筆記 或 Backlinks to 筆記來達到筆記連結的狀態,也可以使用graph view 來看筆記中間的關聯

2022年9月6日 星期二

2022年8月13日 星期六

Netgear A6210 wifi usb adaptor doesn't work on Mac

https://d86o2zu8ugzlg.cloudfront.net/mediatek-craft/drivers/MT7612_7610U_D5.0.1.25_SDK1.0.2.18_UI5.0.0.27_20151209.zip

用鄭運鵬換林智堅,真的完全不懂人民在想什麼

人民要的是,知錯能改,換鄭運鵬,這個之前瞎挺的傢伙是要幹嘛?他給我的好感比林智堅更差,林智堅除了抄襲不能錯硬凹讓我反感外,對他也沒什麼特別的討厭,但鄭運鵬這傢伙之前講過的搞笑話實在很多,對他印象實在爛到極點,這民進黨真的跟人民越離越遠

2022年8月11日 星期四

How to install Windows 11 in Paralles on MAC

  1. Windows 11 需要TPM modules 才能正常安裝使用,
  2. 在沒有支援TPM的mac 上要使用windows 11 現在可以透過Parallels 上的virtual Trusted Platform Module(TPM)
  3. 只要在config->Hardward 新增TPM chip 即可,
    要是沒有看到,就要先檢查你原本的windows vm 是不是使用Legacy Bios ,因為
    TPM只能做用在 UEFI/EFI BIOS, 所以如果是使用 legacy的BIOS目前是會看不到
    TPM Chip

  1. 但支援新的bios 只有新的VM 才有支援。如果是原本舊的VM的話,就可以參考下列我從網路上查到的轉換步驟去自己作轉換 1. 開啟windows vm
    2. 輸入 mbr2gpt /validate /allowFullOS
    3. mbr2gpt /convert
    4. 關閉windows vm
    5. 從Mac 開啟VM file , 通常需要點選 "show Package Contents", 找到裡面的config.pvs
    6. 使用任何的文字編輯器去編輯檔案
    7. 把下列兩行裡面的 0 改成 1
    <EfiEnabled> from 0 to 1
    <EfiSecureBoot> from 0 to 1
    1. 存擋
    2. 現在可以從Parallels 開始加入TPM module
    細節可以參考這篇wiki Migrating a Windows 10 VM to Windows 11 in Parallels Desktop

原文連結:https://kb.parallels.com/122702

如果還是沒看到TPM選項,就檢查下面開機選項是否有設定vm.efi

Open Parallels
If you have a VM already, shut it down
Open the Virtual Machine’s configuration
Go to Hardware
Go to Boot Order
Go to Advanced Settings
In Boot Flags, type this command:
vm.efi.secureboot=1

蔡英文下令全黨「挺堅」

民進黨這樣跟台大對幹,實在讓我感到很無言,對於之前蔡英文總統的博士學位,我本來還是相信的,現在這樣一搞,我不只對民進黨失望,連帶也會懷疑之前的博士學位事件,難不成真的是有問題,就像高端。講了這麼久。到現在連個認證都沒有。真的是把民眾黨傻子嗎?

2022年8月10日 星期三

林智堅 論文門事件

最近林智堅論文抄襲案,被台大判定抄襲,撤銷碩士學位,但卻看到民進黨全黨相挺,還有幾個以前覺得形象很好很正直的政治人物,例如陳建仁,鄭文燦也是挺到底,就讓我覺得是我的理解真的有問題,還是我真的搞錯這些政治人物,其實他們的形象也是演出來的,其實他們根本就不是那麼正派的政治人物,我真的覺得不要再挑戰普羅大眾的智慧了,學術抄襲這種一翻兩瞪眼的爭議,何必要硬幹到底,不懂這樣做的好處是什麼,測試民進黨的死忠派?過去我追隨的民進黨是有理想的政黨,現在我實在是提到民進黨三個字,就實在支持不下去,搞不懂為什麼民進黨的支持度真的還可以這麼高,真是顛覆我的想像

Netgear RBK 850 wifi connection dropped frequently

My home network encounter the wifi connection dropped issue recently.
I have tried to use Wifi signal analyzer to use specific channel id to avoid conflict with neighbor's wifi AP, but it doesn't work.
Today I found there is a new firmware released, just take a note to record it.

2022年8月8日 星期一

Synology DSM 升級問題

pgsql_analyzer.sh

#!/bin/bash

##################
# Utility functions
##################

syno_getopt()
{
    local opt_cmd="$1"
    shift 1

    while getopts "$opt_cmd" opt; do
        if [[ -z "$OPTARG" ]]; then
            eval "opt_${opt}"="-"
        else
            eval "opt_${opt}"="$OPTARG"
        fi
    done
}

cecho()
{
    local color="$1"
    local message="$2"

    local NC='\033[0m'
    local code

    case "$color" in
        red)    code="1;31" ;;
        green)  code="1;32" ;;
        blue)   code="1;34" ;;
        gray)   code="0;37" ;;
        yellow) code="1;33" ;;
        *)      code="1;37" ;;
    esac

    code='\033['$code'm'
    echo "${code}${message}${NC}"
}

errecho()
{
    echo -e "$@" >&2
}

LOG()
{
    local level="$1"
    local message="$2"
    local timestamp="$(date +'%Y-%m-%d %H:%M:%S')"

    # Echo to screen
    local color
    case "$level" in
        "ERROR"|"WARNING") color="red" ;;
        "NOTICE")          color="blue" ;;
        "INFO")          color="green" ;;
        *)                 color="gray" ;;
    esac

    formatted=$(cecho yellow "$timestamp ")$(cecho $color "[$level] $message")
    errecho $formatted

}

log_check_result()
{
    local name="$1"
    local result="$2"

    if [[ "$result" = "true" || "$result" = "0" ]]; then
        LOG INFO "Running $name ... Pass"
        return 0
    else
        LOG WARNING "Running $name ... Error found, please check messages above."
        return 1
    fi
}

db_query()
{
    local db="$1"
    local sql="$2"

    psql -At -F $'\t' -U postgres $db -c "$sql"
}

##################
# Test functions
##################

findfile()
{
    local pattern="$1"
    local path="$2"
    local files="${path} ${path}.1 ${path}.1.xz ${path}.2.xz"
    local limit=20
    local result=false
    local extentsion file msg

    for file in $files; do
        if [[ ! -f "$file" ]]; then
            continue
        fi

        LOG DEBUG "Searching error message from file: $file ..."
        extension="${file##*.}"

        case "$extension" in
            gz)
                msg="$(zcat "$file" | grep "$pattern" | tail -n $limit)"
                ;;
            xz)
                msg="$(xzcat "$file" | grep "$pattern" | tail -n $limit)"
                ;;
            *)
                msg="$(cat "$file" | grep "$pattern" | tail -n $limit)"
                ;;
        esac

        if [[ -n "$msg" ]]; then
            result=true
            echo "$msg"
            break
        fi
    done

    $result && return 0 || return 1
}

has_permission()
{
    local path="$1"
    local permission="$2"
    local user="$3"
    local group="$4"
    local result=true
    local re f_permission f_user f_group

    # Check path exists
    if [[ ! -e "$path" ]]; then
        LOG ERROR "File or directory does not exists: $path"
        return 1
    fi

    # Check path permission
    if [[ -n "$permission" ]]; then
        re="${permission//-/.}"
        f_permission="$(stat -c "%A" "$path")"

        if [[ ! "$f_permission" =~ $re ]]; then
            LOG ERROR "Permission $permission is not match, path: $path, permission: $f_permission"
            result=false
        fi
    fi

    # Check path user
    if [[ -n "$user" ]]; then
        f_user="$(stat -c "%U" "$path")"

        if [[ "$f_user" != "$user" ]]; then
            LOG ERROR "User $user is not match, path: $path, user: $f_user"
            result=false
        fi
    fi

    # Check path group
    if [[ -n "$group" ]]; then
        f_group="$(stat -c "%G" "$path")"

        if [[ "$f_group" != "$group" ]]; then
            LOG ERROR "Group $group is not match, path: $path, user: $f_group"
            result=false
        fi
    fi

    $result && return 0 || return 1
}

##################
# Test cases
##################


disklog_check()
{
    local files="/var/log/dmesg /var/log/messages"
    local result=true
    local file

    for file in $files; do
        if findfile "exception Emask\|status: {\|error: {\|SError: {" "$file"; then
            LOG ERROR "Disk error(s) are found in $file"
            result=false
        fi
    done

    for file in $files; do
        if findfile "EXT4-fs .*: error\|EXT4-fs error\|EXT4-fs warning\|read error corrected" "$file"; then
            LOG ERROR "Disk ext-4 error(s) are found in $file"
            result=false
        fi
    done

    log_check_result disklog_check $result
}

tune2fs_check()
{
    local devs="/dev/md0 /dev/sda1 $(cut -d ' ' -f 1 /run/synostorage/volumetab)"
    local result=true
    local dev

    for dev in $devs; do
        if tune2fs -l "$dev" 2> /dev/null | grep "FS Error"; then
            LOG ERROR "Filesystem error(s) are found in tune2fs -l $dev"
            result=false
        fi
    done

    log_check_result tune2fs_check $result
}

permission_check()
{
    # Check directory permission
    local volume="$(servicetool --get-service-volume pgsql)"
    local result=true

    has_permission "$volume"                          drwxr-xr-x                   || result=false
    has_permission "${volume}/@database"              drwxr-xr-x admin    users    || result=false
    has_permission "${volume}/@database/pgsql"        drwx------ postgres postgres || result=false

    log_check_result permission_check $result
}

user_check()
{
    # Check root user name and postgres entry point
    local count
    local result=true

    # Check root name
    count=$(cat /etc/passwd | grep -c ':x:0:0:')

    if [[ "$count" -ne 1 ]]; then
        LOG ERROR "User: root has $count rows in /etc/passwd"
        result=false
    fi

    if ! cat /etc/passwd | grep 'root:x:0:0:' > /dev/null 2>&1; then
        LOG ERROR "User: root is not found in /etc/passwd"
        result=false
    fi

    # Check postgres entry point
    count=$(cat /etc/passwd | grep -c 'postgres')
    if [[ "$count" -ne 1 ]]; then
        LOG ERROR "User: postgres has $count rows in /etc/passwd"
        result=false
    fi

    if ! cat /etc/passwd | grep postgres | grep '/var/services/pgsql:/bin/sh' > /dev/nuill 2>&1; then
        LOG ERROR "User: postgres entry point(/var/services/pgsql:/bin/sh) has been modified"
        result=false
    fi

    log_check_result user_check $result
}

pglog_check()
{
    local result=true
    if findfile "FATAL" "/var/log/postgresql.log"; then
        LOG ERROR "Fatal error(s) are found in postgresql log"
        result=false
    fi

    log_check_result pglog_check $result
}

volume_check()
{
    local volume="$(servicetool --get-service-volume pgsql)"
    local result=true
    local avail

    if ! df -BG | grep -q "$volume"; then
        LOG WARNING "Failed to parse volume size, Please check available space of volume manually"
        log_check_result volume_check false
        return
    fi

    # Get available volume space in Gigabytes
    avail=$(df -BG | grep "$volume" | awk '{print $4}' | sed 's/G//g')

    if ((avail <= 1)); then
        LOG ERROR "Available volume space is smaller than 1GB"
        result=false
    fi

    log_check_result volume_check $result
}

calendar_check()
{
    local result=true
    local answer=n

    if tail -n 20 /var/log/postgresql.log | grep '/tmp/synocalendar'; then
        result=false
        read -p "Hit Calendar bug, missing directory: /tmp/synocalendar. Do you want to fix it? (Y/n):" answer
        echo ""

        if [[ -z "$answer" || "$answer" = "Y" || "$answer" = "y" ]]; then
            LOG INFO "Directory created: /tmp/synocalendar. Restart pgsql manullay later ('synoservice --restart pgsql' on DSM6, '/usr/syno/bin/synosystemctl restart pgsql-adapter' on DSM7)."
            mkdir /tmp/synocalendar
            chown postgres:postgres /tmp/synocalendar
        fi
    fi

    log_check_result calendar_check $result
}

##### Main and help function

rebuild_database()
{
    local volume="$(servicetool --get-service-volume pgsql)"
    local path="${volume}/@database/pgsql"
    local dsm_version=`synogetkeyvalue /etc.defaults/VERSION major`

    LOG INFO "Rebuilding database ..."
    
    if [[ "$dsm_version" = "7" ]]; then
        if ! /usr/syno/bin/synosystemctl stop-service-by-reason rebuild pgsql-adapter; then
            LOG ERROR "Failed to stop pgsql"
            return 1
        fi
    else
        if ! synoservice --pause-by-reason pgsql rebuild; then
            LOG ERROR "Failed to stop pgsql"
            return 1
        fi
    fi

    BACKUP_PATH=${path}-$(date -u +"%Y%m%dT%H%M%SZ")
    mv "$path" "$BACKUP_PATH"
    LOG INFO "Backup Success: $BACKUP_PATH"
    rm /var/services/pgsql

    if ! servicetool --set-pgsql; then
        LOG ERROR "Failed to create psgql directory"
        return 1
    fi

    if [[ "$dsm_version" = "7" ]]; then
        if ! /usr/syno/bin/synosystemctl start-service-by-reason rebuild pgsql-adapter; then
            LOG ERROR "Failed to start pgsql"
            return 1
        fi
    else
        if ! synoservice --resume-by-reason pgsql rebuild; then
            LOG ERROR "Failed to start pgsql"
            return 1
        fi
    fi
    LOG INFO "Rebuild done."
}

vacuum_all()
{
    local result=true

    ##### List all databases
    dbs="$(db_query postgres 'SELECT datname FROM pg_database WHERE datistemplate = false')"
    echo "Database list: $dbs"


    ##### Vaccum
    for db in $dbs; do
        # Skip large size database
        if [[ "$db" = "synoips" ]]; then
            LOG DEBUG "Skip to vacuum $db"
            continue
        fi

        LOG DEBUG "Vacuuming $db"
        if ! db_query $db "VACUUM FULL"; then
            LOG WARNING "Failed to vacuum $db"
            result=false
        fi
    done

    log_check_result vacuum_all $result
}

recreate_database()
{
    local package="$1"
    local db=$(cat /var/packages/${package}/conf/resource | jq -r '.["pgsql-db"]["create-database"][0]["db-name"]')
    local db_tmp="${db}_$(date +'%Y%m%d%H%M%S')"

    if ! db_query postgres "ALTER DATABASE $db RENAME TO $db_tmp"; then
        LOG ERROR "Failed to rename database from $db to $db_tmp"
        return 1
    fi

    if ! synopkghelper update $package pgsql-db; then
        LOG ERROR "Failed to create database for package: $package"
        return 1
    fi
}


show_usage()
{
    cat << EOF
Description:
    Analysis pgsql issues
Usage:
    $0 [options]

Options:
    -h            Show this help
    -r            Rebuild pgsql database
    -d <package>  Recreate database
    -v            Vacuum all databases (exluding synoips)

EOF
}

main()
{
    syno_getopt "hvrd:" "$@"
    shift $((OPTIND-1))

    if [[ -n "$opt_h" ]]; then
        show_usage
        return
    fi

    ##### Rebuild database
    if [[ -n "$opt_r" ]]; then
        rebuild_database
        return $?
    fi

    ##### Vacuum every databases
    if [[ -n "$opt_v" ]]; then
        vacuum_all
        return $?
    fi


    ##### Recreate database for package
    if [[ -n "$opt_d" ]]; then
        recreate_database "$opt_d"
        return $?
    fi

    ##### Check
    pglog_check
    disklog_check
    tune2fs_check
    permission_check
    user_check
    volume_check
    calendar_check
}

main "$@"

2022年7月26日 星期二

Enable debug with Safari

defaults write com.apple.Safari IncludeInternalDebugMenu 1

Markdown 語法

標題

支援兩種標題語法 Setext (Structure Enhanced Text) 跟 atx (the true structured text format)

Setext

標題一

標題二

這是標題一
========
這是標題二
--------

atx

在前面插入1-6 個 # ,對應標題1-6

# 標題1
## 標題2

區塊引言

區塊引言
區塊引言,可以有階層

> 區塊引言
>> 區塊引言2

超連結

這是google 官網

[這是google 官網](https://www.google.com "這是提示")

![](https://www.gstatic.com/images/branding/googlelogo/1x/googlelogo_color_68x28dp.png)

2022年7月25日 星期一

What is CIDR

CIDR: Classless Inter-Domain Routing, 無層級網域間路徑選擇 , 主要是用來解決IP 地址不夠用的一種技術,主要規劃於RFC 1518 跟RFC 1519, 這種方法又稱為 Supernetting.

makefile check

$ cat -e -t -v mk.t

2022年7月20日 星期三

聯邦信用卡 使用一卡通money 繳卡費

手上有一張聯邦微風卡,純粹是因為偶而還是會在台北車站微風館場買東西,所以偶而會使用,但繳款上一直很麻煩,直到最近偶然發現聯邦信用卡的卡費,竟然可以使用一卡通money卡繳交,再加上最近一卡通也允許免費從line bank去儲值且免手續費,這樣繳起卡費突然覺的便利許多

2022年7月14日 星期四

Synology NAS 更新後,遇到Video Station無法啟動問題

最近在更新系統到DSM 7.1-42661 Update 3後,發現先遇到Apache server無啊起動,然後之後發現Video Station也無法啟動,然後ssh 登入系統後,會看到錯誤訊息PostgresSQL daemon not running. 檢查一下應該是在更新過程中,權限有問題,只要把權限改成postgres 即可正常啟動,簡單記錄一下大概的步驟
1.chown -R postgres:postgres /var/services/pgsql
2.systemctl start pgsql-adapter.service

2022年6月19日 星期日

Team of Teams 讀後心得

中文書名“美軍四星上將教你打造黃金團隊”
這本書是前特遣部隊指揮官,根據他改造特遣隊已應變複雜多變的基地組織的心得,書在2014年出版,分為五個部分,從一開始談到,面對基地組織複雜多變的恐怖行動,特遣隊如何從一路挨打到可以順利執行任務,作者提出要應變複雜多變的環境,就讓組織一個由小團隊構成的大團隊,讓團隊可以自主應變,而不是只能等待上級給命令,然後要達成建立這樣具有應變能力的團隊,需要的就是一個體系,可以達成資訊分享的體系,大家分享資訊,建立共識,以解決面對基地組織的問題

水塔-液面控制器更換

昨天自己清洗頂樓水塔,洗好後,把抽水馬達開關開啟,卻發現沒有進水,檢查了所有開關卻沒發現問題,後來自己測試,偶然發現拉扯浮球時,似乎偶然可以啟動抽水馬達,然後上網查了一下,就是所謂的液面控制器故障,上網看了一下教學影片,更換也不難,一般來說找水電工來,通常會收費500-1000中間,如果有熟識的,可能會收個300工本費,網路上自己買材料的話,大概100塊,我自己是到振宇五金專賣店購買,選了跟我家水塔一模一樣的雷達牌,總共花了135塊,由於這廠牌名字就是RADAR(雷達),所以開始查詢資料時,很多都寫這雷達壞掉了,我還想說看不出來是如何使用雷達控制水塔水位,後來才知道其實只是一個簡單的微動控制器,頂樓水塔用的,就是把馬達接出來的中性電線接在A組開關上,然後兩個浮球,就是控制高水位跟低水位使用的

2022年6月15日 星期三

關於農作物災害補助的一些粗糙想法

最近因為梅雨季,造成農作物一些災情。加上這兩年因為covid-19 所以政府對很多產業都採取補助撒錢的方式把大家的胃口養大了,動不動就要求補助,然後補助A縣市農產品A , B縣市沒補助就會來抱怨,這大概是這一年來電視新聞常看的場景,就在剛剛腦中突然浮出一個想法,
既然政府對於民生用品採取的主要措施就是維持物價穩定,為什麼不用類似期貨貸款的方式給於補助?例如今年因為災損,本來要補助給農民的錢,就改用預付款的方式,用一個合理的保障價格*收購的價錢,要求領取補助的農民,要在未來的某一年,當農作物價格超出保障收購的價格時,就要讓政府可以用補助時,簽訂的價格來收購農作物,如果農民已經沒種植了,就要返回補助金之類的,這樣也不會白白補助,又可以幫助農民度過難關,還可以穩定物價

2022年6月7日 星期二

中華電信光世代500/250 - 1099元

最近跟上網路上的熱潮把家裡的光世代順勢升到500/250,然後價格反而還降低,還額外送了一台全屋通,雖然是wifi 5 但額外給的還不錯,另外還外加了hami video 6個月的免費帳號,因為要重新設定,所以又順便複習一下要設定的中華電信預設的帳號密碼
1.全屋通wifi
就是連上你分配到的wifi然後看default 的gateway這比較不一樣的是跟一般常見,default gateway 在xx.xx.xx.1不同,我家裡的預設default gateway 是192.168.10.53 所以就是在瀏覽器打入 http://192.168.10.53
預設帳號:cht
預設密碼:[型號末四碼]+[mac address末四碼]
要看你的機型,像我分配到的就是WE410443-TC的型號,所以預設密碼就是43tc[mac address末四碼]

其他常見數據機型號
密碼 找數據機背面(底部)規格貼紙上MAC最後四碼
RTF8207W:207w四碼
I040GW:40gw四碼
H660WM:60wm四碼
P880:p880四碼
P883:p883四碼

固定ip/浮動ip切換

xxxxx@wifi.hinet.net =>浮動ip帳號
xxxxx@ip.hinet.net. =>固定ip帳號

2022年5月20日 星期五

如何在synology nas內下載動畫瘋裡的卡通

1.開啟ssh 登入
2.登入到nas內
3.下載aniGamerPlus.git
git clone https://github.com/miyouzi/aniGamerPlus.git
4.安裝python 套件管理軟體

sudo python3 -m ensurepip
sudp python3 -m pip install --upgrade pip

5.安裝aniGamerPlus 必要python套件

sudo python3 -m pip install -r requirements.txt

6.準備開始下載動畫(避免連線中斷,可以搭配使用screen防止連線中斷)

7.選者要下載的影片
https://ani.gamer.com.tw

8.開始下載

python3 aniGamerPlus.py -s 14882 -r 720 -m all

餐數說明
-s sn數字,就是你要下載觀看影片網址後面的數字
-r 解析度,如果非vip 通常只能下載到720
-m 模式:如果想要一次下載多集,既選擇all

Win10 use ssh-add command to add ssh key encounter error: Could not open a connection to your authentication agent

解法:使用git 裡的shell
cd path-to-Git/bin (for me : cd C:\Program Files\Git\bin)
bash
exec ssh-agent bash
ssh-add MYKEY

2022年5月14日 星期六

從NBA 人才選擇談管理

最近熱火 Jimmy Buter 帶領熱火打敗76人進入東區冠軍賽後再回休息室時,口中唸說,當初選了Tobias Harris 不選我,其實應該所有的管理者都看得出來Jimy Buter 比Tobias Harris 能力還好,但管理者在做決定時,個人能力絕對不是唯一考量,根據Yaron Weitzman 提出的當初交易細節如下

  • 高層擔心Sinmons 跟Jimmy Buter的球權問題
  • 總教練Brett Brown 跟Jimmy Buter不合問題
  • Harris年紀較輕
  • 先補Horford幫中鋒替補,補足球隊的弱點

當然現在以結果論來講,76人高層是完全做了一連串錯誤的決定,當初擔心跟Jimmy Buter 不合的Brown跟Simons都走了,球隊也失去的兢爭力,回歸到選擇提拔對的人對一個公司競爭力的影響力有多大,這是不是就看得出來呢?

2022年5月12日 星期四

Amazon 購物

最近因為amazon有滿60塊美金免運費的活動,所以上網站買了幾次,最近才發現他這滿60塊是指折扣前,而不像國內的購物網,都是要折扣後滿才能使用免運,然後網路找了一下,向下列這種有amazon的折扣網,滿適合拿來搭配你要買的東西,湊60塊免運門檻
https://gonglue.us/deals

2022年5月6日 星期五

台灣:電子圍籬智慧監控系統

台灣的電子圍籬智慧監控系統,主要是透過疾管署,每天會發送遭列管者的手機號碼給台灣的五大電信業者,而業者則會將手機定位固定上傳到電子平台。者要列管者離開系統劃分的基地範圍(包括關機),系統就會自動發送“告警簡訊”給當事者跟第一線的監控單位

2022年5月1日 星期日

Mac Wifi connection Dropping frequently

Recently My laptop MBP 2018 encounter the network issue frequently. The wifi will drop connection randomly. The symptom is lost connection with default gateway. Here is the note that I used to record what I did for troubleshooting.

1.check the wifi status

netwroksetup -getinfo Wi-Fi

netstat -nr -f inet

list all network devices to get wifi device id

networksetup -listhardwareports

The most WiFi device id is en0
networksetup -getairportpower en0

disable airdrop

sudo ifconfig awdl0 down

The Fix:
Disable WiFi
Open Finder
Press
Cmd+Shft+G
to go to the folder
/Library/Preferences/SystemConfiguration/
Delete (or move) the following files:
com.apple.airport.preferences.plist
NetworkInterfaces.plist
preferences.plist
Restart your computer
Re-enable WiFi

2022年4月18日 星期一

What is blockchain(區塊鏈)

甲骨文這個影片介紹大概是我看過能在最短時間介紹blockchaing的影片了,不到一分鐘
區塊(Block)跟鍊(Chain)是兩個不同的東西
https://www.oracle.com/tw/blockchain/what-is-blockchain/

2022年3月29日 星期二

Azure storage queue API return "The value for one of the HTTP headers is not in the correct format."

The cause was possible backward incompatible issue. After the view researching, it could be resolved by changed the request header 'x-ms-version' from the one your library used to old one "2019-07-07"

2022年3月25日 星期五

How to trigger a kubenetes schedule job manually

kubectl create job --from=cronjob/[cronjob name] [new job] -n [namespace]
sometimes you may encounter the error such as
"error: unknown object type *v1beta1.CronJob"
it was caused by the kubectl is different version. you can download the old one to resolve issue

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:58:47Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.15", GitCommit:"0f9140665765825f8a4187cefd055e4b350b4a36", GitTreeState:"clean", BuildDate:"2021-09-17T23:04:02Z", GoVersion:"go1.15.15", Compiler:"gc", Platform:"linux/amd64"}
WARNING: version difference between client (1.23) and server (1.19) exceeds the supported minor version skew of +/-1

for me, my kubectl client is v1.23.5, but server is older version wiht v1.19.15, therefor I downgraded to the older one to resolve the issue
curl -LO https://dl.k8s.io/release/v1.19.15/bin/linux/amd64/kubectl

2022年3月20日 星期日

以銅為鏡可以正衣冠;以史為鏡可以知興替;以人為鏡可以明得失

人類總來都沒進步到哪裡去,歷史總是一而再再而三地重演,不管是俄侵烏發動的戰爭,或者現在政治上的紛亂,總是逃離不開歷史的重演

2022年3月9日 星期三

How to convert the ^M linebreak in a bash script

Use vim to edit the file and convert it to the unix format
:set ++ff=dos ==> ms-dos format
:set ff=unix ==>.unix format

2022年3月6日 星期日

How to group Ankiweb deck

use "::" to separate it
for example:

  • group1::sub1
  • group1::sub2

it will group decks "sub1" and "sub2" in folder "group1"

How to generate Anki Decks

1.use iphone to take a picture

  • you can choice use iphone to take OCR or directly take picture and covert it by yourself (From .HEIC format to png format)

2022年3月4日 星期五

如何判斷server 是否有使用load blance

如何判斷server 是否有使用load blance

使用hping2. 來看packets loss 或者 是否有使用load blance ,可以看到要是回應的id 有兩組號碼區間在回覆,吉表示有兩組server 在後段服務

`sudo hping2 -c 10 -i 1 -p 443 -S google.com

HPING google.com (en0 142.251.43.14): S set, 40 headers + 0 data bytes
len=52 ip=142.251.43.14 ttl=55 id=15396 sport=443 flags=SA seq=0 win=65535 rtt=9.1 ms
len=52 ip=142.251.43.14 ttl=119 id=39684 sport=443 flags=SA seq=1 win=65535 rtt=7.5 ms
len=52 ip=142.251.43.14 ttl=119 id=47763 sport=443 flags=SA seq=2 win=65535 rtt=9.8 ms
len=52 ip=142.251.43.14 ttl=55 id=3033 sport=443 flags=SA seq=3 win=65535 rtt=9.5 ms
len=52 ip=142.251.43.14 ttl=118 id=61592 sport=443 flags=SA seq=4 win=65535 rtt=7.5 ms
len=52 ip=142.251.43.14 ttl=119 id=62460 sport=443 flags=SA seq=5 win=65535 rtt=10.2 ms
len=52 ip=142.251.43.14 ttl=119 id=4097 sport=443 flags=SA seq=6 win=65535 rtt=7.5 ms
len=52 ip=142.251.43.14 ttl=119 id=15781 sport=443 flags=SA seq=7 win=65535 rtt=10.6 ms
len=52 ip=142.251.43.14 ttl=119 id=4205 sport=443 flags=SA seq=8 win=65535 rtt=7.5 ms
len=52 ip=142.251.43.14 ttl=55 id=65346 sport=443 flags=SA seq=9 win=65535 rtt=8.4 ms`

MTU大小問題

一班正常MTU 用1500 但vpn 可能可以設定1444
原則就是盡量不要讓封包被拆成兩個
可以指定封包大小來測試MTU設定是否適當
`

ping -c 1 -D -s 1500 8.8.8.8

`

2022年2月24日 星期四

程式:命名規則

  • 駝峰式:Camel Case:單字的首字母大寫
    • Upper camel case(PascalCase): 所有單字的首字母大寫,例如FirstName
    • lower camel case:第一個單字的字母小寫,其餘的字母大寫,例如firstName
  • Snake Case:單字與單字間使用下劃線分隔(像蛇)
    • 例如:first_name
  • kebab Case (spinal-case, Train-Case, Lisp-case), 單字與單字間使用連接符號(烤肉串)
    • 例如: first-name

2022年2月22日 星期二

Web Browsing through terminal

  • Install xterm on remote linux server

    sudo apt-get install w3m w3m-img
    sudo apt-get install xterm
    
  • on local target machine

    ssh -X  user@[ip]  -> linux
    ssh -U  user@[ip]. --> mac
    

2022年1月14日 星期五

How to find my ip

有時候,你需要知道自己的ip 位址,這時候可以簡單用個curl

curl ifconfig.me

2022年1月6日 星期四

HuskyLens upgrade

1.clone repo from github


git clone https://github.com/HuskyLens/HUSKYLENSUploader.git

Install pip3 on MAC

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install python3

install pip3 on Linux

sudo apt install python3-pip
  • Run the following code to install pyserial:
sudo pip3 install pyserial
  • Go to the HUSKYLENSUploader folder
cd HUSKYLENSUploader
  • Run the following code to update the firmware:
sudo python3 kflash.py -b 2000000 HUSKYLENSWithModelV0.4.7Stable.kfpkg

Obsidian 插件介紹:Text Generator

Text Generator 是 Obsidian 的一個插件,它可以根據給定的提示自動生成文本。這個插件使用 GPT-3 語言模型,能夠產生類似人類的文本,非常適合編寫故事、文章、電子郵件和其他類型文本。 主要功能: **生成文本:**根據提示生成各種長度的...