0%

前言

本篇教程想要教会你如何使用quarkus的官方响应式编程库Mutiny, 并且学会如何在quarkus下进行响应式编程.

什么是Mutiny?

Mutiny是一个事件驱动的, quarkus官方的java响应式编程库. 在quarkus框架中进行响应式编程开发, 指的就是通过Mutiny来包装, 观察, 处理事件所产生的数据流.

如何学习?

接下来我会用提问-解答的方式去讲解怎么学习使用Mutiny, 只要一步步跟着问题去思考, 就可以学会使用Mutiny.

阅读全文 »

安装samba

1
sudo apt install samba

配置samba

1
sudo nano /etc/samba/smb.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[global]
read raw = Yes
write raw = Yes
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
min receivefile size = 16384
use sendfile = true
aio read size = 16384
aio write size = 16384

[sambashare]
comment = Samba on Ubuntu
path = /home/username/sambashare
read only = no
browsable = yes
1
sudo service smbd restart

设置用户名密码

1
sudo smbpasswd -a username

部署elasticsearch

使用单节点模式

在本地或者测试环境可以使用单节点模式, 简单方便

1
docker run --name elasticsearch --net elastic -v /path/to/data:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 -d -e discovery.type=single-node -e ELASTIC_PASSWORD=xxxxx -e xpack.security.enabled=true -e xpack.security.authc.api_key.enabled=true docker.elastic.co/elasticsearch/elasticsearch:7.13.0

成功之后ES会以单节点模式启动.

阅读全文 »

创建nginx.conf配置文件

通过nginx官方镜像创建nginx.conf模板, 然后在该模板上进行修改即可

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
user  nginx;
worker_processes auto;

error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf.d/*.conf;

server{
server_name 被访问的域名;
listen 8080;
location / {
proxy_pass http://target-server;
}
}

upstream target-server{
server xx.xx.xx.xx:xxxx;
}
}

运行nginx

1
docker run --name nginx -p 80:8080 -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx:stable

注意这里最关键的是对端口的映射, 观察这个命令, 并不是直接将host的80端口和容器的80端口进行映射, 而是先将host的80和nginx的8080进行绑定, 然后nginx再对8080端口进行监听然后反向代理.

这么做的原因是默认普通权限下容器内nginx是不能够监听1024以下的端口的, 需要提升权限, 但是通过80->8080的映射转换, 就可以正常启动了.

下载frp

1
2
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
tar -zxvf ./*.tar.gz

frpc.ini

1
2
3
4
5
6
7
8
9
10
11
[common]
server_addr = xx.xx.xx.xx
server_port = 7000
token=xxxxxxxxxx
login_fail_exit=false

[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3389

login_fail_exit=false这个配置能够让程序即使链接失败也不会自动退出, 例如当设置frpc为开机启动, 但是刚开机电脑会没有网络这种情况, 如果不设置该配置项, 失败次数过多之后frpc会自动退出.

阅读全文 »

使用场景

公司内网服务器不能连外网, 或者网速很慢, 但是平时开发又有使用外网的需求, 为了不想要频繁地切换网络, 需要对网络进行配置, 使得平时访问外网可以使用WiFi热点, 而内网的服务器或者内网网站又能通过网线直接访问.

阅读全文 »

目标是在WSL2使用安装在Win10内的V2ray来实现科学上网.

WSL2获取Win10ip

在Win10 -> WSL2这个方向, 是可以直接通过Localhost来访问的, 但是WSL2 -> Win10这个方向就不能直接访问Localhost了, 需要指定Win10的ip, 想要查看WSL2中Win10的ip, 只需要查看resolve.conf :

1
2
3
4
5
6
cat /etc/resolv.conf

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.18.176.1

这个172.18.176.1就是在WSL2中Win10的ip.

想要方便获取这个IP, 可以直接使用下方命令 :

1
cat /etc/resolv.conf|grep nameserver|awk '{print $2}'
阅读全文 »

触发状态

  • 系统 : Win10 2004
  • cpu : amd R7-4800U
  • 手机 : 小米10Pro

bug症状

使用数据线连接电脑和手机, 手机开启个人热点-USB网络共享功能, 系统会变得卡顿, 点击任务栏反应会变慢, 点击左下角win键甚至要等待数秒到数十秒才会弹出窗口.

解决方案

不使用USB网络共享功能, 用手机开热点算了.

原因猜测

  • 可能是amd的cpu驱动问题.
  • 可能是Win10 2004问题.
  • 可能是手机的USB网络共享功能有问题.

由于设备不多, 难以测试, 并且影响不大, 所以就不深究了.

2020.07.14更新

我发现我是用红米5A接上microUSB数据线开启同样的USB网络共享功能啥事没有, 也不卡顿, 所以要么是微软偷偷修复了bug(?), 要么是amd的type-c驱动有问题(?) 要么是手机的接口有问题(?) 不好说, 但是现在用红米开热点就完事了.

笔记本配置

  • 型号 : 坠机堡垒
  • 服役时长 : 5年
  • cpu : i5-4200h
  • 内存 : 8+4的ddr3内存
  • 硬盘 : 240G用了4年的威刚SATA固态+1T机械硬盘用于存电影
  • 屏幕 : 45%NTSC祖传普通15.6屏幕

换了新电脑, 这台老机器就决定用来当NAS用了.

2020.10.15更新

刚好三个月过去了, 中间又换了两种方案, 现在终于确定了什么系统做nas适合我.

本来是从win10切过去了freenas, 因为我发现freenas原生就带有OneDrive云同步功能, 并且还有ZFS这种文件格式对数据进行保护, 所以一开始用起来觉得很完美, 但是由于以前没用过FreeBSD, 才发现freenas下的插件生态居然这么贫瘠, 第一次看到官方加上三方的插件一共就这么一点的时候我惊了, 就只有一个qBittorrent是能够开箱即用的, 并且由于我没有公网ip, 连装zerotier-one都失败了, 这就导致了这个freenas只能完全在内网, 没法远程访问.

本来我以为就得这么别扭地用着freenas的时候, 我突然发现freenas公司现在在做一个新的项目 : TrueNAS SCALE, 这个项目是FreeNas公司目前在做的新的一款nas系统, 它让我感到兴奋的原因是这个新的系统是基于Debian而不是FreeBSD进行开发的!!!, 这就意味着可以原生使用Docker, 整个Docker镜像生态都可以直接接入到TrueNAS里面, 而不仅仅是以前的几十个插件, 甚至连zerotier都可以直接在DockerHub上面搜到镜像, 所以当我知道了这个系统之后, 马上就切换过去了, 但是由于目前这个系统还在非常早期的阶段, 有问题是很正常的, 各种各样的bug也经常出现, 如果想要稳定现在还是不适合上车. 现在可以说一下这个系统目前有什么坑.

首先第一点是, 尽量不要将这个系统安装在内存卡和U盘上, 经过我多次尝试, 只要是将系统安装到内存卡或U盘上, 就没有启动正常过, 要么是刚启动就完全卡住, 要么就是无法导入boot-pool, 需要手动import, 但是当我用硬盘安装时, 瞬间流畅进入系统.

第二点就是只要更新系统, Docker里面的镜像和容器会被全部清除, 所以启动容器要尽量挂在到本地, 并且保存好docker run命令, 以后更新系统之后方便重新启动容器.

上面这两点是目前比较大的坑, 其余的页面小bug还是能够接受的, 并且新的TrueNAS SCALE可以无缝导入以前freenas的存储池, 所以目前基本完美.

2020.07.15更新

还是选择装回去Win10 2004了, Ubuntu下还是没法做到完美的Ondrive方案,我几百个G的视频想要完美同步到Onedrive, 所以选择安装2004版本, 开WSL2使用docker来确保原来的服务都是可用的, 以后通过笔记本远程桌面到这台NAS做主力机算了, 现在的笔记本夏天发热太严重了, 所以选择将服务压力都放到NAS上面, 笔记本直接远程桌面上去当正常电脑用.

阅读全文 »

曾经我觉得, 最好用的内网穿透工具是frp, 并且写了一篇文章来赞美免费提供8M带宽提供内网穿透的Sakura Frp, 但后来我发现, 哪怕是Sakura Frp免费提供了公网服务器, 使用起来还是有点繁琐了, 并且速度只有8M, 所以最终我找到了能够代替frp的内网穿透工具 : ZeroTier One.

ZeroTier One是什么?

ZeroTier One是一款内网穿透软件, 但是和frp的"内网客户端-远程公网服务器-内网客户端"模式不同的是, ZeroTier One是通过p2p方式在不同的设备之间进行连接的, 只要所有的设备都加入了同一个ZeroTier Network, 互相之间就可以像在局域网中那样访问对方, 并且是直接连接而不是走公网服务器, 速度上限基本取决与设备之间的网速而不是ZeroTier服务器.免费版的ZeroTier能够连接多达100各设备, 足够个人使用了.

阅读全文 »

本机安装docker

安装过程省略 , 注意docker for Windows 是依赖Win10的hyper-v功能的,而hyper-v的虚拟化技术目前与VMware并不兼容 , 所以使用了VMware安装虚拟机却想要使用docker for Windows , 有可能需要卸载VMware.

卸载原本的Oracle数据库

参考下列文章 :

Oracle 11g数据库安装和卸载教程

  1. 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务.

  2. 开始->程序->Oracle - OraDb11g_home1->Oracle安装产品-> Universal Installer 卸装所有Oracle产品.

  3. 运行regedit,删除下列所有注册表内容 :

    1
    2
    3
    4
    5
    HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE
    HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\ 中所有与Oracle有关的内容
    HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet002\\Services\\ 中所有与Oracle有关的内容
    HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\ 中所有与Oracle有关的内容
    HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Eventlog\\Application\\ 中所有与Oracle有关的内容
  4. 开始->设置->控制面板->系统->高级->环境变量 删除环境变量CLASSPATH和PATH中有关Oracle的设定.

  5. 重新启动计算机.

阅读全文 »

导数的含义

导数是增量比的极限.

这句话揭露了导数的本质是极限, 也说明了为什么第一章要学极限, 因为导数就是极限.

导数要解决的问题

  • 用导数的定义求导
  • 复合函数求导
  • 高阶求导
  • 隐函数求导
  • 参数方程求导
阅读全文 »

最近看到很多节目都在搞年度盘点 , 那我也来盘点一下2019年我遇到的值得称道的年度产品.

年度最佳软件 : scoop

年度最佳笔记应用 : notion

年度最佳编辑器 : VSCode

年度最佳markdown编辑器 : Typora

年度最佳在线交友平台 : Github

年度最佳浏览器 : 新Microsoft Edge

年度最佳在线付费服务 : Office 365

年度最佳键盘输入体验 : 将CapsLock键映射为Ctrl

年度最佳鼠标输入体验 : 将前进键+左键/右键映射为切换桌面

年度最佳运动鞋 : 态极1.0Plus

年度最高性价比价格敏感人群无线蓝牙耳机 : QCY T5

最值定理

\(y=f(x)\)\([a , b]\)上连续 , 则\(y\)\([a , b]\)上总有最大值和最小值.

零点定理

\(y=f(x)\)\([a , b]\)连续 , 且\(f(a)\)\(f(b)\)异号 , 即\(f(a)\cdot f(b)<0\) , 则在\([a , b]\)中至少存在一点\(x_0\)使得\(f(x_0)=0\) , 即图像与\(x\)轴至少有一个交点 .

零点定理的作用

三大定理的作用都是用来解决证明题的 , 包括第三章的中值定理 , 和第五章定积分那里 , 整个第一学期能考证明题的只有这三个地方.

零点定理主要是用来解决需要证明一切关于\(\xi\)为0的证明题.

阅读全文 »

连续

连续就是指 :

函数在该点的极限值 = 函数值

这是函数连续的最重要概念.

注意 : 函数连续可以推导出函数的极限值存在 , 但是反过来 , 函数的极限值存在 , 却不能说明函数连续.

连续的充要条件

解决分段函数分段点的连续问题

充要条件 :

如果函数在\(x_0\)处连续 , 则函数在\(x_0\)处的左右极限存在并相等 , 并且极限值等于函数值.

这句话说明了4件事情 :

如果一个函数连续 , 则 :

  • 左极限存在
  • 右极限存在
  • 左右极限相等
  • 极限值等于函数值

上面四点有任意一点不满足 , 则说明函数在该点不连续.

阅读全文 »

极限是学习高等数学的第一个知识点 , 这一章学习极限 , 主要就是学习计算极限.而计算极限最重要的一步 , 也是第一步 , 就是判断极限的型.

极限的型

极限的型可以粗略地分为4种 , 分别为 : \[ \frac cc=C , \frac 0c=0 , \frac c0=\infty , \frac 00=未定型 \] 所谓的未定型 , 就是结果是未知的 , 不可预料的 , 而前面三种的答案都是唯一固定的 , 所以考试只会考未定型.

计算极限的方法

这里的方法细分可以分为9种 , 有一些方法在以后学了更高级的方法后就没用了 , 但也是用来打基础的.

阅读全文 »

为什么要写这个数学笔记

我上大学遇到的高数老师 , 叫邝雪松 , 他是我认为的 , 我在大学遇到过的最厉害 , 最有激情 , 最会教课的老师 . 他的讲课风格非常厉害而且通俗易懂 , 基本完全放弃PPT . 每节他的课 , 前面几排都是要抢着去的 , 比其他那些只知道念课件的老师不知道强到哪里去了.

我非常钦佩他的上课水平 , 并且当时的我较为详细地将他的讲课内容记录到了笔记本中 , 在16年末到17年初 , 刚好准备过年的时候 , 制作了第一版word文档的数学笔记 :

阅读全文 »

GitHub Page博客源文件,通过GitHub Action自动发布推送

原理

简单来说,原理就是将所有的hexo文章文件放到当前的Blog分支,然后在Blog分支添加一个Action,每当这个分支接收到更新,就触发一次Action,在Github提供的免费服务器上安装node.js,再安装hexo,然后生成静态页面,推送到jiayaoO3O.github.iomaster分支.

阅读全文 »

一般来说,想要让Onedrive将某个目录下的文件上传到云,得将对应的文件或者文件夹拷贝到Onedrive目录下,但是有时候却又不方便将文件挪动到Onedrive,例如D盘是仓库盘,存放着大量视频,但是Onedrive却在C盘,这个时候将视频移动到Onedrive会占用大量空间,并且本来D盘作为仓库盘就是用于存放资料的,现在挪动到C盘,影响文件规划.

所以可以使用mklink命令来在存放文件的目录和Onedrive目录中创建一个连接,让Onedrive识别到.

使用管理员权限打开CMD,输入以下命令:

1
mklink /J OneDrive文件夹下的目录绝对路径 需要链接到Onedrive的目录绝对路径

即可.

题目

给定一个整数,写一个函数来判断它是否是 3 的幂次方。

示例 1:

输入: 27 输出: true

示例 2:

输入: 0 输出: false

示例 3:

输入: 9 输出: true

示例 4:

输入: 45 输出: false

阅读全文 »

题目

你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。

你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。

示例:

输入: 4 输出: false 解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。

阅读全文 »

题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例: > 输入: [0,1,0,3,12] > 输出: [1,3,12,0,0]

说明: - 必须在原数组上操作,不能拷贝额外的数组。 - 尽量减少操作次数。

阅读全文 »

docker容器中的时区一般来说都是使用UTC,但是中国的时区是使用CST,所以当使用某些需要依赖时间的服务时时间就会对不上,这时候就要修改容器的时区.

Debian和ubuntu类似但是稍微有点不同.

Ubuntu

ubuntu镜像本身是没有安装一个叫tzdata的软件,这个软件可以帮我们设置时区,而且在首次安装后会自动帮我们设置已经指定了的时区,所以要做的有2步,在Dockerfile文件中添加以下命令,既可在原有的RUN指令之后添加,也可另起一行RUN,但必须在apt-get update命令之后:

阅读全文 »

一般情况下docker镜像产生的容器,都是无法直接在终端中输入中文的,因为docker镜像追求的就是最小化修改,没有必要的部分是不会进行添加与修改的.

虽然Debian和Ubuntu是爹和儿子,但是两者设置的方法略有不同.

总体的步骤就是:

  1. 修改文件/etc/locale.gen,将需要的语言注释取消掉.
  2. 运行locale-gen命令.
阅读全文 »

随着vscode推出remote-container容器开发模式,在docker里面搭hexo变得简单了起来,非常方便,现在来记录一下vscode使用docker搭建hexo的步骤.

首先要知道待解决的问题有哪些:

  • vscode的remote-container模式好在哪.
  • 如何使用vscode调用docker生成一个镜像.
  • 生成的镜像会有哪些问题.
  • 安装hexo需要哪些东西.
  • 要对Dockerfile进行什么修改才能让生成的容器本身就安装好hexo.
阅读全文 »

由于UWP本身运行在沙盒中,默认情况下是不能直接访问localhost的,所以也就不能直接访问本机的代理服务,但是Win10自身有一个叫CheckNetIsolation.exe 的命令行工具可以将uwp应用设置为使用代理.

单独指定某个UWP应用可以代理

  1. 通过Win+S在搜索框输入"注册表"来打开注册表编辑器

  2. 在上图的蓝色框处,输入下面的地址:

    1
    HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings

    就会定位到上图的位置,左边的的密密麻麻的都是电脑上UWP应用的SID值,而右边绿色框的DIsplayName就是你点击的某个uwp应用的名字,现在要做的就是慢慢按方向键下键,寻找你需要进行代理的uwp软件.

  3. 找到需要代理的软件之后,复制该软件红色框处的SID,然后在CMD中输入以下命令:

    1
    CheckNetIsolation.exe loopbackexempt -a -p=UWP的SID

    就可以直接生效了.

  4. 如果需要取消代理,恢复原样,在CMD中输入以下命令:

    1
    CheckNetIsolation.exe loopbackexempt -d -p=UWP的SID

    对所有UWP应用设置可以代理

    从上面的方法可以知道,想要对某个uwp使用代理,就只要知道它的SID然后设置就可以了,现在想要对所有uwp进行设置,也就是只要知道所有uwp的SID.

    在CMD中输入以下命令即可对所有UWP进行设置:

    1
    FOR /F "tokens=11 delims=\" %p IN ('REG QUERY "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings"') DO CheckNetIsolation.exe LoopbackExempt -a -p=%p

CapsLock键,占着最好的位置,产出最低的贡献,所以很多人包括我都会选择将它映射成其他功能. vim党喜欢将CapsLock键映射成esc,这样退出输入模式就会非常的轻松,但是我vim用得不多,所以更想要将它映射成ctrl键,并且由于vim的hjkl方向移动很好用,所以我也打算将CapsLock+hjkl实现方向移动.

阅读全文 »

不要直接安装apt仓库内的docker.io

apt仓库中的docker.io是很老版本的docker,现在新版的docker是直接叫做docker-ce,不要直接sudo apt install docker.io

如果你已经这样安装了docker.io,请输入以下命令卸载:

1
sudo apt-get remove docker docker-engine docker.io containerd runc

此时docker.io会被卸载,但是以前下载的images, containers,volumes都会得以保留.

阅读全文 »

产生该问题的原因

产生该问题的原因是由于Windows平台和linux平台的默认换行符是不一样的,linux使用的是0x0A(LF)而Windows使用的是0x0D0A(CRLF),这就导致了当Windows下的代码放到linux下运行时,虽然代码没有错,但是linux下的git检测到项目的换行符为CRLF时会自动换成LF.

阅读全文 »