Matomo 统计绕过 Adblock 拦截

大部分 Adblock 默认会把 matomo.js 封锁,所以我们需要将文件”改名”
把 js 以及 php 代理,这里以 WordPress 安装的 Matomo 为例
如果你不是以 WP 安装,记得域名中也不要包含 matomo, tracking 这类关键字
Apache .htaccess:

RewriteEngine On 
RewriteRule ^wp-content/plugins/app/class$ wp-content/uploads/matomo/matomo.js [L] 
RewriteRule ^wp-content/plugins/app/class\.php$ wp-content/plugins/matomo/app/matomo.php [L]

或 NGINX 配置文件:

rewrite ^wp-content/plugins/app/class$ wp-content/uploads/matomo/matomo.js last;
rewrite ^wp-content/plugins/app/class\.php$ wp-content/plugins/matomo/app/matomo.php last;

另外`matomo.php?action_name=`也会被拦截,所以需要从默认的 GET 请求更换成 POST 请求,这里是修改后的代码

<script data-cfasync="false">
(function () {
function initTracking() {
var _paq = window._paq = window._paq || [];
_paq.push(['setRequestMethod', 'POST']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
_paq.push(['alwaysUseSendBeacon']);
_paq.push(['setTrackerUrl', "\/\/example.site\/wp-content\/plugins\/app\/class.php"]);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript';
 g.async=true;
 g.src="\/\/example.site\/wp-content\/plugins\/app\/class";
 s.parentNode.insertBefore(g,s);
}
if (document.prerendering) {
	document.addEventListener('prerenderingchange', initTracking, {once: true});
} else {
	initTracking();
}
})();
</script>

利用 RTL-SDR 接收 ADS-B 信号并追踪飞机

RTL-1090

安装驱动(Zadig)

如果你已经根据 RTL-SDR 博客网站正确的安装了驱动,则请跳过此部分

打开Zadig.exe,上方 Options>List all devices,找到Bulk-In, Interface (Interface 0)并确保 USB ID 为0BDA 2838 00 确认无误后点击 Replace Driver 等待加载后驱动便安装完成了

安装 RTL-1090

前往rtl1090.com,找到RTL1090.EXE VERSION 2并下载 这时候直接运行会提示缺少rtlsdr.dll,libusb-1.0.dll两个运行库 其中rtlsdr.dll来自rtlsdrblog/rtl-sdr-bloglibsub-1.0.dll来自libusb/libusb 把 dll 下载到同目录后运行即可 运行后看见很大一个 START 按钮,点就对了

现在你应该能看见一些随机的文字,看不懂吗?我也看不懂 所以我们需要把解码后的数据放到地图上显示 主要有两个软件能实现,分别是 Virtual Radar,ADSBScope,这里我以 ADSBScope 为例

ADSBScope

前往sprut.de/electronic/pic/projekte/adsb/adsb_en.html#downloads并下载最新版本的 ADSBScope 运行后上方 load Maps>Aisa Central 加载地图,other>Network>Network setup>RAW-data-client 点击 local,RTL1090 回到主界面,other>Network>Raw-data Client active 到这里全部的设置都已经完成了,地图上应该显示了一些飞机的轨迹 如果没有的话,可能是天线摆放的位置不对,亦或只是附近没有飞机罢了

树莓派配合 RTL-SDR 搭建 OpenWebRx

RTL-SDR 驱动

在安装之前,我们需要先安装驱动,安装驱动非常简单,只需一行命令 sudo apt install rtl-sdr

安装 OpenWebRX

这里使用 apt 安装

wget -O /usr/share/keyrings/openwebrx<span class="hljs-selector-class">.gpg</span> https:<span class="hljs-comment">//repo.openwebrx.de/openwebrx.gpg</span>
echo <span class="hljs-string">"deb [signed-by=/usr/share/keyrings/openwebrx.gpg] https://repo.openwebrx.de/debian/ experimental main"</span> > /etc/apt/sources<span class="hljs-selector-class">.list</span><span class="hljs-selector-class">.d</span>/openwebrx-experimental<span class="hljs-selector-class">.list</span>
apt-get update
apt-get install openwebrx

From openwebrx.de/download/debian.php

使用openwebrx命令启动

绑定端口

在配置文件里修改:

nano /etc/openwebrx/openwebrx.conf

[web] 
port = 8088

这里由于默认端口占用,所以我转到了 8088 端口

另外,默认的管理页面为/admin

树莓派搭配 RTL-SDR 搭建 APRS iGate (Direwolf)

在 2024 年的今天,搭建 iGate 早就不用像十多年前手动焊接一个 TNC 电路加上老旧的 APRS4R 了,只需一个廉价的 SDR 即可实现

首先我们需要安装一堆的库

sudo apt-get install git
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install make
sudo apt-get install cmake
sudo apt-get install libasound2-dev
sudo apt-get install libudev-dev
sudo apt-get install libavahi-client-dev
sudo apt-get install rtl-sdr

然后是 Direwolf 的前置 Hamlib

git clone https://github.com/Hamlib/Hamlib.git
cd Hamlib
./bootstrap
./configure
make
sudo make install

和主角 Direwolf

cd ~
git clone https://www.github.com/wb2osz/direwolf
cd direwolf
git checkout dev
mkdir build && cd build
cmake ..
make -j4
sudo make install
make install-conf

接下来需要建立配置文件

nano sdr.conf

ADEVICE null null
CHANNEL 0
MYCALL XXXX #修改成呼号+SSID
IGSERVER asia.aprs2.net #一般无需修改
IGLOGIN XXXX 12345 #输入你的呼号和密码

上方的密码只是一个算法,可以参考lilmatt/callpass-js

最后,通过以下代码运行

rtl_fm -f 144.64M -s 24000 -g 48 - | direwolf -c /sdr.conf -r 24000 -D 1 -

我们还可以把它设置成开机自动运行 把上述的运行命令复制到exit 0前即可

sudo nano /etc/rc.local

Ubuntu 下我的世界 Java 开全版本服教程(1.7.x-最新版本)

首先下载最新版本的服务端,这里以我常用的PaperMC为例 另外也有 Spigot,Bukkit 等

安装并运行 PaperMC 服务端

sudo apt install openjdk-17-jre-headless dos2unix jq
wget https://pastebin.com/raw/e0UDS0dE -O paper.sh && dos2unix paper.sh && bash paper.sh
java -jar server.jar

同意 eula

echo "eula=true" > eula.txt

然后下载以下三个插件的最新版本: ViaVersion ViaBackwards ViaRewind

cd plugins
curl -s https://api.github.com/repos/ViaVersion/ViaVersion/releases/latest | grep -o "https://.*\.jar" | wget -qi -
curl -s https://api.github.com/repos/ViaVersion/ViaBackwards/releases/latest | grep -o "https://.*\.jar" | wget -qi -
curl -s https://api.github.com/repos/ViaVersion/ViaRewind/releases/latest | grep -o "https://.*\.jar" | wget -qi -

再次启动

java -jar server.jar

以 1.7.10 版本进入的截图: 

最后,祝各位新年快乐 最近实在繁忙,抱歉~

JS 实现评论表情包及站外链接提醒

评论表情包

OSS 文件已删除,请自行替换! 替换textarea成评论框的 ID

<span id="sticker_box"></span>
<a onclick="toggleStickerBox()" a="#">表情</a>
<script>const stickers = [
        //这里填你的图片
      '001', '002', '003', '004', '005', '006', '007', '008'
    ];
    const stickerBox = document.getElementById('sticker_box');
    stickers.forEach(sticker => {
      const button = document.createElement('button');
      button.className = 'sk';
      button.onclick = function() {
        sticker01(sticker);
      };

      const img = document.createElement('img');
      //这里填图片目录
      img.src = `//oss.wuminboke.site/sticker/${sticker}.webp`;
      img.style.height = '50px';
      img.style.width = '50px';
      img.loading = "lazy";

      button.appendChild(img);
      stickerBox.appendChild(button);
    });
    function toggleStickerBox() {
      const divToToggle = document.getElementById('sticker_box');
      divToToggle.style.display = divToToggle.style.display === 'none' ? 'block' : 'none';
    }
    function sticker01(stickernum) {
      const textarea1 = document.getElementById('textarea');
      //这里填图片目录
      textarea1.value += `<img src="//oss.wuminboke.site//sticker/${stickernum}.webp" height="100px" width="100px">`;
    }</script>

站外链接提醒

wuminboke.site替换成自己域名可直接使用

<script>function links(){const t=document.querySelectorAll("#post-body a"),e=["#"],n=[{url:"github.com",tag:" - Github"},{url:"t.me",tag:" - Telegram"},{url:"wuminboke.site",tag:""}];for(let u=0;u<t.length;u++){const l=t[u],o=l.href;if(e.includes(o))continue;const i=n.find((t=>o.includes(t.url)));l.innerText+=i?i.tag:" - 站外链接"}}links();</script>

Docker 部署 Home Assistant 并接入米家与 ESPHome

安装 Home Assistant

docker run -d \
  --name homeassistant \
  --privileged \
  --restart=unless-stopped \
  -e TZ=MY_TIME_ZONE \
  -v /PATH_TO_YOUR_CONFIG:/config \
  -v /run/dbus:/run/dbus:ro \
  --network=host \
  ghcr.io/home-assistant/home-assistant:stable

From home-assistant.io/installation/linux

IP:8123

这里省略初始化过程,简单点击几个按钮即可

安装 HACS

docker exec -it homeassistant bash
wget -O - https://get.hacs.xyz | bash -
exit
reboot

点击右下角的齿轮图标,选择 设备与服务,然后点击 添加集成 在弹出的页面中搜索 HACS,并选择进行安装。 按提示输入 GitHub 授权码完成登录。

安装 Xiaomi Miot Atuo

在左侧菜单中点击 HACS,搜索 Xiaomi Miot Auto,然后选择下载安装 下载完成后,重启 Home Assistant

接入米家设备

点击左下角的齿轮图标,选择 设备与服务,然后点击 设备 点击添加设备,搜索 Xiaomi Miot Auto,并选择 Add devices using Mi Account 进行账号集成。 输入小米账号(即米家 APP 我的页面顶部的数字) 和密码。 在设备连接模式下,选择 Auto

验证

回到设备页面,随便点击一个米家设备 中间的控制菜单必须有等于或多余 1 个控制项

安装 ESPHome

这里以 ESP32+DHT11 温湿度传感器为例 于使用 Docker 部署,无法直接通过 Home Assistant 添加插件

docker run -d  --name="ESPHome" -e TZ=Asia/Shanghai   -v /home/esphome:/config  -v /run/udev:/run/udev  --privileged  --restart=always  --net=host esphome/esphome

IP:6052

安装 ESPHome 到 ESP32

点击右下角的 NEW DEVICE,然后点击 OPEN ESPHOME WEB 在新页面中选择 CONNECT,选择 ESP32,并点击 INSTALL 进行安装, 安装完成后,进行 WIFI 配置,注意 ESP32 只支持 2.4GHz 的 WIFI 回到 ESPHome 页面,点击 ADOPT 当出现安装页面时,直接点击右下角的 STOP,我们将使用另一种更快的方法

接线

DHT11(有孔那面,由左到右) VCC DATA NC GND

VCC > 3.3V DATA > D2 NC GND > GND P.S: 这里需要注意,必须在 VCC 与 DATA 中串一个 4.7kΩ的电阻

编译固件

以下配置基于我的需求,请根据实际情况进行相应修改

substitutions:
  name: esphome-web-xxxxxx
  friendly_name: ESPHome Web xxxxxx

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  min_version: 2024.6.0
  name_add_mac_suffix: false
  project:
    name: esphome.web
    version: dev

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

# Allow provisioning Wi-Fi via serial
improv_serial:

wifi:
  # Set up a wifi access point
  ap: {}

# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:

dashboard_import:
  package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
  import_full_config: true

# Sets up Bluetooth LE (Only on ESP32) to allow the user
# to provision wifi credentials to the device.
esp32_improv:
  authorizer: none

# To have a "next url" for improv serial
web_server:

# Example configuration entry
sensor:
  - platform: dht
    pin: GPIO2 
    temperature:
      name: "Temperature"
    humidity:
      name: "Humidity"
    update_interval: 60s
pip install esphome 
esphome compile 0.yaml #修改成上方的 yaml 文件

编译后的固件位于.pioenvs\esphome-web-8ffb98\firmware.bin

ESP32 的 IP:80 OTA Update>选择 firmware.bin 文件>Update

接入 ESPHome

点击左下角的齿轮图标,选择 设备与服务,然后点击设备 点击添加设备,选择 ESPHome,并在主机字段中输入 ESP32 的 IP 地址(注意:这里输入的是 ESP32 的 IP,而非 ESPHome 服务端的 IP) 再后回到设备页面,应该会看到设备名为 ESPHome Web xxxxxx

Armbian 安装 Qbittorrent Nox 最新版并添加进程守护

首先于/etc/apt/sources.list最后加入:

deb http://ftp.de.debian.org/debian bullseye main

然后运行以下命令安装:

sudo apt update
apt --fix-broken install qbittorrent-nox -y
cat << EOF > /etc/systemd/system/qbittorrent-nox.service
[Unit]
Description=qBittorrent Command Line Client
After=network.target
[Service]
Type=forking
User=root
ExecStart=/usr/bin/qbittorrent-nox -d --webui-port=8080
ExecStop=/usr/bin/kill -w qbittorrent-nox
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

systemctl enable qbittorrent-nox
systemctl start qbittorrent-nox

qbittorrent-nox default

安装后会显示默认管理账号,密码:

The WebUI administrator username is: admin The WebUI administrator password was not set. A temporary password is provided for this session: xxxxxxxx You should set your own password in program preferences.

Typecho 使用 ChatGPT 为博客自动生成简介/摘要

安装插件

idealclover/AISummary-Typecho 安装插件就不多说了,就丢到插件目录里,重命名

设置插件

提升词

我所用的提升词如下: 你的任务是生成文章的摘要。请你根据以下文章内容生成 100 字内的摘要,內容尽量针对 seo 优化,请不要带有链接,除了你生成的摘要内容,请不要输出其他任何无关内容。

模型

一般来说gpt-3.5-turbo-16k够用了,或者 gpt4 也行

CSS

.aisummary {
  background-color: #f0f0f0;
  padding: 20px;
  border-radius: 5px;
  margin-bottom: 20px;
}

.aisummary p {
  font-size: 16px;
  line-height: 1.5;
  color: #333;
}

.aisummary a {
  color: #007bff;
  text-decoration: none;
}

.aisummary a:hover {
  text-decoration: underline;
}

自动同步到简介

<script>window.addEventListener("load",(function(){var t=document.getElementById("ai"),e=document.querySelector('meta[name="description"]');t&&e&&e.setAttribute("content",t.textContent)}));</script>

`测试过 google 可用,bing 未知,至少我的没有成功