分類
程序

一個簡單的 base64 轉換

在本地瀏覽器中使用 JavaScript 完成轉換,源碼在下面:

function encodeBase64() {
    const input = document.getElementById('base64-input').value;
    const output = document.getElementById('base64-output');

    if (!input) {
        output.value = '';
        return;
    }

    try {
        // UTF-8 text → Base64
        const bytes = new TextEncoder().encode(input);

        let binary = '';
        bytes.forEach(byte => {
            binary += String.fromCharCode(byte);
        });

        output.value = btoa(binary);

    } catch (error) {
        output.value = 'Error: Unable to encode the text.';
    }
}


function decodeBase64() {
    const input = document.getElementById('base64-input').value.trim();
    const output = document.getElementById('base64-output');

    if (!input) {
        output.value = '';
        return;
    }

    try {
        // Base64 → binary
        const binary = atob(input);

        // Binary → UTF-8 text
        const bytes = Uint8Array.from(
            binary,
            char => char.charCodeAt(0)
        );

        output.value = new TextDecoder('utf-8').decode(bytes);

    } catch (error) {
        output.value = 'Error: Invalid Base64 data.';
    }
}


function copyBase64() {
    const output = document.getElementById('base64-output');

    if (!output.value) {
        return;
    }

    navigator.clipboard.writeText(output.value).then(() => {
        alert('Result copied to clipboard.');
    }).catch(() => {
        output.select();
        document.execCommand('copy');
        alert('Result copied to clipboard.');
    });
}


function clearBase64() {
    document.getElementById('base64-input').value = '';
    document.getElementById('base64-output').value = '';
}
分類
陰陽怪氣

260812

掃黑除惡,守護你我平安。黨中央部署開展爲期一年的深化掃黑除惡專項鬥爭,依法懲處涉黑涉惡違法犯罪,保障人民安居樂業、社會安定有序、國家長治久安。廣大羣衆可以通過全國掃黑辦12337舉報平臺等多種方式舉報黑惡犯罪。全國掃黑除惡專項鬥爭領導小組

分類
Linux

在 Xfce 的狀態欄顯示網速

理想情況下,如果要在 Xfce 的狀態欄(Panel)顯示網速,只需要在狀態欄新增項目,選擇自帶的 Network Monitor 就可以了。但是某次升級內核後(5.14.0),/proc/net/dev 就不在有網速數據,導致從那裏讀取網速的 Network Monitor 和 vnstat 都無法工作。vnstat 可以統計過往流量的數據,不過也可以在路由器上查看,所以就先不管了。狀態欄的實時網速則可以通過下面的 Python 腳本來顯示。

#安裝依賴
sudo dnf install xfce4-genmon-plugin python3-gobject gtk3
#測試依賴
/usr/bin/python3 -c "import gi; print('PyGObject OK')"
#確認網絡數據
ethtool -S wlp1s0 | grep -E 'rx_bytes|tx_bytes'

#新建腳本目錄
mkdir -p ~/.local/bin ~/.cache/wifi-netload
nano ~/.local/bin/wifi-netload.py
#!/usr/bin/python3

import os
import re
import time
import subprocess

INTERFACE = "wlp1s0"

CACHE_DIR = os.path.expanduser("~/.cache/wifi-netload")
CACHE_FILE = os.path.join(CACHE_DIR, "counters")

os.makedirs(CACHE_DIR, exist_ok=True)


def get_counters():
    try:
        result = subprocess.run(
            ["/usr/sbin/ethtool", "-S", INTERFACE],
            capture_output=True,
            text=True,
            timeout=2,
            check=True,
        )

        rx_match = re.search(
            r"^\s*rx_bytes:\s*(\d+)",
            result.stdout,
            re.MULTILINE,
        )

        tx_match = re.search(
            r"^\s*tx_bytes:\s*(\d+)",
            result.stdout,
            re.MULTILINE,
        )

        if not rx_match or not tx_match:
            return None

        return int(rx_match.group(1)), int(tx_match.group(1))

    except (subprocess.SubprocessError, OSError, ValueError):
        return None


def format_rate(bytes_per_second):
    """Format speed using fixed-width decimal units."""

    kb = bytes_per_second / 1000

    if kb < 1000:
        return f"{kb:6.1f} K"

    mb = kb / 1000
    return f"{mb:6.2f} M"


def load_previous():
    try:
        with open(CACHE_FILE, "r") as f:
            parts = f.read().split()

        if len(parts) != 3:
            return None

        return (
            int(parts[0]),
            int(parts[1]),
            float(parts[2]),
        )

    except (OSError, ValueError):
        return None


def save_current(rx, tx):
    try:
        tmp = CACHE_FILE + ".tmp"

        with open(tmp, "w") as f:
            f.write(f"{rx} {tx} {time.monotonic()}\n")

        os.replace(tmp, CACHE_FILE)

    except OSError:
        pass


def main():
    current = get_counters()

    if current is None:
        print("0.0 KB/s  0.0 KB/s")
        return

    rx, tx = current
    previous = load_previous()

    save_current(rx, tx)

    if previous is None:
        print("0.0 KB/s  0.0 KB/s")
        return

    old_rx, old_tx, old_time = previous

    elapsed = time.monotonic() - old_time

    if elapsed <= 0:
        print("0.0 KB/s  0.0 KB/s")
        return

    # Handle counter resets.
    rx_delta = max(0, rx - old_rx)
    tx_delta = max(0, tx - old_tx)

    rx_rate = rx_delta / elapsed
    tx_rate = tx_delta / elapsed

    print(
        f"{format_rate(rx_rate)} "
        f"{format_rate(tx_rate)}"
    )


if __name__ == "__main__":
    main()

chmod +x ~/.local/bin/wifi-netload.py
#手動執行
~/.local/bin/wifi-netload.py
#應該顯示出類似   1.55 M   24.2 K

最後在 Xfce 狀態欄添加項目,選擇 Generic Monitor。命令欄填 /home/42/.local/bin/wifi-netload.py, 刷新頻率選 1,字體需要選一個等寬字體,不然網絡變動時會一跳一跳的,比如 Source Code Pro Bold 10。這樣就又能在狀態欄看見實時網速了。

分類
說說

260727

由於住宅區民宿設施因噪音及垃圾處理等頻繁引起糾紛,日本觀光廳已向全國各地方政府發出通知,允許其透過修改條例實質上禁止民宿營業。

自2018年《民泊新法》開始實施以來,在住宅區經營民宿得以解禁。伴隨外國旅客的增加,民宿市場急劇擴大,然而與此同時,因噪音和垃圾處理等引發的社區糾紛也不斷發生。

為此,觀光廳於7月15日向全國各地方政府發出通知,允許其可透過修改地方條例,將法律所規定的民宿營業天數每年最長「180天」的上限設定為「0天」。

——NHK:《日本觀光廳允許地方政府實質上禁止民宿營業》

剛剛被樓下鄰居和小孩高聲叫喊氣到的我去下載了《醜陋的中國人》。如果你也要讀,建議讀臺灣原版,因爲大陸版有刪減。

分類
說說

揭陽

我從來沒有去過揭陽,但是兩三年前旅行時發現廣東西部的幾個城市吃狗肉的風氣很重,「脆皮狗」的招牌很多。

之前在內地旅行,候機時不時能看到飛揭陽的航班,心想揭陽發展挺好的,最近一次有這個印象是從新加坡回來,也看到飛揭陽的航班。

我住的的地方有不少揭陽人,所以我吃過揭西擂茶。擂茶非常有特色,大概是把綠茶磨碎加入大米花、花生和青菜的湯。她們做的客家早餐和炒粉也都很好吃。

家裏辦理的廉價寬帶,出口 IP 到處飄,而且經常被豆瓣、Bilibili、淘寶等網站攔截,比如今天的 IP 就是揭陽的。

curl ip9.com.cn | jq
{
  "ret": 200,
  "data": {
    "ip": "120.240.*.*",
    "country": "中国",
    "country_code": "cn",
    "prov": "广东",
    "city": "揭阳",
    "city_code": "jieyang",
    "city_short_code": "jy",
    "area": "",
    "post_code": "522000",
    "area_code": "0663",
    "isp": "中国移动",
    "lng": "116.355733",
    "lat": "23.543778",
    "long_ip": 0,
    "big_area": "华南"
  },
  "qt": 0
}

當我跟 Emanon 說起揭陽虐狗事件時,她想到了馬幫的這首《黃楊扁擔》,其實跟揭陽和狗都沒有關係。話說回來,廣西也是吃狗大省,愿它們來世可以去格魯吉亞、土耳其、印度或者任何對流浪狗友好的世界。

(調小聲音先)

分類
其它

衆安銀行

寫一點衆安銀行的使用體驗,本文不含任何邀請碼。

衆安銀行是一家香港的虛擬銀行(沒有營業網點),網上有很多教程指導大陸用戶如何通過港澳通行證和內地手機號即可開通(需人在香港連接香港網絡)。我當時是在香港機場排隊值機時申請的,過程很順利。開通後可以申請 VISA 實體銀行卡(收取 35 港幣手續費,從珠海寄出)在支持的 ATM 取現,不過手續費不低(每筆 50 港幣)。也可以同時開通投資賬戶以購買港、美股票與基金。當時我記得有送超過 50 港幣的獎勵。

入金

我試過兩種方式。常用的是把 Wise 的收款通過轉數快轉到衆安銀行,只收 5 港幣手續費非常優惠。(Wise 轉大陸支付寶則是 20 人民幣起)。另一种是通過國內銀行的跨境支付通轉到香港賬戶,沒有手續費,有一定限額。

出金

香港微信錢包可以直接在大陸微信中使用,比較方便,註冊成功只需要在微信支付中點一下切換錢包地區就行了。香港支付寶需要另外安裝一個應用,不過註冊過程也很順利只需要手機號就好,然後綁卡就可以掃碼支付了。匯率我也不是很瞭解,跟銀聯匯率比沒差什麼。舉個例子:香港支付寶消費 24 CNY,衆安支出 28.03 HKD,匯率 1.1680351;香港微信錢包消費 10 CNY,衆安支出 11.65 HKD,匯率 1.16545。InfoEuro 的匯率是 1.15430。由於衆安銀行現在的消費返現活動,所以額外的獎賞應該是完全可以彌補匯率的損失的。無論是選美股獎勵(消費金額的 1.5%)還是抽 ZA Coin 都不錯。對於個人轉賬類支付(路邊小商販),香港微信和香港支付寶都可能不支持,但是香港支付寶成功率要大一些。香港微信錢包和香港支付寶一樣,消費積分不適用與大陸用戶,不過積分並不值錢。

基金和股票對於我來說都是高風險投資,所以我不太瞭解。目前貨幣基金七日年化回報 2.49%,最近一年年化回報 2.36%,交易沒有手續費。

2026 世界盃活動。在沒有完成任何邀請任務的情況下獲得了 12 美元的臺積電股票(幾天而已,已虧損到 11.05)和 40 港幣的消費返現(返現券金額介乎 1 港幣到 10 港幣,超過券的面額即可自動抵扣,不像內地常見的 5 元要消費 50 才能用。)由於兌換優惠券會花掉世界盃積分,所以現在以剩餘的不足 5000 積分總排名 163,117,可以大概估下用戶規模。

關於拼團福利,如果想要參與又沒有組織,可以在 https://edumail.su/ 生成 inboxmail.biz 的臨時郵箱來參與。

本文更新於 2026/08/02。

分類
其它

梁啓超真有意思

  • 為學之功,貴乎循序漸進,經久不輟,故一日不必要多學。

  • 自由者,權利之表證也。凡人所以為人者有二大要件:一是生命,二是權利。二者缺一,時乃非人,故自由者亦精神界之生命也。
    ——《過渡時代論》

  • 少年智則國智,少年富則國富,少年強則國強,少年獨立則國獨立,少年自由則國自由,少年進步則國進步,少年勝於歐洲,則國勝於歐洲,少年雄於地球,則國雄於地球。
    ——《少年中國說》

  • 我國萬事不進步,而獨防民之術乃突過於先進國,此真可痛哭也。
    ——《梁啟超年譜長編》

  • 上下無材,國之大患也。
    ——梁啟超《飲冰室全集》

  • 政治之目的,一以謀人民之發達,一以謀國家自身之發達!

  • 昔之欲抑民權,必以塞民智為第一義;今日欲伸民權,必以廣民智為第一義。

  • 國者何?積民而成也。國政者何?民自治其事也。愛國者何?民自愛其身也。故民權興則國權立,民權滅則國權亡。為君相者務壓民之權,是之謂自棄其國。為民者而不務各伸其權,是之謂自棄其身。故言愛國必自興民權始。
    ——《愛國論》