咸鱼

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

0%

在Docker中构建包含Java应用程序的镜像有两种方法:

1. 使用Dockerfile构建镜像

可以编写一个Dockerfile,在其中定义构建镜像的所有步骤,比如安装JDK,复制Jar包,设置启动命令等。然后使用docker build命令构建镜像。

优点是可以自定义每个构建步骤,灵活控制镜像的内容。

2. 在docker-compose中构建镜像

阅读全文 »

现在 Letsencrypt 官方是推荐使用【certbot】 来安装证书。

它用 python 做的工具,可以根据现有的 HTTP 自动申请证书部署 HTTPS,并且可以自动定期续签。

一、安装和申请

1.1准备资源:

  • 一台Ubuntu服务器
  • 域名
阅读全文 »

记录一下MySQL的客户端连接工具软件

一、商业&收费

  1. Navicat
  2. SQLyog
  3. DataGrip

收费的软件不用说,每个都是很强大,适合专业人士。

二、开源&免费

阅读全文 »

Jupyter 是一个编程语言的交互式计算的web服务,简单来说:jupyter作为一个web服务,可以在线在浏览器编程。

jupyter 主要有两个产品:

  • jupyter notebook 在线文档应用,可以在笔记文档里运行python代码,并显示结果。
  • jupyter labnotebook 的加强升级版,用于笔记、代码和数据的最新的基于web的交互式开发环境。

对于学习者,比如我在学Python,我要做笔记:

  • 一般情况:我在编辑器或IDE写代码,运行代码,把代码和运行结果拷贝到笔记。
  • 使用jupyter:在浏览器里写笔记和代码,而笔记里面的代码是可以直接运行的,直观的很。
阅读全文 »

配置清华源镜像

1
2
$ pip config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple/
Writing to /root/.config/pip/pip.conf

或者临时指定镜像源

1
$ pip install notebook --index-url https://pypi.mirrors.ustc.edu.cn/simple/

1. display属性

  • display: block; 块级元素,垂直显示,宽度自动撑满,可以设置宽高。
  • display: inline; 内联元素,水平显示,宽度自动收缩,不能设置宽高。
  • display: inline-block; 内联+块级元素,水平显示,既可以设置宽高又可以水平显示。
  • display: flex; 弹性布局,适合用平均分布等,详情参考【传送门1】【传送门2】

2. position属性

  • position: static; 默认
  • position: absolute; 绝对定位
  • position: relative; 相对定位
  • position: fixed; 相对于浏览器窗口进行定位
  • position: sticky; 粘性定位,该定位基于用户滚动的位置
  • position: inherit; 从父元素继承 position 属性

3. 默认块级元素

阅读全文 »

项目需求:由自己的程序根据数据打印二维码标签,虽然调用 Win32 API 可以实现简单的格式,但利用 FastReport 报表模板显然是一个更好的解决方案,可维护性更好。

FastReport的功能很强大,报表模板打印只是它的一个小功能。

一、前言

FastReport VCL —— 报表开发Delphi组件库,报表模板文件是 fr3

FastReport 最终是编译成Delphi(bpl)库,引用到Delphi的IDE中使用。

阅读全文 »

项目需求:由自己的程序根据数据打印二维码标签,虽然调用 Win32 API 可以实现简单的格式,但利用 FastReport 报表模板显然是一个更好的解决方案,可维护性更好。

FastReport的功能很强大,报表模板打印只是它的一个小功能。

一、前言

FastReport.Net —— 报表开发.NET动态库,适用于 C# 编程语言,报表模板文件是frx

FastReport.Net 使用逻辑是:

阅读全文 »

【Iperf各个平台的下载地址】

帮助

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
42
43
44
45
46
47
48
49
50
51
52
❯ ./iperf3.exe -h
Usage: iperf [-s|-c host] [options]
iperf [-h|--help] [-v|--version]

Server or Client:
-p, --port # server port to listen on/connect to
-f, --format [kmgKMG] format to report: Kbits, Mbits, KBytes, MBytes
-i, --interval # seconds between periodic bandwidth reports
-F, --file name xmit/recv the specified file
-B, --bind <host> bind to a specific interface
-V, --verbose more detailed output
-J, --json output in JSON format
--logfile f send output to a log file
-d, --debug emit debugging output
-v, --version show version information and quit
-h, --help show this message and quit
Server specific:
-s, --server run in server mode
-D, --daemon run the server as a daemon
-I, --pidfile file write PID file
-1, --one-off handle one client connection then exit
Client specific:
-c, --client <host> run in client mode, connecting to <host>
-u, --udp use UDP rather than TCP
-b, --bandwidth #[KMG][/#] target bandwidth in bits/sec (0 for unlimited)
(default 1 Mbit/sec for UDP, unlimited for TCP)
(optional slash and packet count for burst mode)
-t, --time # time in seconds to transmit for (default 10 secs)
-n, --bytes #[KMG] number of bytes to transmit (instead of -t)
-k, --blockcount #[KMG] number of blocks (packets) to transmit (instead of -t or -n)
-l, --len #[KMG] length of buffer to read or write
(default 128 KB for TCP, 8 KB for UDP)
--cport <port> bind to a specific client port (TCP and UDP, default: ephemeral port)
-P, --parallel # number of parallel client streams to run
-R, --reverse run in reverse mode (server sends, client receives)

-w, --window #[KMG] set window size / socket buffer size
-M, --set-mss # set TCP/SCTP maximum segment size (MTU - 40 bytes)
-N, --no-delay set TCP/SCTP no delay, disabling Nagle's Algorithm
-4, --version4 only use IPv4
-6, --version6 only use IPv6
-S, --tos N set the IP 'type of service'
-Z, --zerocopy use a 'zero copy' method of sending data
-O, --omit N omit the first n seconds
-T, --title str prefix every output line with this string
--get-server-output get results from server
--udp-counters-64bit use 64-bit counters in UDP test packets

[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-

iperf3 homepage at: http://software.es.net/iperf/
Report bugs to: https://github.com/esnet/iperf

内网测试

cs模式,需要在局域网部署一个服务

阅读全文 »

一、生成二维码图片

1
2
3
4
5
import os
import qrcode # pip install qrcode

img = qrcode.make("https://kevinvane.github.io")
img.save('./qrcode_test1.png')

二、自定义参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import os
import qrcode # pip install qrcode

# qrcode.constants.ERROR_CORRECT_* 参数:
# 1. X=L时,大约7%或更少的错误能被纠正。
# 2. X=M(默认)时,大约15%或更少的错误能被纠正。
# 3. X=Q时,25%以下的错误会被纠正。
# 4. X=H时,大约30%或更少的错误能被纠正。
#
# box_size 二维码图片大小
# border 边缘白色边框大小
qr = qrcode.QRCode(
version=5,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=8,
border=1)
qr.add_data("https://kevinvane.github.io")
qr.make(fit=True)
img = qr.make_image()
# 设定颜色
# img = qr.make_image(fill_color="red", back_color="yellow")
img.save('./qrcode_test2.png')
阅读全文 »

CentOS 8 在2021年12月31日停止更新,取而代之的是 CentOS Stream (RHEL的测试版)。此情况下诞生了其他的发行版本 CentOS,比如:

  1. AlmaLinuxCloudLinux OS 的创建者打造,已在业界取得了一定的知名度。
  2. Rocky Linux 由卖掉 CentOSGregory Kurtzer 发起,由社区驱动。

** AlmaLinuxRHEL 完全在二进制上兼容,承诺永久免费。**

在虚拟机安装了 AlmaLinux9.0 DVD版GUI服务器版(全量) ,安装的方法和 CentOS 基本一样,截了几张图:

注意:最小安装没有GUI

阅读全文 »

编写docker-compose.yml文件

镜像可选的有

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: '3.3'

services:
my_zentao:
environment:
ADMIN_PASSWD: 123456
ADMIN_USER: admin
image: idoop/zentao
restart: always
volumes:
- /opt/zentao/data:/opt/zbox/
ports:
- 80:80
- 3306:3306
privileged: true
container_name: my_zentao_container

启动容器

阅读全文 »

前端和后端项目放在一起时,IDEA 会扫描索引前端项目的依赖目录 node_modules,这会导致卡顿,所以有必要让 IDEA 忽视此类目录。

方法一

对所有项目生效

在IDEA 的设置中 Editor - File Types - Ignored Files and Folders ,输入 node_modules

方法二

阅读全文 »

Gooey号称能把任何控制台应用程序转换为非常美观的的GUI应用程序,下面是我运行的测试代码,非常不错。

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
42
43
44

from gooey import Gooey, GooeyParser

@Gooey(program_name='Gooey测试Demo',language='chinese',encoding='utf-8')
def main():
parser = GooeyParser(description="这是一个测试程序")


# 必填参数
parser.add_argument('选择文件',help="这里要选择一个文件",widget="FileChooser")

# parser.add_argument('选择目录',help="这里要选择一个目录路径",widget="DirChooser")
# parser.add_argument("保存文件", help="文件保存的目录路径", widget="FileSaver")
# parser.add_argument("多文件选择", nargs='*', help="选择多个文件", widget="MultiFileChooser")
# parser.add_argument("文件名", help="输入你要保存的文件名称")
#
# parser.add_argument('日期', widget="DateChooser")
# parser.add_argument('时间', widget="TimeChooser")
#
# parser.add_argument("下拉选择框", widget='Dropdown',choices={"red":1,"green":2,"blue":3})
# parser.add_argument('下拉选择框(带输入过滤)', widget="FilterableDropdown",choices={"red":1,"green":2,"blue":3})

# 输入密码
# parser.add_argument('密码', widget="PasswordField")
# parser.add_argument('输入数字', widget="IntegerField")
# parser.add_argument('输入小数', widget="DecimalField")

#
# parser.add_argument('颜色选择器', widget="ColourChooser")
# parser.add_argument('滑块', widget="Slider")


# 可选参数
# parser.add_argument('-d', '--时间',
# default=2,
# type=int,
# help='程序输出的持续时间(秒)')

args = parser.parse_args()
print(args)

if __name__ == '__main__':
main()

【原文:功能和 API 概览】

Android 13 面向开发者引入了一些出色的新功能和 API。以下几部分内容可帮助您了解适用于您的应用的功能并开始使用相关 API。

有关新增、修改和移除的 API 的详细列表,请参阅 API 差异报告

开发者工作效率

阅读全文 »

【原文:behavior-changes-13】

与早期版本一样,Android 13 包含一些行为变更,这些变更可能会影响您的应用。以下行为变更仅影响以 Android 13 或更高版本为目标平台的应用。如果您的应用以 Android 13 或更高版本为目标平台,您应该修改自己的应用以适当地支持这些行为(如果适用)。

此外,请务必查看对 Android 13 上运行的所有应用都有影响的行为变更列表。

隐私权

通知权限会影响前台服务的显示

阅读全文 »