上拉下拉电阻是何物

18 12月

最近学校做硬件课程设计,又把之前玩玩的 Arduino 搬出来了。有一个一直没搞清楚的问题,为什么按钮通常需要接一个上拉或者下来电阻,否则很容易「失控」。这次认真研究了一下总算搞明白了。

什么是下拉电阻

如图,我们想实现一个很简单的功能,即通过判断1号口的电压来判断按钮(开关)是否接通。当接通时电压为 5v,否则电压为 0v。但是我们在接入到1号口的一段接了一个电阻并接地,这个电阻就叫下拉电阻

下拉电阻的作用是:在确保断路电压为0的情况下避免短路。

如果不接地

看起来也许并没有什么问题。但前提是你认为暴露在空气中电压为0,然而事实不是这样的。如图,开关断开的情况下1号口相当于直接暴露在空中,叫做浮空状态。浮空状态的要尽量避免的,因为它的电压不是0而是未知。由于
空中有错综复杂的电磁波,以及其他各种各样的原因,1号口会收到一串噪声信号,电压像波浪一样持续变化。这样我们就很难准确判断开关的按下。

[……]

>> 接着看呗

NAT 科普与类型提升

18 12月

起因是朋友买了一个迅雷玩客云,但是提示 NAT 类型有问题,导致诸多功能不好用。折腾一番后也进一步搜索了相关资料,深入了解一下。本文旨在用最通俗的语言解释清楚相关问题,在专业性方面可能有缺失。

使用 PS3/Xbox 朋友遇到无法联机或 NAT 类型显示为严格也是类似原因。

什么是 NAT

首先我们得先理解 NAT 的概念。它全称是 Network Address Translation 即网络地址转换。使用 NAT 的原因很多,主要是 IPv4 地址资源枯竭,以及为了网络安全(也便于监管)。我们知道每一个能够上网的设备必然有一个 IP 地址,但是并不是所有设备都拥有「公网IP」。而 NAT 就是把内网 IP 映射成公网 IP,从而使设备可以访问互联网。

这里说 公网IP 并不规范。现在很多运营商已经不分配公网 IP 了。

听起来很高端的技术其实就在我们身边。一般常规的家庭网络拓扑是这样的:

入户光纤 → 猫 → 路由器 → 终端设备

运营商只给我们分配了一个 IP 地址,这个 IP 理所应当被路由器占用着。而我们许多终端设备拿到的是路由器分配的内网地址,一般类似 192.168.x.x。显然这个内网地址是无法和互联网通讯的。因此我们需要 NAT 来建立内网 IP 与 公网 IP 的映射,这样当终端设备访问互联网,将数据交给路由器,然后路由器转交给服务器;服务器返回的数据交给路由器,路由器再根据映射传给终端就OK了。这个过程是 NAT。

什么是 UPnP

UPnP 是通用即插即用协议,英文 Universal Plug and Play。在这里,其目的是更加方便地穿透 NAT。可以理解为有了 UPnP 软件可以根据需求让路由器进行动态地进行端口映射。而不是你去路由器后台一个个手动设置。

下面是我的 UPnP 列表:

可以看到根据请求,路由器自动地把 WAN 10960 端口映射到了 192.168.50.120:10960 上,其实这个是我们家的摄像头,这样就可以从外面直接看到画面了。

[……]

>> 接着看呗

ss-panel 扩展教程

28 11月

前面我们已经完整的搭建了 ss-panel 和服务器,算是“可以使用”了。不过还存在许多问题,尤其是安全问题,本文就来扫个尾。

开机自启

现在一旦重启,ss后端不会自动运行。大多情况下我们希望他自动运行。

比通用的办法是直接添加到开启启动脚本:

# 修改启动脚本
vi /etc/rc.d/rc.local

加入下面的脚本:

# 记得改成你自己ss所在的目录
sh /root/shadowsocks/run.sh

保存后f赋予可执行权限然后重启看看:

chmod +x /etc/rc.d/rc.local
reboot

安装BBR

BBR 是 Google 提出的 TCP 拥塞控制算法。这里不深究原理,只要知道能起到加速效果就好了。

使用秋水逸冰的一键安装脚本可以轻松安装。

系统支持:CentOS 6+,Debian 7+,Ubuntu 12+

虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等

内存要求:≥128M

执行下面命令:

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh

执行完后按提示重启即可。

验证安装

执行 uname -r 查看系统内核版本号,应该已经是最新版。

执行 sysctl net.ipv4.tcp_congestion_control,返回值一般应该为 net.ipv4.tcp_congestion_control = bbr

执行 lsmod | grep bbr 返回值包含 tcp_bbr 说明bbr已经启动。注意: 并不是所有的 VPS 都会有此返回值。

禁止搜索引擎抓取

一般来说我们不太希望搜索引擎尤其是国内搜索引擎收录我的网站。所以需要进行一些设置。

最基本的是 robots 设置,这个 panel 已经默认做好了。就是在站点根目录有一个 robots.txt,文件,里面写着:

Disallow: /

意思是不允许任何搜索引擎抓取任何页面。当然我们也可以进行更加灵活的控制,可以用站长工具来生成规则。

但是!!! robots 只是一个规范,搜索引擎是自愿遵守的。所以他也可以不遵守。曾经360搜索就堂而皇之的无视 robots 臭名昭著。所以我们还需要一些强制措施。

可以通过判断请求的 user agent 判断来访者是不是搜索引擎。借此可以屏蔽搜索引擎的访问。以 Nginx 服务器为例,在 vhost 的配置中加入下面代码:

#禁止搜索引擎访问
if ($http_user_agent ~* (baiduspider|googlebot|soso|bing|sogou|yahoo|sohu-search|yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler)) {
    return 403;
}

效果如下:

nginx

这样,搜索引擎访问我们就会得到 403 Forbidden 响应,获取不到任何内容。可以用搜索引擎模拟工具来进行测试。

[……]

>> 接着看呗

ss-panel 后端搭建

28 11月

特别声明

本教程内容大多来自:荒岛教程、部分来自逗比根据地。向上述作者以及所有参与软件贡献的人表示感谢。

本教程旨在技术交流,本人不提供任何 ss 服务、亦不提供指导,请合法使用。

基础介绍

本教程安装的是 ss-panel 的后端,包括 ss 服务本身。ss-panel 的前端参见文章列表。

后端与前端可以在同一个服务器,也可以在不同的服务器。后端是真正提供代理服务的地方。

安装后端

首先找一个文件夹来存放程序。这里直接用 root 了。先安装一下必须的工具。

cd /root
yum install python-setuptools && easy_install pip
yum install git

然后安装 libsodium

libsodium 用于对 chacha20 加密方式提供支持。此加密适用于路由器、手机等性能欠佳的设备。可以提高速度减少耗电。

#安装所需的组件包
yum -y groupinstall "Development Tools"
#获取最新版本号
Libsodiumr_ver=$(wget -qO- "https://github.com/jedisct1/libsodium/tags"|grep "/jedisct1/libsodium/releases/tag/"|head -1|sed -r 's/.*tag\/(.+)\">.*/\1/') && echo "${Libsodiumr_ver}"
#下载编译安装
wget --no-check-certificate -N "https://github.com/jedisct1/libsodium/releases/download/${Libsodiumr_ver}/libsodium-${Libsodiumr_ver}.tar.gz"
tar -xzf libsodium-${Libsodiumr_ver}.tar.gz && cd libsodium-${Libsodiumr_ver}
./configure --disable-maintainer-mode && make -j2 && make install
echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig
#完成后可以删除下载和解压的文件了
cd .. && rm -rf libsodium-${Libsodiumr_ver}.tar.gz && rm -rf libsodium-${Libsodiumr_ver}

其他系统的安装以及常见问题参见原文逗比根据地的教程

然后下载真正的后端代码:

[……]

>> 接着看呗

ss-panel 前端搭建

28 11月

特别声明

本教程内容大多来自:荒岛教程、部分来自逗比根据地。向上述作者以及所有参与软件贡献的人表示感谢。

本教程旨在技术交流,本人不提供任何 ss 服务、亦不提供指导,请合法使用。

基础介绍

首先你需要了解:Shadowsocks 有多种版本。以使用场景区分,有单用户版与多用户版。ss-panel 是一个在线管理面板,可以开通多个账号,每个账号连接信息独立。因此需要配合多用户版使用。

如果你是自己使用,完全可以一键搭建单用户版,更加简单易用。推荐使用秋水逸冰的一键安装脚本

ss-panel 本质上是一个 php 网站,它仅仅提供管理功能。所以你还需要安装相应的后端与 ss 服务。

所需环境

下面是必须安装的程序:

  • MySql
  • PHP
  • Nginx (或其他 web 服务器)

本教程使用 CentOS 7 操作系统。

环境搭建

建议使用一键安装程序安装运行环境。本教程使用宝塔面板,你也可以使用军哥的lnmp一键安装包

首先请确保防火墙打开了常用端口。尤其是阿里云/腾讯云/华为云用户。

登录 root 用户,直接执行下面命令安装宝塔面板:

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh

安装完后会显示登录信息,用浏览器就可以登录后台了。初次登录后台会提示一键安装默认程序,选择 LNMP 全家桶。其中 php 版本改为 7.0,ftp 可选不安装,其他保持默认就好。一键安装时间视服务器而定,反正挺长的。

[……]

>> 接着看呗

让你手Q变清爽

1 11月

我一直使用 QQ Play 版(不是国际版)!就是从 Google Play 下载的 QQ,相比于国内标准版清爽不少同时常用的功能也一应俱全。但是今天 Play 版更新了,应该算是大更新。UI 跟上了国内标准版的节奏,同时又新增了大量的无(la)关(ji)内容,令人作呕。

不过还算腾讯有点底线,大[……]

>> 接着看呗

Galaxy Watch 微信回复(通知栏回复)

21 10月

先来看看效果图

手表端

手机端

先说说原理吧

警告:要求手机必须是 Android 且大于等于6.0,一些通知栏魔改严重的系统可能无法使用,例如 MIUI、VIVO。无需ROOT。

希望大家好好看看,只有知道了原理才能自行解决一些小错误,更能避免问出一些无脑问题节约大家时间。

首先用到了一个叫 Ne[......]

>> 接着看呗

用cocos2d-js制作WearOS表盘

18 10月

这只是一次实验

众所周知,cocos2d 属于游戏引擎,本身就不适合运行在手表,而直接把他当做表盘当然就更不合适了。这里只是一个突发奇想,借助 cocos 强大的渲染与跨平台特性,看看能否做出一款表盘。

要做到这一步需要解决两个问题:

  1. 将 cocos 编译到 Android.
  2. 将容器由 Activity 转到表盘。

倒弄了一天,仅仅是成功运行起来了,还有许许多多的问题需要解决,例如效率问题、内存释放问题等等。

当前环境:

  • Win10
  • Cocos2d-js 3.17
  • Android Studio 3.2
  • Wear OS 2.x

完成本项目需要了解 Android 开发知识,最好还了解 WearOS 表盘开发。

编译到 Android

其实是这一步就足够再写一篇文章了,有许多隐藏的坑,牵扯到 Android NDK, JNI 等许多知识。不过这并不是本文的重点,简单写一下。

为了不影响 Cocos2d 自带的 demo,我们要编译出 .so 库文件,然后新建一个工程引用。

打开 Android Studio,点击 File - Open,选择 cocos 项目根目录下 frameworks/runtime-src/proj.android 即可打开自带的 Android 工程。注意,默认情况下只编译 armeabi-v7a 的库,这个只能用于手机而不能用于模拟器。为了调试方便我们要他把 x86 也给编译了。修改 proj.android/gradle.properties 文件,找到 PROP_APP_ABI 新增一个 x86 格式:

# List of CPU Archtexture to build that application with
# Available architextures (armeabi-v7a | arm64-v8a | x86)
# To build for multiple architexture, use the `:` between them
# Example - PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86
PROP_APP_ABI=armeabi-v7a:x86

点击 Build - Rebuild project 就开始编译啦~ 编译很慢,十几分钟吧。

编译成功后可以在 proj.android/app/build/intermediates/ndkBuild/debug/obj/local 下找到各个平台的 so 文件。与此同时也可以在 intermediates/assets/debug 下找到后边需要的 js 文件。

[……]

>> 接着看呗