普通视图

发现新文章,点击刷新页面。
昨天以前子舒的博客

远程工具 RustDesk 安装流程

作者 子舒
2023年9月2日 16:25

RustDesk 是一款功能齐全的远程桌面应用,支持 Windows、macOS、Linux、iOS、Android、Web 等多个平台。支持 VP8 / VP9 / AV1 软件编解码器和 H264 / H265 硬件编解码器。完全掌控数据,轻松自建。P2P 连接,端到端加密。在 Windows 上可以非管理员不安装运行,根据需要在本地或远程提升权限。

下面是在linux服务器上部署中继服务器的脚本。

docker拉取镜像

docker image pull rustdesk/rustdesk-server

运行hbbs

# 服务器IP >> 替换为你当前终端的ip
docker run -d --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -it --net=host --rm rustdesk/rustdesk-server hbbs -r 服务器IP
# 如果–net=host运行正常,-p选项就不起作用了, 可以去掉。
sudo docker run --name hbbs  -v /docker/rustdesk:/root -it -d --net=host --restart=always rustdesk/rustdesk-server hbbs -r 服务器IP

运行hbbr

docker run -d --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -it --net=host --rm rustdesk/rustdesk-server hbbr
# 如果–net=host运行正常,-p选项就不起作用了, 可以去掉。
sudo docker run --name hbbr -v /docker/rustdesk:/root -it -d --net=host --restart=always rustdesk/rustdesk-server hbbr

使用 docker ps 命令查看服务是否正常运行。

windows

image

"ID服务器" 和 "中继服务器" 都填写服务器ip,不需要加端口,但是在服务器防火墙要记得放行端口号。

国产代码编辑器何愁不崛起

作者 子舒
2023年8月25日 16:25

相关文献:


今天摸鱼发现了一个神奇的东西,CEC-IDE。

据说是:“国内首款适配国产操作系统、自主可控的集成开发环境工具CEC-IDE”,在某网站有官方资料说明。

下载了一下打算瞅瞅,嚯!前端程序员对这个应该都不陌生 (除了不认识左上角的logo)

随着深入了解,又发现了一个有意思的地方, 国产代码编辑器安装完第一步,官网文档教你怎么切换成中文模式。

咱好歹把中文默认语言安排上对吧,不然多对不起 "国产" 这个名头。


试用了一下这个软件,确实挺不错,除了 logo 跟 vscode 不同,其他都完美适配了 vscode,简直是非常好用,不愧是...!

... 真的挺无语,就是说 骗经费稍微用点心吧。

Bitwarden / Vaultwarden --- 密码管理工具

作者 子舒
2023年7月27日 16:27

1.介绍

Bitwarden 是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息。Bitwarden 平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。Bitwarden 提供云端托管服务,并支持自行部署解决方案。

在调研一些市面常用的密码管理工具之后,我选择了 Bitwarden。然后使用自托管的方式部署在服务器上,定时备份数据库,导出密码,安全性也有保证。

https://bitwarden.com/

而Vaultwarden 是一个使用 Rust 编写的非官方 Bitwarden 服务器实现,提供了不错的 web 管理界面,并与 Bitwarden 兼容。

2.部署

先在服务器执行指令。

docker run -d --name bitwardenrs \  
  --restart unless-stopped \  
  -e WEBSOCKET_ENABLED=true \  
  -v /data/password/data/:/data/ \  
  -p 6666:80 \  
  -p 3012:3012 \  
  vaultwarden/server:latest

部署完成后打开网站,登陆注册之后,删除容器。

需要配置禁止注册的功能,因为我只想自己使用。如果不禁止注册,可以忽略下面这两步。

docker stop bitwardenrs  #停止容器  
docker rm -f bitwardenrs  #删除容器
docker run -d --name bitwardenrs \  
  --restart unless-stopped \  
  -e SIGNUPS_ALLOWED=false \  
  -e WEBSOCKET_ENABLED=true \  
  -v /data/password/data/:/data/ \  
  -p 6666:80 \  
  -p 3012:3012 \  
  vaultwarden/server:latest

3.docker-compose.yml

通过 ChatGPT 我将这段代码转化成了docker-compose.yml 文件,可以更方便的部署安装。

version: '3'
services:
  bitwardenrs:
    image: vaultwarden/server:latest
    container_name: bitwardenrs
    restart: unless-stopped
    environment:
      - SIGNUPS_ALLOWED=false
      - WEBSOCKET_ENABLED=true
    volumes:
      - /data/password/data/:/data/
    ports:
      - "6666:80"
      - "3012:3012"

4.chrome 扩展

通过反向代理可以使用域名登陆 web 端,并且使用了 chrome 扩展方式,在登陆网站可以自动保存密码。

https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb

之后我只需要记住一个主密码,其他网站密码全部采用加密方式生成,方便与安全并存。

昨夜梦有感

作者 子舒
2023年7月10日 16:28

2023年07月09日夜梦

昨晚我做了一个梦,也许是因为最近太多玩《极限国度》的缘故。在梦中,我在一条陌生的赛道上狂飙,以极速骑行。当我经过一座拱桥时,遇到了一个年轻人,他和我做着相同的动作,优雅地在空中旋转着,360度的转体后稳稳地降落下来。

随着时间的推移,场景莫名地转变,我来到了小时候的家乡。高耸的水塔和大坝,两旁是湍急的河流。突然间,原本明亮的天空变成了黑色。我抬头仰望,只见一片漆黑,空气中仿佛弥漫着焦糊的味道,给人一种破败的感觉。太阳的踪迹已然消失,不是夜晚降临的景象,而是一个黑色的太阳,或者说太阳熄灭了,但我的眼睛仍能看到周围的景物。

我感到一丝恐慌,不知道光源从何而来。我和那个年轻人沿着小路继续前行,世界变得异常安静,没有任何声音。就在我不知所措之际,路的尽头出现了一个村庄,人影模糊地闪动着。我正打算走过去询问发生了什么事情,那个年轻人却拉住了我,示意我保持安静。

我们继续前行,发现许多生物,看起来像《我的世界》游戏中的末影人,不停地穿梭着。突然间,它们似乎发现了我们,展开翅膀向我们飞来。作为普通人,这让我感到非常害怕。紧张中,我就在这时醒了过来,看了看手机,显示6点半。无法再入睡,我起来倒了杯水。

ps: 梦是没有丝毫逻辑的,脑海中的剧情可能前言不可后语,上一秒还在街道上奔跑,下一秒就穿越到了侏罗纪被当作食物吞进腹中。可能是精力太充沛的缘故,已经很久没有做梦了。

为了避免胡思乱想,好好运动一番吧!

image

vue生命周期

作者 子舒
2020年6月19日 16:39

学习vue中一个非常重要的领域,就是生命周期,它包含了很多的内容。每个vue实例在被创建的时候都要经历一系列的初始化过程,这个过程就是vue的生命周期。

每个vue实例在被创建的时候都要经过一系列的初始化过程——例如,需要把设置数据监听、编译模板、将实例挂载到DOM并在数据变化时更新DOM等,我们要把这一系列的过程称为组件的生命周期(组件从注册到销毁的整个过程)。我们有时候需要在组件生命周期的某个过程中,执行某些代码,基于此,vue提供了生命周期钩子函数,给了用户在不同阶段添加自己的代码的机会。

但是在此之前,我们要详细的介绍下组件的生命周期,以及生命后期中每个阶段组件完成和未完成的部分。

一、组件的生命周期

放一张大家都很熟悉的官网文章中对生命周期的注释图。

从图中可以看出,vue为生命周期提供了8个钩子函数,分别是:

  • beforeCreate: 创建前
  • created: 创建后
  • beforeMount: 挂载前
  • mounted: 挂载后
  • beforeUpate: 更新前
  • upated: 更新后
  • beforeDestoy: 销毁前
  • destoyed: 销毁后

1.beforeCreate

beforeCreate在vue实例发生之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。

我们在上面的例子中在的beforeCreate钩子中调用Vue的data和method,来看一下结果:

可以看到Vue中的data和方法都是去不到的,并且是在wath之前执行

2.created

实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

主要应用:调用数据,调用方法,调用异步函数

console输出的结果我们看一下

可以看到:created钩子可以获取Vue的data,调用Vue方法,获取原本HTML上的直接加载出来的DOM,但是无法获取到通过挂载模板生成的DOM(例如:v-for循环遍历Vue.list生成li)

3.beforeMount

在挂载开始之前被调用:相关的 render 函数(模板)首次被调用。

例如通过v-for生成的html还没有被挂载到页面上

 beforeMount: function () {
    console.log('beforeMount:',document.getElementsByTagName('li').length);
  },

console打印出来的beforeMount为1

4.mounted

el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。

有初始值的DOM渲染,例如我们的初始数据list,渲染出来的li,只有这里才能获取

 mounted: function () {
    console.log('mounted:',document.getElementsByTagName('li').length);
  },

结果 mounted: 3 , 可以看到到这里为止,挂载到实例上了,我们可以获取到li的个数了

5.beforeUpdate

数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。

当我们更改Vue的任何数据,都会触发该函数

 beforeUpdate: function () {
    console.log('beforeUpdate 钩子执行.');
    console.log('beforeUpdate:'+this.message)
  },

6.updated

由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。

当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。

该钩子在服务器端渲染期间不被调用。

数据更新就会触发(vue所有的数据只有有更新就会触发),如果想数据一遍就做统一的处理,可以用这个,如果想对不同数据的更新做不同的处理可以用nextTick,或者是watch进行监听

 updated: function () {
    console.log('updated 钩子执行...');
    console.log('updated:',this.message)
  },

7.beforeDestroy

实例销毁之前调用。在这一步,实例仍然完全可用。

8.destroyed

Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用。

结果

可以看打到销毁Vue实例时会调用这两个函数

❌
❌