Go-Ldap-Admin | openLDAP 同步钉钉、企业微信、飞书组织架构实践和部分小坑

目录

一、Docker-compose快速拉起demo测试环境

二、原生部署流程

安装MySQL:5.7数据库

安装openLDAP

 修改域名,新增con.ldif

创建一个组织

安装OpenResty

下载后端

下载前端

部署后端

部署前端

三、管理动态字段

钉钉

企业微信

飞书

四、部分报错


Go-Ldap-Admin官网:Go-Ldap-Admin

本文用于记录整个安装部署过程以及过程中遇到的坑。 

首先准备一台干净的服务器,配置最好不低于2C4G,当然如果MySQL不在本机部署,那可以将配置降为1C2G。(CentOS7)我也不喜欢用这玩意儿,但是官网是按照这个来的。


一、Docker-compose快速拉起demo测试环境

仅仅是一个测试用的demo环境!不支持IM以进行数据同步。

docker和docker-compose默认你有,端口映射情况:

ServicePort(宿主机端口:容器端口)
MySQL3307:3306
openLDAP389:389
phpldapadmin8091:80
go-ldap-admin8090:80,8888:8888

拉取:

git clone https://github.com/eryajf/go-ldap-admin.git

进入到docker-compose目录之后,目录层级与内容如下:

tree -N docker-compose
docker-compose
├── config
│   ├── init.ldif
│   └── my.cnf
└── docker-compose.yaml1 directory, 3 files

拉起:

cd docs/docker-compose
docker-compose up -d

当看到容器都正常运行之后,可以在本地进行访问:http://localhost:8090,用户名/密码:admin/123456

如果想要访问PhpLdapAdmin,则可访问:http://localhost:8091,用户名/密码:cn=admin,dc=eryajf,dc=net/123456 

注意:这里有个小坑,在此测试环境中是无法进行钉钉等应用架构同步的,报错如下:

41001: access_token missing, hint: [1681804729372880375054761], from ip: *, more info at https://open.work.weixin.qq.com/devtool/query?e=41001

直到看见作者在GitHub的评论才知道是不支持。


二、原生部署流程

随手关一下:

systemctl disable firewalld.service --now

安装MySQL:5.7数据库

俺也没试过8.0,官网建议使用5.7。

由于CentOS的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件:

wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm

然后进行repo的安装:

rpm -ivh mysql80-community-release-el7-5.noarch.rpm

根据自己的需要,关闭,或者开启想要的版本:

# 关闭8.0
yum-config-manager --disable mysql80-community# 开启5.7
yum-config-manager --enable mysql57-community

开始安装:

yum install mysql-server -y

Mysql,启动!

systemctl start mysqld

第一次登录查看临时密码:

grep 'temporary password' /var/log/mysqld.log

登录后对密码进行修改:

alter user 'root'@'localhost' identified by 'Abc@1234';

随手执行一下:

use mysql;
update user set host = '%' where user ='root';

创建数据库:

CREATE USER 'ldap'@'localhost' IDENTIFIED BY 'Eryajf@123';CREATE DATABASE IF NOT EXISTS `go_ldap_admin` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;GRANT ALL PRIVILEGES on `go_ldap_admin`.* to 'ldap'@'localhost';FLUSH privileges;

安装openLDAP

以yum方式安装:

yum install openldap openldap-clients openldap-servers -y

复制一个默认配置到指定目录下,并授权,这一步一定要做,然后再启动服务,不然生产密码时会报错:

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

授权:

chown -R ldap /var/lib/ldap/DB_CONFIG

启动:

systemctl enable slapd --now

初始化配置,生成密码,这里自己的记录一下{SSHA}这一串,后面需要用到:

slappasswd -s 123456

新增修改密码文件,ldif为后缀,文件名随意,不要在/etc/openldap/slapd.d/目录下创建类似文件 生成的文件为需要通过命令去动态修改ldap现有配置,如下,我在家目录下,创建文件(记得修改{SSHA}密码为上面拿到的那一串)

cd ~
vim changepwd.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}LSgYPTUW4zjGtIVtuZ8cRUqqFRv1tWpE# 这里解释一下这个文件的内容:
# 第一行执行配置文件,这里就表示指定为 cn=config/olcDatabase={0}config 文件。
# 你到/etc/openldap/slapd.d/目录下就能找到此文件
# 第二行 changetype 指定类型为修改
# 第三行 add 表示添加 olcRootPW 配置项
# 第四行指定 olcRootPW 配置项的值
# 在执行下面的命令前,你可以先查看原本的olcDatabase={0}config文件,
# 里面是没有olcRootPW这个项的,执行命令后,你再看就会新增了olcRootPW项,
# 而且内容是我们文件中指定的值加密后的字符串

执行命令以修改配置:

ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif

切记不能直接修改/etc/openldap/slapd.d/目录下的配置。

我们需要向 LDAP 中导入一些基本的 Schema。这些 Schema 文件位于/etc/openldap/schema/目录中,schema控制着条目拥有哪些对象类和属性,可以自行选择需要的进行导入(注意依次执行)

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

 修改域名,新增con.ldif

这里官方自定义的域名为 eryajf.net,管理员用户账号为admin。 如果要修改,则修改文件中相应的dc=eryajf,dc=net为自己的域名,密码切记改成上面重新生成的哪个

vim con.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=eryajf,dc=net" read by * nonedn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=eryajf,dc=netdn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=eryajf,dc=netdn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}LSgYPTUW4zjGtIVtuZ8cRUqqFRv1tWpEdn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=eryajf,dc=net" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=eryajf,dc=net" write by * read

执行命令以修改:

ldapmodify -Y EXTERNAL -H ldapi:/// -f con.ldif

确认这里有5条输出,因为进行了5项修改:

启用memberof功能,新增add-memberof.ldif:

vim add-memberof.ldif
dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldapdn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf

新增refint1.ldif文件:

vim refint1.ldif
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint

新增refint2.ldif文件:

vim refint2.ldif
dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember  manager owner

依次执行以下命令,顺序不要错:

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add-memberof.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif


创建一个组织

到此,配置修改完了,在上述基础上,我们来创建一个叫做 eryajf company 的组织(官网叫这个,根据需求,自行修改),并在其下创建一个 admin 的组织角色(该组织角色内的用户具有管理整个 LDAP 的权限)和 一些初始化必须的组织:

vim base.ldif
dn: dc=eryajf,dc=net
objectClass: top
objectClass: dcObject
objectClass: organization
o: Eryajf Company
dc: eryajfdn: cn=admin,dc=eryajf,dc=net
objectClass: organizationalRole
cn: admindn: ou=people,dc=eryajf,dc=net
ou: people
description: 用户根目录
objectClass: organizationalUnitdn: ou=dingtalkroot,dc=eryajf,dc=net
ou: dingtalkroot
description: 钉钉根部门
objectClass: top
objectClass: organizationalUnitdn: ou=wecomroot,dc=eryajf,dc=net
ou: wecomroot
description: 企业微信根部门
objectClass: top
objectClass: organizationalUnitdn: ou=feishuroot,dc=eryajf,dc=net
ou: feishuroot
description: 飞书根部门
objectClass: top
objectClass: organizationalUnit

执行命令,添加配置, 这里要注意修改域名为自己配置的域名,然后需要输入上面我们生成的密码123456

ldapadd -x -D cn=admin,dc=yaobili,dc=com -W -f base.ldif


安装OpenResty

配置阿里和openresty的yum源:

yum -y install yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

安装:

yum install openresty -y

创建一些软链,便于维护或者规范:

ln -snf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
ln -snf /usr/local/openresty/nginx/conf /etc/nginx

启动服务:

systemctl enable openresty --now

下载后端

官网上给的下载版本是0.5.9,但是我强烈建议安装0.5.10:

wget https://github.com/eryajf/go-ldap-admin/releases/download/v0.5.10/go-ldap-admin-v0.5.10-linux-amd64.tar.gz
mkdir go-ldap-admin && tar xf go-ldap-admin-v0.5.10-linux-amd64.tar.gz -C go-ldap-admin

下载前端

wget https://github.com/eryajf/go-ldap-admin-ui/releases/download/v0.5.13/go-ldap-admin-ui-v0.5.13.tar.gz
tar xf go-ldap-admin-ui-v0.5.13.tar.gz

部署后端

mkdir -p /data/www && mv go-ldap-admin /data/www

根据实际情况进行修改:

vim /data/www/go-ldap-admin/config.yml

应用相关信息获取查看这里:

钉钉:配置钉钉同步 | Go-Ldap-Admin

企业微信:配置企业微信同步 | Go-Ldap-Admin

飞书:配置飞书同步 | Go-Ldap-Admin

 添加系统服务:

vim /usr/lib/systemd/system/go-ldap-admin.service
[Unit]
Description=Go Ldap Admin Service[Service]
WorkingDirectory=/data/www/go-ldap-admin/
ExecStart=/data/www/go-ldap-admin/go-ldap-admin[Install]
WantedBy=multi-user.target

启动:

systemctl daemon-reload && systemctl start go-ldap-admin

部署前端

移动制品:

mv go-ldap-admin-ui /data/www//demo-go-ldap-admin.eryajf.net

在OpenResty中添加如下配置,代理本项目:

mkdir /etc/nginx/conf && vim /etc/nginx/conf/nginx.conf
server {listen 80;server_name demo-go-ldap-admin.eryajf.net;root /data/www//demo-go-ldap-admin.eryajf.net/dist;location / {try_files $uri $uri/ /index.html;add_header Cache-Control 'no-store';}location /api/ {proxy_set_header Host $http_host;proxy_set_header  X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_pass http://127.0.0.1:8888;}
}

记得自己去 include 一下配置文件,默认你懂。

nginx -t
nginx -s reload

确保一下服务都起来了:

systemctl status mysqld
systemctl status slapd
systemctl status go-ldap-admin
systemctl status openresty

都启动之后,就可以打开web管理页面

http:ip:端口

http://你的IP/phpldapadmin#/dashboard

默认用户名:admin,默认密码是LDAP设置的密码123456。


三、管理动态字段

在进行同步之前需要先去先建立字段映射:

下面有图片示例。 

钉钉

创建分组的动态关系:

{"flag": "dingtalk_group",  // 字段标识"attributes": {  // 字段属性"groupName":"custom_name_pinyin",  // 分组名称(通常为分组名的拼音)"remark":"name",  // 分组描述"sourceDeptId":"id",  // 部门ID"sourceDeptParentId":"parentid" // 父部门ID}
}

 创建用户的动态关系:

{"flag": "dingtalk_user", // 字段标识"attributes": { // 字段属性"username":"custom_name_pinyin", // 用户名(通常为用户名拼音)"nickname":"name",  // 中文名字"givenName":"name", // 花名"mail":"email",  // 邮箱"jobNumber":"job_number", // 工号"mobile":"mobile", // 手机号"avatar":"avatar", // 头像"postalAddress":"work_place", // 地址"position":"title", // 职位"introduction":"remark", // 说明"sourceUserId":"userid", // 源用户ID"sourceUnionId":"unionid" // 源用户唯一ID}
}

企业微信

 创建分组的动态关系:

{"flag": "wecom_group","attributes": {"groupName":"custom_name_pinyin","remark":"name","sourceDeptId":"id","sourceDeptParentId":"parentid"}
}

创建用户的动态关系:

{"flag": "wecom_user","attributes": {"username":"custom_name_pinyin","nickname":"name","givenName":"alias","mail":"email","jobNumber":"mobile","mobile":"mobile","avatar":"avatar","postalAddress":"address","position":"external_position","introduction":"name","sourceUserId":"userid","sourceUnionId":"userid"}
}

飞书

创建分组的动态关系:

{"flag": "feishu_group","attributes": {"groupName":"department_id","remark":"name","sourceDeptId":"open_department_id","sourceDeptParentId":"parent_department_id"}
}

创建用户的动态关系:

{"flag": "feishu_user","attributes": {"username":"custom_name_pinyin","nickname":"name","givenName":"name","mail":"email","jobNumber":"employee_no","mobile":"mobile","avatar":"avatar","postalAddress":"work_station","position":"job_title","introduction":"name","sourceUserId":"user_id","sourceUnionId":"union_id"}
}

以企业微信举例,就这样填进去即可:

然后去同步吧~但是需要注意!!!!!!

先同步分组,再同步用户!!!!!


四、部分报错

errcode“:41001,“errmsg“:“access_token missing rid:

若你使用的是docker-compose直接拉起的,前面也提到了那对不起,demo版本不支持IM认证。若不是,则是你的自建应用没有设置ip白名单(拿企业微信举例,没错就算你不设置,他也不会让所有ip都正常访问)。

访问:企业微信

找到你的自建应用并到这里配置:


LDAP Result Code 68 "Entry Already Exists"

说明ou已经存在


This base cannot be created with PLA.

此根不能创建ou。找个干净的目录新建文件:base.ldif

vim base.ldif
dn: dc=改成你的,dc=改成你的
o: ldapit
objectclass: dcObject
objectclass: organization

 执行,记得修改内容:

ldapadd -f base.ldif -x -D cn=admin,dc=改成你的,dc=改成你的 -W

ldap_add: Invalid syntax (21)
        additional info: objectclass: value #0 invalid per syntax

配置文件格式或内容存在错误


record not found

若你使用的是本文中的最新版本,则问题在于你的字段填写,请检查字段映射是否正确。若你使用的是官网中的安装版本,建议替换到最新版本进行安装。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/144975.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存函数(memcpy、memmove、memset、memcmp)你真的懂了吗?

💓博客主页:江池俊的博客⏩收录专栏:C语言进阶之路👉专栏推荐:✅C语言初阶之路 ✅数据结构探索💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论📝收藏⭐ 文…

26663-2011 大型液压安全联轴器 课堂随笔

声明 本文是学习GB-T 26663-2011 大型液压安全联轴器. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了大型液压安全联轴器的分类、技术要求、试验方法及检验规则等。 本标准适用于联接两同轴线的传动轴系,可起到限制…

分布式事务-TCC案例分析流程图

防止cancel方法在最后执行出现问题,用户收到提示已经退款成功但是由于cancel过慢或者出现问题(虽然最后会重试成功但是用户体验很差),可以做以下的业务sql模型优化(增加一个冻结金额)。

消息队列实现进程间通信

write.c #include<myhead.h>typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_s;#define SIZE sizeof(Msg_s)-sizeof(long) //消息正文的大小int main(int argc, const char *argv[]) {key_t key; //定义一个键值if((key ftok("./&q…

基于springboot的洗衣店订单管理系统

目录 前言 一、技术栈 二、系统功能介绍 顾客信息管理 店家信息管理 店铺信息管理 洗衣信息管理 预约功能 洗衣信息 交流区 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#x…

红队打靶:THE PLANETS: MERCURY打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透 第三步&#xff1a;获取初步立足点并搜集信息 第四步&#xff1a;软连接劫持sudo提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶&#xff0c;详述了…

【HTML】表格行和列的合并

概述 当我们需要在 HTML 表格中展示复杂的数据时&#xff0c;行和列的合并可以帮助我们实现更灵活的布局和结构。通过合并行和列&#xff0c;我们可以创建具有更多层次和结构的表格&#xff0c;使数据更易于理解和分析。 在 HTML 表格中&#xff0c;我们可以使用 rowspan 和 …

KUKA机器人通过3点法设置工作台基坐标系的具体方法

KUKA机器人通过3点法设置工作台基坐标系的具体方法 具体方法和步骤可参考以下内容: 进入主菜单界面,依次选择“投入运行”—“测量”—基坐标,选择“3点法”, 在系统弹出的基坐标编辑界面,给基座标编号为3,命名为table1,然后单击“继续”按钮,进行下一步操作, 在弹出的…

华为云智能化组装式交付方案 ——金融级PaaS业务洞察及Web3实践的卓越贡献

伴随信息技术与金融业务加速的融合&#xff0c;企业应用服务平台&#xff08;PaaS&#xff09;已从幕后走向台前&#xff0c;成为推动行业数字化转型的关键力量。此背景下&#xff0c;华为云PaaS智能化组装式交付方案闪耀全场&#xff0c;在近日结束的华为全联接大会 2023上倍受…

word中使用latex多行公式,矩阵公式

\eqarray{H& [h(x_1)^T,\cdots,h(x_N)^T]^T \\ & [\matrix{g(w_1 x_1b_1) & \cdots & g(w_L x_1b_L) \\ \vdots & \ddots & \vdots \\ g(w_1 x_Nb_1) & \cdots & g(w_L x_Nb_L)}]_{N \times L}}&的引起的那条竖线可以通过backspace或者del…

5、Linux驱动开发:设备-设备注册

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

Kubernetes 上的数据已跨越鸿沟:在 GKE 上运行有状态应用程序的案例

Kubernetes 是当今云原生开发的事实上的标准。长期以来&#xff0c;Kubernetes 主要与无状态应用程序相关&#xff0c;例如 Web 和批处理应用程序。然而&#xff0c;与大多数事物一样&#xff0c;Kubernetes 也在不断发展。如今&#xff0c;我们看到 Kubernetes 上有状态应用程…

26967-2011 一般用喷油单螺杆空气压缩机

声明 本文是学习GB-T 26967-2011 一般用喷油单螺杆空气压缩机. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了一般用喷油单螺杆空气压缩机(以下简称"单螺杆空压机")的术语和定义、型号、基本 参数、要求、试验方法、…

华为OD七日集训第6期 十一特辑 - 按算法分类,由易到难,循序渐进,玩转OD

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、优先队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治…

【Linux】完美解决ubuntu18.04下vi不能使用方向键和退格键

今天在刚安装完ubuntu18.04&#xff0c;发现在使用vi命令配置文件时使用方向键并不能移动光标&#xff0c;而是出现一堆奇怪的英文字母&#xff0c;使用退格键也不能正常地删除内容&#xff0c;用惯了CentOS的我已经感觉到ubuntu没有centos用着丝滑&#xff0c;但是没办法&…

2.4g无线收发芯片:Ci24R1(DFN8)

Ci24R1 采用GFSK/FSK数字调制与解调技术。数据传输速率与PA输出功率都可以调节&#xff0c;支持2Mbps, 1Mbps, 250Kbps三种数据速率。高的数据速率可以在更短的时间完成同样的数据收发&#xff0c;因此可以具有更低的功耗。 Ci24R1 是一颗工作在2.4GHz ISM频段&#xff0c;专为…

2023 “华为杯” 中国研究生数学建模竞赛(F题)深度剖析|数学建模完整代码+建模过程全解全析

F题代码思路 当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2021年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们一起看看研赛的F题呀&#xff01;全文都已…

Machine Learning(study notes)

There is no studying without going crazy Studying alwats drives us crazy 文章目录 DefineMachine LearningSupervised Learning&#xff08;监督学习&#xff09;Regression problemClassidication Unspervised LearningClustering StudyModel representation&#xff08…

025 - STM32学习笔记 - 液晶屏控制(二) - 代码实现

025- STM32学习笔记 - 液晶屏控制&#xff08;二&#xff09; - 代码实现 好久没更新学习笔记了&#xff0c;最近工作上的事情太多了&#xff0c;趁着国庆中秋&#xff0c;多更新一点看看。 上节学习了关于LTDC与DMA2D以及显示屏的相关知识点&#xff0c;这节开始实操&#xf…

域环境介绍

一、概述 内网也指局域网&#xff0c;指的是某个区域由多台计算机互连而成的计算机组&#xff0c;范围通常在数千米以内&#xff0c;在局域网中&#xff0c;可以实现文件管理&#xff0c;应用软件共享&#xff0c;打印机共享、工作组内的日程安排、电子邮件和传真通信服务等&a…