看到有些朋友因为 DDNS 的设置而头疼。简单写一篇 DDNS 的傻瓜指南。

DDNS (Dynamic Domain Name System) 动态域名系统简介。

要从外网访问你自家的设备,譬如 NAS, 必须有一个公网地址。这个地址是一串 4 个字节的数字(本文仅讨论 ipv4,弄懂的话 ipv6 理解起来完全相同)。这四个字节的数字叫 IP 地址。

理论上任何公网上的设备都有 IP 地址。但你的宽带运营商有时会做出限制,让外网没法直接通过真实 IP 访问到你的设备,也就是你的宽带其实是在一个更大的局域网一部分(被 NAT 了)。如果遇到这种情况(一般可以通过查看路由器 WAN 口地址得知是否被 NAT ),建议直接致电运营商客服让他们给你个公网 IP。(一般都给,遇上不太懂的或犟的自己想想办法)

有了公网 IP 也就能从外网访问了。但这时我们会遇到另一个问题,就是家用宽带往往是一大群人公用一个 IP 池,也就是每次重启路由器你会发现公网地址变了。这是正常情况,但我们也不太可能每次重启路由器都进去配置页面看一眼公网 IP 是啥再出门。所以要想办法让我们用一个固定地址而不是每次都需要重新记的动态 IP 来连回家。

DDNS 就是为这个目的存在的。我们知道「域名」的作用是用一串好记的文本地址代替数字的 IP 地址。而 DDNS 就是让这串固定的域名永远指向真实的 IP。因为真实 IP 是动态的,所以取名「动态 DNS」。

怎么搭家用 DDNS

Read more »

各种中文教科书或百科上对向量空间 (Vector Space) 的解释都比较晦涩,尝试着写一篇通俗点的。 有初等数学基础的都能看懂。尽量避免使用线代术语。参考

向量空间干啥用的 (Why we need vector spaces)

它是一个数学概念,用来描述定理的。我们知道数学语言需要精确简洁,想象一下有这么个问题:

假设有一组数学对象——可以是单列向量、多项式、函数或者任何能相加或乘以一个数的东西并且这东西满足交换律结合律。现在要解关于这些对象的参数方程,我们可以用 blablabla 方法.....

显然这种描述方法既不精确也不简洁,不符合数学语言的基本要求。如果改用

设 V 是一个向量空间,要解关于 V 的参数方程可以.....

就好多了。

于是「向量空间」就成了替换前面那堆带着啰里吧嗦定语的数学对象的专用概念。

向量空间应用举例

Read more »

在自组 NAS 上备份安卓相册的办法

按照 自组NAS教程 成功搭建家用 NAS 存储以后,备份手机相册和媒体库的需求非常普遍。虽然各种商业 NAS 往往会提供各种网页端 gui 或手机 app 作为完善其生态的重要组成部分,但仅就「备份」这个需求来说,简单的一个 termux 就完全足够了。

Read more »

NAS 可以用来做什么?

写一些我个人搭建NAS后的主要用途。已经买了NAS可以看下有没有哪方面能拓展自己的应用。或者有购买或搭建NAS意向的可以看着参考一下自己是否真的有这方面的需求,避免盲目跟风导致吃灰。

本人的配置 Intel N6005/16G内存/512G固态/12T RAID1(4T*6) 系统Archlinux。 网络300M宽带,动态公网IP+DDNS。

远程存储及读取

Read more »

探测器常见问题解答

气体探测器(布控球)的常见问题, 主要是接入商和平台提供商的疑问解答。咨询技术支持前可以先看一下。


主界面上的实时浓度数据为什么不显示了?

我们的最新系列布控球采用分体设计:气体传感器部分安装在手持式设备里,方便现场工人随身携带着进入作业现场。而数据接收、传输、视频录像等功能放在球机内,用于跟外部平台通讯。在只有球机开机,手持设备关闭的情况下球机上是没有数据显示的。

所以球机主界面没数据时可以先看手持设备是否开机,如果开机了检查一下手持设备跟球机距离是否过远,并且确认手持设备跟球机是否是正确的配对,不要拿错。

Read more »

TongjiAI Media Service Instruction

Realtime Streaming

1. Request streaming from devices.

Devices are designed to be accesed via socket.io. By default a device gets itself registered at the official socket.io server once it is connected to the internet, either via wirelss LANs(aka Wifi) or 4G/5G cellular networks. Clients who are willing to request the realtime video streaming should connect themselves to the socket.io server and join the same room with the target devices, which is followed by the steps below:

Read more »

  • 将以下脚本作为库文件导入前端项目中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { io } from "socket.io-client";
import playRecord from "./playRecord";

const socketIOInit = async (sio_url,setRmoteStream, setRecList) => {
const socketio = io(sio_url);
let pc;
let heartbeat_timer;

socketio.on("connect", () => {
console.log("connected");
});

socketio.on("create", () => {
socketio.emit("auth");
socketio.emit("heartbeatping");
console.log("created");
});
socketio.on("bridge", async (pathid) => {
setTimeout(() => {
setRemoteStream(
`https://live.tongjiai.cn/channel/${pathid}/index.m3u8`
);
}, 3000);
});
socketio.on("join", () => {
socketio.emit("auth");
socketio.emit("heartbeatping");
socketio.emit("getRecList");
console.log("joined");
});

// client-side custom heartbeat check with an interval of 10 seconds.
socketio.on("heartbeatpong", () => {
if (heartbeat_timer) {
clearTimeout(heartbeat_timer);
}
heartbeat_timer = setTimeout(() => {
socketio.emit("heartbeatping");
socketio.emit("getRecList");
}, 10000);
});

// recList handler
socketio.on("recList", (list) => {
console.log("list:",list);
setRecList(list);
});

socketio.on("hangup", () => {
console.log("hangup");
});
return socketio;
};
Read more »

偶尔发现的简便小技巧随手分享。 使用场景:家庭PC,Windows系统,希望搭网络服务(ssh/transmission/nginx等),或者远程开发平台(go/python/nodejs等)

硬件要求:家用宽带最好有公网ip(包含ddns)且路由器可以转发端口。如果没有的话可以用云服务商那儿买的vps搭frp或ssh tunnel。 如果有需要可以自行设置wake-on-lan方便远程开机(我自己是24小时开机所以没用上这个)。

一、装VMware Player。对,免费的Player就够; 二、新建一个Linux的guest,网络连接选桥接(bridged)。装好server版系统(不需要gui),发行版随意。 三、在guest机上装你需要的服务,设置好systemctl enable。在路由或vps上设好端口转发。

以上三步是常规操作不多赘述详细操作,有疑问查阅之前的文章
Read more »

一、安装 Nvidia SDK manager

根据 Nvidia官网 教程说明,先下载用于 Ubuntu (或者其他当前使用的Linux发行版)的安装包。其中 Ubuntu版的下载地址如下: https://developer.nvidia.com/sdkmanager_deb 注意:使用该地址下载可能需要先注册Nvidia用户,注册步骤请按照官网提示一步步进行,此处不多赘述。 下载完成后打开终端 Terminal,键入以下命令安装sdkmanager(此处假设下载好的.deb安装包位于 ~/Downloads/目录,该目录是大多数浏览器的默认下载目录,如果你手动修改过下载保存目录,请自行替换):

$ cd ~/Downloads
$ sudo apt install ./sdkmanager*.deb -y

等待安装完毕后键入以下命令打开刚安装好的sdkmanager:

$ sdkmanager

二、刷机

进入SDK Manager 的GUI图形界面后取消勾选 HARDWARE CONFIGURATION 栏中的 Host Machine 选勾,再点击 Target Hardware方框右下角的三个点 ...,选择Jetson TX2 models

Read more »

智能监测平台 TJAI-Platform

开发文档

平台结构概述

监测平台(下文简称平台)采用 NextJS 作为开发技术栈。基于 NextJS 的前后端一体化和服务器端预渲染(Server Side Rendering) 特性,可以方便地进行设备端传感器数据上传和客户端页面实时刷新。

NextJS 依赖 Node.js 环境和 ReactJS 前端框架,因此开发环境上需要安装好 Node.js 和 npm 包管理工具。在 Ubuntu 20.04 LTS 版本下安装nodejs 方法如下

1
2
$ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
$ sudo apt install -y nodejs
Read more »
0%