RSSAmplifier

Blog

Joeson Huang's Tech Space

Working on Go and React mostly. Into all kinds of devop and infra stuff as well!

joeosnw.github.ioRSS feed ↗10 posts

Latest posts

Cool Golang slog.Logger tricks

Intro For years in Go, I’ve used many different logging libraries, from logrus to zap . After the release of slog into Go standard library, I immediately embraced it. It’s clever design made it so versatile and easy to use, and has already accumulated an enormous amount of libraries in the ecosystem. Trick 1 Try have a dedicate package in your project for logging attributes. you have broad view of…

Shapez 2 reusable blocks, all 100% efficiency

This assumes you upgrades are at the same level. (cutting and stackgins at 1/4 belt speed) 90 degree rotator, buttons for toggle clockwise/counter-clockwise, and output to straight or side Show Code…

(草稿WIP) 从头打造全屋智能家庭 (持续更新), Part II - 硬件选择, 实操以及注意事项

硬件选择 具体的智能硬件方面目前是 Aqara (绝大部分) 和 Tuya, 可以完美的通过 Zigbee 配对, 离线控制. 而且 Zigbee2MQTT 里面可以直接 OTA 升级硬件官方固件. 下面介绍的都是一些周边的硬件. Uunifi Dream Machine PRO Special Edition, UDM-PRO-SE 核心网络设备, 因为有各个房间ap面板(目前还没安装), 和自己托管的监控方案的需求. 直接一步到位购入了 UDM-PRO-SE, 其中 SE 是升级版, 多了POE和POE+供电, 正好适用于摄像头和AP. 不用再买一台POE的交换机(如果设备不多的话) Unifi 的产品最方便的是可以无缝接入 Home Assistant, 包括客户端信息 (是否联网, 所在AP). Unifi Protect 也可以无缝接入, 不仅仅是有视频源,…

从头打造全屋智能家庭 (持续更新), Part I - 网关平台/协议及软件的选择

先上个全家福 序 在此之前, 我已经在租来的房间中尝试了多种智能家居以及网关系统. 此次借搬入新买的房子的之机, 我将从头打造一个全屋智能的智慧家庭. 然后也记录下来, 与君共享. 一个是分享当中一些误区, 坑点. 二是以后改进时有据可循. 内容规划 网关平台/协议选择 软件选择 硬件选择 实操 电路改造? 待续 网关平台/协议选择 平台 目前市面上每个厂商都有自己的智能家居平台, 米家 , 涂鸦 , 博联 , HomeKit , Google Home , Alexa 等一众平台厂商可供选择. 协议 通讯协议分别又有 Wif , 蓝牙 , Zigbee, Z-wave 等各类协议. 其中 Z-wave 因为使用的 865-926 MHz 波段在国内不属于公共领域, 使用起来是违法的, 所以我们不能考虑. Wifi 和 蓝牙 的大部分设备都不支持完全离线运行,…

Go Pitfalls and Patterns

1. 如何获取interface的reflect.Type type Duck interface { Quack () } var reflectTypeOfDuck = reflect . TypeOf ( struct { Duck }) . Field ( 0 ) . Type () func IsDuck ( val reflect . Value ) bool { return val . Type () . Implements ( reflectTypeOfDuck ) } 2. 不要用map[string]interface{}来Unmarshal 避免下面的用法 m := map [ string ] interface {}{} json . Unmarshal ( data , & m ) println ( m [ "message" ] . ( string…

使用Bazel编译CGO项目 (Golang + V8)

Why 最近在写一个小项目, 需要在 Go 执行 JS. 看过了otto, goja 甚至 go-ducktype. 但是出于性能角度的考虑, 还是想用 V8. 社区有不少 Golang +V8 项目. 但是绝大部分早已停止了维护. 最终看下来 只有 augustoroman/v8 这个 V8 的 Go wrapper 和 Node.js 的作者 Ry Dahl 的 v8worker2 . 其中 v8worker2 . 并未暴露 V8 的API, 而是在其基础上包装了一个基于 ArrayBuffer <-> []byte 的接口, 而且也停止了维护. 而 augustoroman/v8 却不能直接 go get 使用, 与 GO111MODULE 不兼容等问题. 于是便有了 joesonw/js8 这个库. 在把已经编译好的 V8 文件打包进来, 并加上对 Bazel 的支持. What…

一个用于前端api请求缓存的npm库

介绍一个新开源的一个小项目. 用来在前端项目上, 缓存请求结果在内存中. 适用于比较大型的应用, 存在多个地方可能重复请求同一个ID, 或者批量中会包含重复的ID. 为了节省资源以及时间, 写了这么一个小小的工具. 安装 npm i bulkcache 实例 import { Cache, FilterFunction } from 'bulkcache'; interface User { id: number; name: string; email: string; } function idGetter(user: User) { return user.id; } async function fetch(id: number) { return await YourAPI.fetchUser(id); } async function bulkFetch(ids:…

工作随笔: 白鹭Egret5.1 实用插件开发指南

白鹭引擎在升级到5.1的同时, 迎来了一个重大功能的更新. 引擎和编译彻底分开, 同时, 对于编译功能引入的插件机制. 极大的方便了定制工作流. 1 插件机制 首先来介绍一下5.1之后的机制. 当使用新创建一个基于5.1的项目之后. 会发现与之前不同, 会多出一个 scripts 文件夹. 这个文件夹里面就是编译相关的类型, 其中 config.ts 便是编译的入口文件了, 类似于 webpack.config.js . 由于自动生成的里面有很多 ‘无效’ 的代码, 所以我们先来精简一下配置(关键代码). const config: ResourceManagerConfig = { configPath: '', resourceRoot: () => 'resource', buildConfig: (params) => { const { target, command,…

记一次公司阿里云内网搭建

刚刚加入一个创业公司, 开始负责技术方面的事情. 首先呢, 肯定是先搭建服务器和内网环境. 在这里就过一遍阿里云搭建内网的一个过程. 作为一个自己的记录, 也给有同样需求的朋友们一个分享. 首先是阿里云机器的配置: 首先创建一个专有网络 创建一个交换机(子网) 然后前往 VPC路由器 界面, 添加一条路由, 目标网段 填写 0.0.0.0/0 , 表示此网络下所有机器, 下一跳 选择你的堡垒机, 这样内网的出口流量都会导到堡垒机上 登入堡垒机, 运行 iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE , 其中 10.0.0.0/8 根据实际情况填入你的交换机网段, 这样内网流量都使用了堡垒机ip 配置内网dns解析(堡垒机) 以 centos 为例, 安装dnsmasq, yum install -y…

How to install nvm for all users on NFS

The environment is Ubuntu 14.04 LTS NFS Server-side setup Let’s say your NFS shared directory is /shared/local , and it maps to local(NFS server) directory /usr/local First, we need to clone nvm, git clone https://github.com:creationix/nvm.git /usr/local/src/nvm Then let’s make two directories for storing nvm stff. mkdir /usr/local/nvm mkdir /usr/local/node And we then create /etc/profile.d/nvm.sh…