博客
论软件系统架构风格
摘要
2015 年初,我所在的公司承担了某集团公司的移动信息化开放平台的建设工作。我在该项目中担任系统架构设计师的职务,主要负责设计平台系统架构和安全体系架构。该平台以移动信息化发展为契机,采用”平台+应用”的模式解决现有应用的集中移动化需求。平台整体的逻辑复杂,对系统的高可用和高扩展能力提出了较高的要求。
本文以平台系统架构为例,讨论了软件架构的选择和应用。在该项目中,我结合实际需要,从开发和维护难度、安全性、稳定性和扩展能力等方面综合衡量,为平台选择了具有表现层、业务逻辑层、数据访问层的三层分层架构。平台的研发耗时 10 个月,目前,系统已稳定运行了近两年时间,实践证明,这种架构设计有效的降低了系统的维护和开发成本,增强了系统的安全性、提高了系统的稳定性和扩展能力。
爱在深秋
今年中国的十一假期可谓是来的五味杂陈,就在假期前的头两个星期还是一片愁云惨雾,在经济上没有什么好消息,没人能提得起度假的心情,可是在就月份的最后一个星期——9 月 26 号的政治局会议之后,大陆的 A 股迎来了历史性的大涨,再次冲向了三千点。
9 月 30 号这天央视网登出了一则题为《股市大涨、文旅火热……金秋丰收时节,各行业满载希望喜迎国庆》的文章,当日上证指数大涨 8.06%,创造了自 2015 年股灾以来最大的单日涨幅,深成指这天的涨幅也达到了 10.67%,为低迷的股市注入了新的动能,我愿称此次上涨为 爱在深秋。
论软件架构的选择
摘要
2015 年初,我所在的公司承担了某集团公司的移动信息化开放平台的建设工作。我在该项目中担任系统架构设计师的职务,主要负责设计平台系统架构和安全体系架构。该平台以移动信息化发展为契机,采用”平台+应用”的模式解决现有应用的集中移动化需求。平台整体的逻辑复杂,对系统的高可用和高扩展能力提出了较高的要求。
本文以平台系统架构为例,讨论了软件架构的选择和应用。在该项目中,我结合实际需要,从开发和维护难度、安全性、稳定性和扩展能力等方面综合衡量,为平台选择了具有表现层、业务逻辑层、数据访问层的三层分层架构。平台的研发耗时 10 个月,目前,系统已稳定运行了近两年时间,实践证明,这种架构设计有效的降低了系统的维护和开发成本,增强了系统的安全性、提高了系统的稳定性和扩展能力。
Gaoman 数位板 M6 linux 配置
多屏如何设置数位板控制哪个屏幕
- 查看显示器信息
xrandr
Screen 0: minimum 320 x 200, current 3840 x 1200, maximum 16384 x 16384
eDP-1 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 302mm x 189mm
1920x1200 60.00*+ 60.00
...
320x240 60.00
360x202 60.00
320x180 60.00
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-3 disconnected (normal left inverted right x axis y axis)
DP-3 connected primary 1920x1080+1920+0 (normal left inverted right x axis y axis) 345mm x 194mm
1920x1080 59.93*+ 60.00 59.94
1600x900 60.00
1280x720 60.00 59.94
1024x768 60.00
800x600 60.32
640x480 60.00 59.94
DP-4 disconnected (normal left inverted right x axis y axis)
可以看到目前检索到 eDP-1
, DP-3
两个屏幕
- 执行
xsetwacom
命令设置数位板参数
‵‵‵plain Usage: xsetwacom [options] [command [arguments...]] Options: -h, --help - usage -v, --verbose - verbose output -V, --version - version info -d, --display "display" - override default display -s, --shell - generate shell commands for 'get' -x, --xconf - generate xorg.conf lines for 'get'
Commands: --list devices - display detected devices --list parameters - display supported parameters --list modifiers - display supported modifier and specific keys for keystrokes --set "device name" parameter [values...] - set device parameter by name --get "device name" parameter [param...] - get current device parameter(s) value by name ‵‵‵
xsetwacom --list devices
检索数位板设备
GAOMON GAOMON_M6 Pen stylus id: 16 type: STYLUS
GAOMON GAOMON_M6 Pad pad id: 17 type: PAD
GAOMON GAOMON_M6 Touch Ring pad id: 22 type: PAD
GAOMON GAOMON_M6 stylus id: 23 type: STYLUS
GAOMON GAOMON_M6 eraser id: 24 type: ERASER
xsetwacom set 'GAOMON GAOMON_M6 Pen stylus' MapToOutput DP-3
完成设置
您需要了解的 8 个基本项目管理文档
项目管理涉及创建大量文档。如果您研究项目管理标准,您会发现至少有十几个不同的计划、多种类型的报告以及许多其他文档。好消息是项目经理不必编写所有内容 - 想法是仅编译对工作流程效率至关重要且利益相关者需要的内容。
Gitlab CI/CD 配置手册
产物
gitlab 支持将作业完成时生成的文件或文件夹保存下来,这也产物可以在后续的作业中使用或下载,以实现资源的传递和共享。
他的关键字时 artifacts
使用方式
在上面的示例中,build_job 作业执行构建过程后会生成一个名为 dist/ 的目录作为产物。这个目录中包含了构建后的静态文件。这些产物可以在后续的作业中使用,例如部署到服务器上或者进行测试。
产物路径
paths 关键字用于指定需要保留的产物路径。可以是文件或者目录。在示例中,dist/ 表示保留整个 dist 目录及其下的所有文件。
其他属性
除了 paths
关键字外,还可以通过其他属性对产物进行更详细的配置,如 expire_in
用于设置产物过期时间、name
用于指定产物的名称等。
作用域
产物默认是作业级别的,即只能在同一个作业流程中的后续作业中使用。如果希望跨作业流程共享产物,可以使用 dependencies
关键字将产物传递给其他作业。
通过使用 artifacts
关键字,可以方便地将作业生成的产物保留下来,以供后续作业使用。这种机制实现了作业之间的数据共享和传递,使得 CI/CD 流程更加灵活和高效。
Shell 脚本编程【循环】
#!/bin/bash
clear
for var in Cloks Alabama Alaska Arizona Arkansas California Colorado
do
echo $var
done | sort
# for var in Cloks Alabama Alaska Arizona Arkansas California Colorado; do echo $var; done | sort
echo $var
sleep 1 && clear
list="Alabama Alaska Arizona Arkansas California Colorado"
# list = append(list, "Connecticut")
list=$list" Connecticut"
for state in $list; do
echo "have you ever visited $state?"
done
sleep 1 && clear
# reading values from a file
file="./states"
cat << EOF > $file
Alabama cloaks
Alaska
Arizona
Arkansas
California
Colorado
EOF
IFS_OLD=$IFS
IFS=$'\n'
for state in $(cat $file); do
echo "Visit beautiful $state"
done
IFS=$IFS_OLD
rm -rf $file
sleep 1 && clear
for file in ./*; do
if [ -d "$file" ];then
echo "$file is a directory"
elif [ -f "$file" ];then
echo "$file is a file"
fi
done
sleep 1 && clear
for (( i = 1; i <= 10; i++ )); do
echo "the number is $i"
done
sleep 1 && clear
var1=10
while [ $var1 -gt 0 ]; do
echo $var1
var1=$[ $var1 - 1 ]
done
sleep 1 && clear
var1=10
while echo $var1
[ $var1 -ge 0 ]; do
echo "this is inside loop"
var1=$[ $var1 - 1 ]
done
sleep 1 && clear
var1=10
until [ $var1 -eq 0 ]; do
echo $var1
var1=$[ $var1 - 1 ]
done
IFS_OLD=$IFS
IFS=$'\n'
for entry in $(cat /etc/passwd); do
echo "Values in $entry -"
IFS=:
for value in $entry; do
echo " $value"
done >> output.txt
done > output-1.txt
IFS=$IFS_OLD
sleep 1 && clear
for (( i = 0; i < 10; i++ )); do
echo "start loop $i"
for (( j = 0; j < i; j++ )); do
if [ $i -gt 5 ]; then
break 2
else
echo $i-$j
fi
done
done
sleep 1 && clear
IFS_OLD=$IFS
IFS=:
for folder in $PATH; do
echo "start folder: $folder"
for file in $folder/*; do
if [ -x $file ]; then
echo " $file"
fi
done
done
IFS=$IFS_OLD
sleep 1 && clear
input="users.csv"
cat << EOF > $input
rich,Richard Blum
christine,Christine Bresnahan
barbara,Barbara Blum
tim,Timothy Bresnahan
EOF
while IFS=',' read -r userid name; do
echo "adding $userid-$name"
# useradd -c "$name " -m $userid
done < "$input"
rm $input