開源工具新玩法:cpolar提升Penpot協作流暢度

文章目錄

    • 前言
    • 1. 安裝Docker
    • 2. Docker鏡像源添加方法
    • 3. 創建并啟動Penpot容器
    • 3. 本地使用Penpot進行創作
    • 4. 公網遠程訪問本地Penpot
      • 4.1 內網穿透工具安裝
      • 4.2 創建遠程連接公網地址
    • 5. 固定Penpot公網地址

前言

你是否也曾因商業設計軟件的高昂費用而放棄團隊協作?或者,想和異地朋友一起做設計,卻找不到免費好用的協作工具?其實,用 Penpot+cpolar,你不需要花一分錢,也能擁有功能強大的設計協作平臺,讓創意不受距離限制,團隊協作像在同一個房間一樣自然。

Penpot 是一款能讓設計師 “自由創作” 的開源設計工具,它就像你的 “云端設計工作室”,支持 UI/UX 設計、原型制作和團隊協作,功能完全不輸收費軟件,而且文件格式開放,不用擔心格式鎖定。但很多人不知道,配合 cpolar,你可以把這個 “工作室” 變成 “全球創意空間”,不管你和團隊成員在哪里,都能實時共同編輯設計稿,即時反饋修改意見。自由設計師小王用這個方法后,合作范圍大大擴展:“我現在能和國外的設計師一起工作,實時修改設計稿,溝通效率比以前用郵件來回發送文件高太多了!”

為什么這個組合能帶來設計協作革命?打個比方,Penpot 就像一張 “無限大的數字畫布”,所有設計師都能在上面畫畫。cpolar 相當于給這張畫布配了 “全球投影功能”,讓世界各地的人都能看到并添加自己的創意。整個過程不需要你懂任何代碼,注冊賬號即可開始協作 —— 比使用普通設計軟件還簡單!

接下來,我們就來手把手教你如何用 Penpot 進行協同設計,如何通過 cpolar 實現遠程訪問。全程都是圖形界面操作,沒有難懂的技術術語,保證你一看就會,讓設計協作從 “格式障礙” 變成 “創意碰撞”。

6bbf7780b5e9a4ea4135874576ea2b1.png

1. 安裝Docker

本教程操作環境為Linux Ubuntu系統,在開始之前,我們需要先安裝Docker與docker-compose。

在終端中執行下方命令安裝docker:

sudo curl -fsSL https://github.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh| bash -s docker --mirror Aliyun

如果上邊命令中訪問不了Github,可以使用Gitee的鏈接:

sudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh| bash -s docker --mirror Aliyun

然后啟動Docker

sudo systemctl start docker

2. Docker鏡像源添加方法

如因網絡問題拉取不到鏡像,

可嘗試在終端執行 sudo nano /etc/docker/daemon.json

輸入:

{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}

保存退出

然后執行:sudo systemctl restart docker

3. 創建并啟動Penpot容器

成功拉取 Piwigo 鏡像后,我們在Home目錄下的docker路徑新增該項目目錄

mkdir penpot
cd penpot

然后在該項目中創建docker-compose.yml

nano docker-compose.yml

輸入下方代碼并保存退出:

version: "3.8"networks:penpot:volumes:penpot_postgres_v15:penpot_assets:# penpot_traefik:# penpot_minio:services:## Traefik service declaration example. Consider using it if you are going to expose## penpot to the internet or different host than `localhost`.# traefik:#   image: traefik:v2.9#   networks:#     - penpot#   command:#     - "--api.insecure=true"#     - "--entryPoints.web.address=:80"#     - "--providers.docker=true"#     - "--providers.docker.exposedbydefault=false"#     - "--entryPoints.websecure.address=:443"#     - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"#     - "--certificatesresolvers.letsencrypt.acme.email=<EMAIL_ADDRESS>"#     - "--certificatesresolvers.letsencrypt.acme.storage=/traefik/acme.json"#   volumes:#     - "penpot_traefik:/traefik"#     - "/var/run/docker.sock:/var/run/docker.sock"#   ports:#     - "80:80"#     - "443:443"penpot-frontend:image: "penpotapp/frontend:latest"restart: alwaysports:- 9001:80volumes:- penpot_assets:/opt/data/assetsdepends_on:- penpot-backend- penpot-exporternetworks:- penpotlabels:- "traefik.enable=true"## HTTP: example of labels for the case if you are going to expose penpot to the## internet using only HTTP (without HTTPS) with traefik# - "traefik.http.routers.penpot-http.entrypoints=web"# - "traefik.http.routers.penpot-http.rule=Host(`<DOMAIN_NAME>`)"# - "traefik.http.services.penpot-http.loadbalancer.server.port=80"## HTTPS: example of labels for the case if you are going to expose penpot to the## internet using with HTTPS using traefik# - "traefik.http.middlewares.http-redirect.redirectscheme.scheme=https"# - "traefik.http.middlewares.http-redirect.redirectscheme.permanent=true"# - "traefik.http.routers.penpot-http.entrypoints=web"# - "traefik.http.routers.penpot-http.rule=Host(`<DOMAIN_NAME>`)"# - "traefik.http.routers.penpot-http.middlewares=http-redirect"# - "traefik.http.routers.penpot-https.entrypoints=websecure"# - "traefik.http.routers.penpot-https.rule=Host(`<DOMAIN_NAME>`)"# - "traefik.http.services.penpot-https.loadbalancer.server.port=80"# - "traefik.http.routers.penpot-https.tls=true"# - "traefik.http.routers.penpot-https.tls.certresolver=letsencrypt"## Configuration envronment variables for frontend the container. In this case this## container only needs the `PENPOT_FLAGS`. This environment variable is shared with## other services but not all flags are relevant to all services.environment:## Relevant flags for frontend:## - demo-users## - login-with-github## - login-with-gitlab## - login-with-google## - login-with-ldap## - login-with-oidc## - login-with-password## - registration## - webhooks#### You can read more about all available flags on:## https://help.penpot.app/technical-guide/configuration/#advanced-configuration- PENPOT_FLAGS=enable-registration enable-login-with-passwordpenpot-backend:image: "penpotapp/backend:latest"restart: alwaysvolumes:- penpot_assets:/opt/data/assetsdepends_on:- penpot-postgres- penpot-redisnetworks:- penpot## Configuration envronment variables for backend the## container.environment:## Relevant flags for backend:## - demo-users## - email-verification## - log-emails## - log-invitation-tokens## - login-with-github## - login-with-gitlab## - login-with-google## - login-with-ldap## - login-with-oidc## - login-with-password## - registration## - secure-session-cookies## - smtp## - smtp-debug## - telemetry## - webhooks## - prepl-server#### You can read more about all available flags and other## environment variables for the backend here:## https://help.penpot.app/technical-guide/configuration/#advanced-configuration- PENPOT_FLAGS=enable-registration disable-secure-session-cookies## Penpot SECRET KEY. It serves as a master key from which other keys for subsystems## (eg http sessions, or invitations) are derived.#### If you leve it commented, all created sessions and invitations will## become invalid on container restart.#### If you going to uncomment this, we recommend use here a trully randomly generated## 512 bits base64 encoded string.  You can generate one with:#### python3 -c "import secrets; print(secrets.token_urlsafe(64))"# - PENPOT_SECRET_KEY=my-insecure-key## The PREPL host. Mainly used for external programatic access to penpot backend## (example: admin). By default it listen on `localhost` but if you are going to use## the `admin`, you will need to uncomment this and set the host to `0.0.0.0`.# - PENPOT_PREPL_HOST=0.0.0.0## Public URI. If you are going to expose this instance to the internet and use it## under different domain than 'localhost', you will need to adjust it to the final## domain.#### Consider using traefik and set the 'disable-secure-session-cookies' if you are## not going to serve penpot under HTTPS.- PENPOT_PUBLIC_URI=http://localhost:9001## Database connection parameters. Don't touch them unless you are using custom## postgresql connection parameters.- PENPOT_DATABASE_URI=postgresql://penpot-postgres/penpot- PENPOT_DATABASE_USERNAME=penpot- PENPOT_DATABASE_PASSWORD=penpot## Redis is used for the websockets notifications. Don't touch unless the redis## container has different parameters or different name.- PENPOT_REDIS_URI=redis://penpot-redis/0## Default configuration for assets storage: using filesystem based with all files## stored in a docker volume.- PENPOT_ASSETS_STORAGE_BACKEND=assets-fs- PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets## Also can be configured to to use a S3 compatible storage## service like MiniIO. Look below for minio service setup.# - AWS_ACCESS_KEY_ID=<KEY_ID># - AWS_SECRET_ACCESS_KEY=<ACCESS_KEY># - PENPOT_ASSETS_STORAGE_BACKEND=assets-s3# - PENPOT_STORAGE_ASSETS_S3_ENDPOINT=http://penpot-minio:9000# - PENPOT_STORAGE_ASSETS_S3_BUCKET=<BUKET_NAME>## Telemetry. When enabled, a periodical process will send anonymous data about this## instance. Telemetry data will enable us to learn on how the application is used,## based on real scenarios. If you want to help us, please leave it enabled. You can## audit what data we send with the code available on github- PENPOT_TELEMETRY_ENABLED=true## Example SMTP/Email configuration. By default, emails are sent to the mailcatch## service, but for production usage is recommended to setup a real SMTP## provider. Emails are used to confirm user registrations & invitations. Look below## how mailcatch service is configured.- PENPOT_SMTP_DEFAULT_FROM=no-reply@example.com- PENPOT_SMTP_DEFAULT_REPLY_TO=no-reply@example.com- PENPOT_SMTP_HOST=penpot-mailcatch- PENPOT_SMTP_PORT=1025- PENPOT_SMTP_USERNAME=- PENPOT_SMTP_PASSWORD=- PENPOT_SMTP_TLS=false- PENPOT_SMTP_SSL=falsepenpot-exporter:image: "penpotapp/exporter:latest"restart: alwaysnetworks:- penpotenvironment:# Don't touch it; this uses internal docker network to# communicate with the frontend.- PENPOT_PUBLIC_URI=http://penpot-frontend## Redis is used for the websockets notifications.- PENPOT_REDIS_URI=redis://penpot-redis/0penpot-postgres:image: "postgres:15"restart: alwaysstop_signal: SIGINTvolumes:- penpot_postgres_v15:/var/lib/postgresql/datanetworks:- penpotenvironment:- POSTGRES_INITDB_ARGS=--data-checksums- POSTGRES_DB=penpot- POSTGRES_USER=penpot- POSTGRES_PASSWORD=penpotpenpot-redis:image: redis:7restart: alwaysnetworks:- penpot## A mailcatch service, used as temporal SMTP server. You can access via HTTP to the## port 1080 for read all emails the penpot platform has sent. Should be only used as a## temporal solution meanwhile you don't have a real SMTP provider configured.penpot-mailcatch:image: sj26/mailcatcher:latestrestart: alwaysexpose:- '1025'ports:- "1080:1080"networks:- penpot## Example configuration of MiniIO (S3 compatible object storage service); If you don't## have preference, then just use filesystem, this is here just for the completeness.# minio:#   image: "minio/minio:latest"#   command: minio server /mnt/data --console-address ":9001"#   restart: always##   volumes:#     - "penpot_minio:/mnt/data"##   environment:#     - MINIO_ROOT_USER=minioadmin#     - MINIO_ROOT_PASSWORD=minioadmin##   ports:#     - 9000:9000#     - 9001:9001

然后執行下方命令啟動容器運行鏡像:

sudo docker compose up -d

1456cf4ebfe7b8fc9e2da2a3fafa379.png

f0d641d0b74a8cd670fafba5b91466d.png

如需停止可以執行:

sudo docker-compose down

3. 本地使用Penpot進行創作

接下來我們就可以通過任意瀏覽器進行訪問測試,打開一個瀏覽器輸入localhost:9001,可以看到進入到了Penpot的登錄界面,注冊一個用戶名和密碼。

c64e3f393379fcca43711f377e6fbfd.png

選擇使用用途

5e66b1c35d912ba519e478c9cd6a2ba.png

然后進入到設計界面,可以自由創作了!

畫板跟同類設計軟件的畫布功能差不多,并具有固定的邊緣。你可以根據你的需要,選擇一個特定的屏幕或打印用的尺寸。

  1. 創建畫板:點擊工具欄中 “移動” 箭頭正下方的第一個方形圖標。點擊并拖動箭頭來創建一個自定義尺寸的畫板。你也可以在 “設計屬性” 邊欄選擇包攬設備最常用分辨率和標準打印尺寸的預設模板。

  2. 選擇和移動畫板:點擊畫板的名稱或沒有圖層的區域。當邊框變成綠色時,代表著你選擇成功了。一旦選擇了,按住 “Shift” 鍵,然后點擊并拖動畫板來移動它。

  3. 設置畫板為縮略圖:選擇一個畫板并點擊右鍵。在菜單上,選擇 “設置為縮略圖”。選定的畫板將作為文件縮略圖顯示在儀表板的卡片上。

9eda54e873c20803cffaefe016507b4.png

目前我們在本機部署了 Penpot ,如果想團隊協作多人使用,或者在異地其他設備使用的話就需要結合Cpolar內網穿透實現公網訪問,免去了復雜得本地部署過程,只需要一個公網地址直接就可以進入到Penpot中。

接下來教大家如何安裝Cpolar并且將 Penpot 實現公網訪問。

4. 公網遠程訪問本地Penpot

4.1 內網穿透工具安裝

下面是安裝cpolar步驟:

Cpolar官網地址: https://www.cpolar.com

使用一鍵腳本安裝命令

curl https://get.cpolar.sh | sudo sh

image-20240801132238671

安裝完成后,執行下方命令查看cpolar服務狀態:(如圖所示即為正常啟動)

sudo systemctl status cpolar

image.png

Cpolar安裝和成功啟動服務后,在瀏覽器上輸入ubuntu主機IP加9200端口即:【http://localhost:9200】訪問Cpolar管理界面,使用Cpolar官網注冊的賬號登錄,登錄后即可看到cpolar web 配置界面,接下來在web 界面配置即可:

image-20240801133735424

4.2 創建遠程連接公網地址

登錄cpolar web UI管理界面后,點擊左側儀表盤的隧道管理——創建隧道:

  • 隧道名稱:可自定義,本例使用了: Penpot 注意不要與已有的隧道名稱重復

  • 協議:http

  • 本地地址:9001

  • 域名類型:隨機域名

  • 地區:選擇China Top

bc5a79b121d5926248f10b382357fa4.png

創建成功后,打開左側在線隧道列表,可以看到剛剛通過創建隧道生成了兩個公網地址,接下來就可以在其他電腦(異地)上,使用任意一個地址在瀏覽器中訪問即可。

fdbe39c89b79827b0b499bd2c923b36.png

如下圖所示,成功實現使用公網地址異地遠程訪問本地部署的Penpot設計創作平臺!

1ea7631b693ec7e314fa1ddcd463af8.png

小結

為了方便演示,我們在上邊的操作過程中使用了cpolar生成的HTTP公網地址隧道,其公網地址是隨機生成的。

這種隨機地址的優勢在于建立速度快,可以立即使用。然而,它的缺點是網址是隨機生成,這個地址在24小時內會發生隨機變化,更適合于臨時使用。

如果有長期遠程訪問本地 Penpot設計創作平臺或者其他本地部署的服務的需求,但又不想每天重新配置公網地址,還想地址好看又好記,那我推薦大家選擇使用固定的二級子域名方式來遠程訪問。

5. 固定Penpot公網地址

由于以上使用cpolar所創建的隧道使用的是隨機公網地址,24小時內會隨機變化,不利于長期遠程訪問。因此我們可以為其配置二級子域名,該地址為固定地址,不會隨機變化【ps:cpolar.cn已備案】

注意需要將cpolar套餐升級至基礎套餐或以上,且每個套餐對應的帶寬不一樣。【cpolar.cn已備案】

登錄cpolar官網,點擊左側的預留,選擇保留二級子域名,地區選擇china vip top,然后設置一個二級子域名名稱,填寫備注信息,點擊保留。

5980e39452113f042a10fbd5e5f6ee1.png

保留成功后復制保留的二級子域名地址:

f52abab3cd21228f4d4c99e548cf9df.png

登錄cpolar web UI管理界面,點擊左側儀表盤的隧道管理——隧道列表,找到所要配置的隧道,點擊右側的編輯

修改隧道信息,將保留成功的二級子域名配置到隧道中

  • 域名類型:選擇二級子域名

  • Sub Domain:填寫保留成功的二級子域名

  • 地區: China VIP

點擊更新

4d52f1b1c68fa67c476d3c27db7b4a7.png

更新完成后,打開在線隧道列表,此時可以看到隨機的公網地址已經發生變化,地址名稱也變成了保留和固定的二級子域名名稱。

3b01868f42995a40725ed327b70ffcd.png

最后,我們使用固定的公網地址訪問 Penpot 界面可以看到訪問成功,一個永久不會變化的遠程訪問方式即設置好了。

593a0b387964791fbf7c64ad4fafd89.png

接下來就可以隨時隨地進行異地公網來使用Penpot創作平臺了,把固定的公網地址分享給身邊的人,方便團隊協作,同時也大大提高了工作效率!自己用的話,無需云服務器,還可以實現異地其他設備登錄!以上就是如何在本地安裝Penpot的全部過程。

用 cpolar 讓 Penpot 實現遠程設計協作就是這么簡單!三步輕松搞定:在電腦上安裝 Penpot 并創建項目,邀請團隊成員加入,運行 cpolar 生成遠程訪問鏈接。這個方法不僅免費開源,還能擺脫對商業軟件的依賴,設計文件完全自己掌控。不管你是專業設計師還是設計愛好者,都能通過這個組合讓創意自由流動,實現無邊界協作。現在就試試吧,開啟你的全球設計之旅!

本篇文章知識點來源[cpolar官網][https://www.cpolar.com]

  1. cpolar博客:配置二級子域名: https://www.cpolar.com/blog/configure-the-secondary-subdomain-name
  2. cpolar博客:配置自定義域名: https://www.cpolar.com/blog/configure-your-own-domain-name
  3. cpolar博客:配置固定TCP端口地址: https://www.cpolar.com/blog/configure-fixed-tcp-port-address
  4. cpolar博客:配置固定FTP地址: https://www.cpolar.com/blog/configure-fixed-ftp-address

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94575.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DINOv2 vs DINOv3 vs CLIP:自監督視覺模型的演進與可視化對比

近年來&#xff0c;自監督學習在計算機視覺領域取得了巨大進展&#xff0c;推動了無需人工標注即可學習強大視覺表示的視覺基礎模型&#xff08;Vision Foundation Models&#xff09;的發展。其中&#xff0c;DINOv2 和 CLIP 是兩個極具影響力的代表性工作&#xff0c;而最新的…

并發編程——05 并發鎖機制之深入理解synchronized

1 i/i--引起的線程安全問題 1.1 問題思考&#xff1a;兩個線程對初始值為 0 的靜態變量一個做自增&#xff0c;一個做自減&#xff0c;各做 5000 次&#xff0c;結果是 0 嗎&#xff1f; public class SyncDemo {private static int counter 0;public static void increment()…

數字接龍(dfs)(藍橋杯)

非常好的聯系dfs的一道題目&#xff01; 推薦看這位大佬的詳解——>大佬詳細題解 #include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std;const int N 2e5 10,M20; int a[M][M]; bool val[M][M]; i…

[光學原理與應用-318]:職業 - 光學工程師的技能要求

光學工程師需具備扎實的專業知識、熟練的軟件操作能力、豐富的實踐經驗、良好的溝通協作與項目管理能力&#xff0c;以及持續學習和創新能力&#xff0c;以下是具體技能要求&#xff1a;一、專業知識與理論基礎光學基礎知識&#xff1a;熟悉光學原理、光學材料、光學儀器等基礎…

萬字詳解架構設計:業務架構、應用架構、數據架構、技術架構、單體、分布式、微服務都是什么?

01 架構要素結構連接在軟件行業&#xff0c;對于什么是架構一直有很多的爭論&#xff0c;每個人都有自己的理解。不同的書籍上、不同的作者&#xff0c;對于架構的定義也不統一&#xff0c;角度不同&#xff0c;定義不同。此君說的架構和彼君理解的架構未必是一回事。因此我們在…

使用Docker搭建StackEdit在線MarkDown編輯器

1、安裝Docker# 安裝Docker https://docs.docker.com/get-docker/# 安裝Docker Compose https://docs.docker.com/compose/install/# CentOS安裝Docker https://mp.weixin.qq.com/s/nHNPbCmdQs3E5x1QBP-ueA2、安裝StackEdit2.1、方式1詳見&#xff1a; https://benweet.github.…

【C++詳解】用哈希表封裝實現myunordered_map和 myunordered_set

文章目錄一、框架分析二、封裝框架&#xff0c;解決KeyOfT三、?持iterator的實現四、const迭代器五、實現key不支持修改六、operator[ ]七、一些補充(reserve和rehash)八、源碼一、框架分析 SGI-STL30版本源代碼中沒有unordered_map和unordered_set&#xff0c;SGI-STL30版本是…

【 MYSQL | 基礎篇 四大SQL語句 】

摘要&#xff1a;本文先介紹數據庫 SQL 的核心概念&#xff0c;接著闡述 SQL 通用語法與 DDL、DML、DQL、DCL 四大分類&#xff0c;隨后詳細講解各類語句操作&#xff0c;包括 DDL 的數據庫與表操作及數據類型&#xff0c;DML 的數據增刪改&#xff0c;DQL 的查詢語法與功能&am…

Transformer 模型在自動語音識別(ASR)中的應用

文章目錄自動語音識別&#xff08;ASR&#xff09;簡介簡要介紹TransformerTransformer 在 ASR 中的應用基于“語音識別模型整體框架圖”的模塊介紹1. 音頻采集模塊&#xff08;Audio Acquisition Module&#xff09;2. 音頻預處理模塊&#xff08;Audio Preprocessing Module&…

集成電路學習:什么是SSD單發多框檢測器

SSD:單發多框檢測器 SSD(Single Shot MultiBox Detector)是一種高效的目標檢測算法,它通過單一網絡實現對象檢測,具有快速且準確的特點。以下是關于SSD的詳細解析: 一、SSD的技術特點 1、單一網絡檢測: SSD通過單一的前向傳播過程預測不同尺度的邊界框和類別概率…

【車載開發系列】汽車零部件DV與PV試驗的差異

【車載開發系列】汽車零部件DV與PV試驗的差異 【車載開發系列】汽車零部件DV與PV試驗的差異【車載開發系列】汽車零部件DV與PV試驗的差異一. 概念說明二. DV測試&#xff08;Design Verification 設計驗證測試&#xff09;三. PV測試&#xff08;Performance Verification 性能…

如何在阿里云百煉中使用釘釘MCP

本文通過阿里云百煉釘釘MCP配合&#xff0c;完成釘釘AI表格&#xff08;多維表&#xff09;數據管理 &#xff0c;其他AI開發工具可參照本文完成部署。 準備工作 在正式開始前&#xff0c;需要提前了解什么是釘釘MCP&#xff0c;詳情請參考釘釘服務端API MCP 概述。已經注冊了…

【lucene】SpanNearQuery中的slop

在`SpanNearQuery`中,`slop`的定義比你描述的稍微復雜一些。以下是一些更準確的解釋和分析: 1. `slop`的定義 `SpanNearQuery`的`slop`參數指的是兩個`SpanTermQuery`(或更一般的`SpanQuery`子句)之間允許的最大“不匹配位置”的數量。具體來說: - 不匹配位置:指的是第…

sqli-labs通關筆記-第64關 GET數值型SQL盲注(雙括號閉合 130次探測機會)

目錄 一、代碼審計 1、源碼分析 2、SQL注入風險分析 &#xff08;1&#xff09;聯合SQL注入方法&#xff08;不可行&#xff09; &#xff08;2&#xff09;報錯SQL注入方法&#xff08;不可行&#xff09; &#xff08;3&#xff09;總結 二、滲透實戰 1、滲透準備 2…

每日一題——力扣498 對角線遍歷

力扣498 對角線遍歷 問題分析給定一個 m x n 矩陣&#xff0c;我們需要按照對角線順序遍歷所有元素。對角線遍歷的特點是&#xff1a; 每條對角線上元素的行索引與列索引之和為常數遍歷方向交替變化&#xff1a;奇數對角線&#xff08;從右上到左下&#xff09;&#xff0c;偶數…

【單例模式】

概述一個類不管創建多少次對象&#xff0c;永遠只能得到該類型的一個對象的實例。常用到的比如日志模塊 &#xff0c;數據庫模塊餓漢&#xff1a;在類加載時就創建單例對象&#xff0c;因此它是線程安全的&#xff0c;因為對象的創建在程序啟動時就已經完成&#xff0c;不存在多…

Unity開發如何實現換裝技術

一、3D換裝方案SkinnedMeshRenderer組件替換&#xff08;最常用&#xff09;適用場景&#xff1a;角色需要保持骨骼動畫&#xff0c;更換服裝/武器等實現步驟&#xff1a;1.準備模型&#xff1a;所有服裝需使用相同骨骼結構&#xff08;建議在建模軟件中綁定到同一套骨骼&#…

RabbitMQ面試精講 Day 29:版本升級與平滑遷移

【RabbitMQ面試精講 Day 29】版本升級與平滑遷移 在“RabbitMQ面試精講”系列的第29天&#xff0c;我們聚焦于一個在中高級系統架構與運維面試中極具分量的話題——RabbitMQ的版本升級與平滑遷移。隨著業務發展和RabbitMQ自身功能演進&#xff08;如從經典集群到Quorum隊列、從…

Python-機器學習概述

??一、人工智能三大概念?? ??人工智能&#xff08;AI&#xff09;?? 定義&#xff1a;使用計算機模擬或代替人類智能的研究領域 目標&#xff1a;像人類一樣思考&#xff08;理性推理&#xff09;、行動&#xff08;決策執行&#xff09; 別名&#xff1a;仿智 ??…

GIT壓縮提交,將多個已經push的commit提交,合并成一個

1.選中要合并的提交2.選中后右鍵選著Squash Committs3.重新編輯提交信息4.操作完成后不能pull,要強制pushgit push --force