咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

Ubuntu默认安装的Nodejs版本都是比较低的(差很多),无法编译Vue,所以要安装最新版本。
思路是先安装旧版本,再升级到最新版本。

安装(失效)

网络原因,无法安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 先安装旧版
$ sudo apt install -y nodejs npm
# 2. 换源
$ sudo npm config set registry https://registry.npm.taobao.org (已停用)
$ sudo npm config set registry https://registry.npmmirror.com

# 注意:n方式安装,网络不通,装不了
# 3. 安装工具 n (管理 node 版本)
$ sudo npm install n -g
# 4. node升级安装最新版本
$ sudo n stable
# 5. npm升级安装最新版本(要先升级node再升级npm)
$ sudo npm install -g npm

安装(推荐)

阅读全文 »

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

$ sudo add-apt-repository ppa:openjdk-r/ppa

$ sudp apt-get update

# 安装java8
$ sudo apt-get install openjdk-8-jdk

# 安装java11
$ sudo apt-get install openjdk-11-jdk

$ java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1, mixed mode, sharing)

Ubuntu默认安装的PostgreSQL版本都是比较低的(差很多),通过官方源来安装最新的版本。

一、安装

参考【Linux downloads (Ubuntu) 】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get -y install postgresql
$ sudo service postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2022-05-25 10:18:58 CST; 18min ago
Main PID: 4020835 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 4578)
Memory: 0B
CGroup: /system.slice/postgresql.service

May 25 10:18:58 cnubuntu systemd[1]: Starting PostgreSQL RDBMS...
May 25 10:18:58 cnubuntu systemd[1]: Finished PostgreSQL RDBMS.

二、查看版本

阅读全文 »

gradle在中国有cdn了:

修改 gradle-wrapper.properties 中的

services.gradle.orgdownloads.gradle-dn.com

【参考】

1. 简单

1
$ sudo docker run -p 8080:8080 -p 50000:50000 -u 0 jenkins/jenkins:lts

-u 0 :表示已root账号启动镜像(镜像内部使用的用户是 jenkins )

2. 带jenkins_home

阅读全文 »

2019年09月17日 JDK 13 发布,非 LTS 版本。

新特性: http://openjdk.java.net/projects/jdk/13/

  • 350: Dynamic CDS Archives
  • 351: ZGC: Uncommit Unused Memory ZGC优化
  • 353: Reimplement the Legacy Socket API Socket的底层实现优化
  • 354: Switch Expressions (Preview) switch表达式增加yield关键字用于返回结果,作用类似于return
  • 355: Text Blocks (Preview) 使用 “”” 三个双引号表示文本块

中文

  • 350: 对 Java 10 中引入的 应用程序类数据共享进行了进一步的简化、改进和扩展
  • 351: ZGC优化
  • 353: Socket的底层实现优化
  • 354: switch表达式增加yield关键字用于返回结果,作用类似于return
  • 355: 使用 “”” 三个双引号表示文本块
阅读全文 »

部署的相当多坑的,如果顺利,按照上面的资料走,基本不会有问题。下面记录一些坑位。

我是在VMWare虚拟机上做的测试,需要两台Windows服务器。

坑位

  1. 系统版本,windows server 2012,安装域控制和office online一直有未知错误。
  2. 安装好系统之后,不要激活,不要安装更新补丁,建议马上拍一个快照。
阅读全文 »

更新: “USB 启动盘” 推荐 rufusventoy

背景

2014年买的老笔记本想要重装系统,老硬件不想装Win10,用U盘装了个 微PE(不建议使用,有软件捆绑) 安装了原版sp1,装完之后,硬盘原本挺好的四个分区盘符全乱了,一般的盘符可以修改过来,但系统盘变成了D盘,改不过来。

于是想再次重装,顺便对硬盘重新分一下区,分两个区就足够。

Ghost

阅读全文 »

Win8、Win10对技术更新了不少,现在的购买的机器都是预装Win10,如果想要降级为Win7,那么如果想简单的重装系统,会发现装不了。

原因

  1. 新的机器都是采用 UEFI BIOS 启动方式 ,它具有启动速度快、安全性高和支持大容量硬盘的特点。
  2. Win10的硬盘分区采用 GUID 格式

修改

如果要降级重装 Win7,修改这两个东西:

阅读全文 »

故障

一台 Thinkpad E431 (装的Win7系统)半年没开过机,拿出来时,开机停留在“Windows启动管理器”,不会自动进入系统,并且 Enter 键失效了,无法进入系统。

后来通过乱按左边的键才能进一次系统,在系统里发现 BackspaceShift 键也失效了(可以下载 键盘检测 软件来检查)。

初步怀疑是放置时间太久导致COMS没电,主板的一些配置信息丢失了。F1 进去看了一遍BIOS,没找到什么改的,而且 Enter 失效,通过外接键盘才能改BIOS信息。

意外解决问题

阅读全文 »

断点下载HTTP协议中有支持,一般的Web服务器都会支持,如 nginx

HTTP 协议范围请求允许服务器只发送 HTTP 消息的一部分到客户端。范围请求在传送大的媒体文件,或者与文件下载的断点续传功能搭配使用时非常有用。

应用场景

  • 断点下载,下载大文件可以暂停。
  • 多任务/多线程下载大文件(类似迅雷软件)

一、检查服务器是否支持断点续传

阅读全文 »

切片上传一般用在大文件上传,防止上传过程中网络断开重头开始,但在HTTP协议里面并没有,所以实现要使用自定义一下方法。

网上很多资料,大概实现的原理:

  1. 客户端将大文件切为X份,每份切片都做md5校验。
  2. 按顺序一次上传一片,同时前后端做md5校验。
  3. 切片上传过程中可以暂停,并且在发生网络异常时,只是某切片上传失败。
  4. 上传所有切片之后,请求合并文件,后端将所有切片合并,前后端再次对大文件进行md5校验。

js本地文件切片

1
let blob = file.slice(start, end,file.type);
阅读全文 »

概述

axios 请求二进制文件,一般会得到 Blob 或者 ArrayBuffer

需要将 axios 的请求设置为 responseType: 'blob'或者'arraybuffer'请求二进制文件,一般会得到Blob或者arraybuffer。'

引用

Blob 对象是一个代表二进制数据的基本对象,生成Blob对象有两种方法:一种是使用Blob构造函数,另一种是对现有的Blob对象使用slice方法切出一部分。

阅读全文 »

有时候有些静态网站:如文档类的,放在公网,希望要用户认证才能访问,Nginx的
ngx_http_auth_basic_module 模块基于 “HTTP Basic Authentication” 协议实现了用户认证,可以很方便的实现用户认证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;
server_name localhost;

# 随便填些信息都行
# auth_basic off 关闭用户授权
auth_basic "welcome";
# 授权信息路径
auth_basic_user_file /etc/auth_basic/userpasswd;

location / {
root /var/www/test;
index index.html;
}
}

userpasswd 这个文件的一行代表一个用户,格式是: user:passwd ,其中密码是加密的,可以通过 htpasswd 工具来生成。

1
2
3
4
$ htpasswd -cb ./userpasswd test 123456
Adding password for user test
$ cat userpasswd
test:$apr1$2fZNNVc7$/w76Ek8aezH7g1WoLgtx5/

** 浏览器授权访问 **

阅读全文 »

Nginx可以提供一个简单的Web页面站点为你提供文件下载服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 6060;
server_name localhost;
location / {
root /var/www/download;

# 开启文件服务
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
#autoindex_format的值默认是html 另外还可以设置为: xml | json | jsonp ,windows下中文文件名会乱码
autoindex_format json;

# 下载x流量之后开启限速
limit_rate_after 100k;
# 每个连接的下载速度限制
limit_rate 50k;
# 展示中文文件名
charset utf-8,gbk;
}
}

** 效果: **


有些文件放在nginx下,如果不做速率限制,当客户端的网络环境比较好的话,下载速度非常快。这本来是好事,但假如服务器带宽只有10M,而有一个客户下载速率达到10M的话,其他的客户将无法访问服务器。
所以,要对单独一个连接进行速率限制。

配置

为方便局域网内测试,这里将限制值设置的比较小。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80;
server_name localhost;
location / {
root /var/www/test;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;

# Sets the initial amount after which the further
# transmission of a response to a client will be rate limited
# limit_rate_after 10m;
limit_rate_after 100k;
# 每个连接的下载速度限制
limit_rate 50k;
}
}

limit_rate_after 是一个门阀,表示客户下载 10m 或者 100k 的byte之后开始触发速率限制。
limit_rate 是速率限制,最高 50k

阅读全文 »

本文以Windows平台下编译Linux应用举例,记录一下Golang交叉编译。

1
2
3
4
5
6
7
8
# help
go get:获取远程包(需 提前安装 git或hg)
go run:直接运行程序
go build:测试编译,检查是否有编译错误
go fmt:格式化源码(部分IDE在保存时自动调用)
go install:编译包文件并编译整个程序
go test:运行测试文件
go doc:查看文档(CHM手册)

一、设置环境变量

1
2
$ set GOARCH=amd64
$ set GOOS=linux

在终端CMD输入没用,我直接在环境变量设置了 GOARCHGOOS 。这样就无法在Windows运行,因为 go run 的也是指linux平台。

阅读全文 »

打印HTTP包信息

1
2
$ curl -v URL
$ curl --verbose URL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ curl -v -X POST http://localhost/ping
> POST /ping HTTP/1.1
> Host: localhost
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200
< Server: nginx
< Date: Tue, 23 Jul 2019 04:07:18 GMT
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 5
< Connection: keep-alive
<
PONG

之前写的《深入解析HTTP–Chunk分块发送》 和 《深入解析HTTP–Multipart》 都是关于用POST请求上传文件,本文要讲的,是指POST请求传递字符数据。

我们用PostMan作为客户端,SpringBoot作为服务端,Wireshark抓包,分析一下每个请求的包结构,了解一下其中的区别。

一、最简单的传参

服务端代码:

1
2
3
4
5
@PostMapping("/post")
public ResponseEntity testpost(@RequestParam("name") String name){

return ResponseEntity.ok("ok:"+name);
}
阅读全文 »