RxJS 原理及入门demo

前置知识

  1. iterable pattern 可遍历模式的API设计,比如observer.next()
  2. observer pattern 观察者模式的API设计,比如subscribe
  3. functional programming比如内部数据处理的copy API

概念

数据从创建符创建,通过pipe管道流动,经过操作符,最后通过subscribe输出结果

阅读更多
家庭云中心 - 我家云OMV部署 Aria2 + zerotier

一直想搞家庭云存储,以前是硬盘直接挂在 AC86U 上,内网 FTP 下行大概 50M/s 的样子。
换了 AX86U(1300块) 后内网 100M/s ,但是某个朋友推荐 我家云(100块) + 红米AX6(299块) 方案,内网 80M/s-90M/s,价格也更便宜。
于是换了方案后搭建 aria2 下载器 以及外网访问 zerotier 。
家里有公网IP,但是怕被攻击,维护麻烦,所以还是走虚拟内网,安全点。

阅读更多
webp 格式在 safari 下兼容

前景提要

后端用了 webp 格式,但是想让前端解决这个问题,所以有了这篇文章
有一个叫 webpjs 的插件,原理是如果存在 webp 且浏览器不兼容,则重新请求图片,将图片的 arraybuffer 转为 base64。
但是运行一次就要从 HTML 获取所有 img 标签进行转换,如果多个组件要用会出现就会重复发送请求,所以这里改了下源码,重新封装实现
吐槽一下: safari 简直就是新时代的 IE

使用

首先下载
https://github.com/DougFlands/MyComponents/blob/master/webpjs-0.0.2.modified.js
然后注入到 index.html 里

阅读更多
electron 增量与全量更新

前景提要

公司使用 electron 构建 PC 和 MAC客户端项目,有个自动更新的需求,这里记录一下。
win 下可以实现增量和全量更新,MAC 实现全量更新。
这里全量更新有两种方式 ,一种是 electron-update 实现,一种是请求后端接口手动实现。
前者的局限在于判断是否更新由插件约定好,有一些插件约定的文件需要能够访问,如果服务器上可以提供除了安装包以外的文件访问,那就可以用这个方式。
后者是我目前的方式,由前端将打包好的增量、全量更新文件给后端,服务器上只能存更新文件,所以没法用前者的方式。
不过这两种更新方式我都实现了,可以参考下代码。

阅读更多
使用docker构建本地开发环境

v2ex做了点讨论

https://www.v2ex.com/t/661334#reply0

最近在研究 remote development 突然想到可以用docker构建本地开发环境,而且优势还挺多的。
优势:

  1. 组内成员的开发环境一致
  2. 环境为linux,解决编译时大小写问题,以及可以提供类似生产环境的体验
  3. node-sass 等需要配置的环境在 dockerfile 内定义好,甚至可能需要的 python 环境也能提供
  4. 某些没有梯子的小伙伴下载依赖比较困难,需要设置变量,这里可以提前做好
阅读更多
mysql 主从配置

使用docker-compose搭建,直接上配置文件

阅读更多
从docker到k8s部署指南

主要介绍docker、docker-compose、dockerfile编写以及项目部署k8s。 部署项目:

  • traefik
  • react 前端
  • golang 微服务后端
  • consul
  • kafka
  • kafka-manager
  • zookeeper
  • redis
  • gogs
阅读更多
Golang 笔记

基础

Println 与 Printf 区别

  • Println: 可以打印出字符串,和变量
    fmt.Println(a)
  • Printf: 只可以打印出格式化的字符串,可以输出字符串类型的变量, 不可以输出整形变量和整形
    fmt.Printf("%d", a)  // right
    fmt.Println("abc")  // right
  • Sprintf: 格式化之后的字符串
阅读更多