Suno Api V4模型无水印开发「综合实战开发自己的音乐网站」 —— 「Suno Api系列」第14篇
历史文章
Suno AI API接入 - 将AI音乐接入到自己的产品中,支持120并发任务
Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇
Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇
Suno Api V4模型无水印开发「AI生成歌词」 —— 「Suno Api系列」第3篇
Suno Api V4模型无水印开发「续写」 —— 「Suno Api系列」第4篇
Suno Api V4模型无水印开发「获取整首歌」 —— 「Suno Api系列」第5篇
Suno Api V4模型无水印开发「高清音频WAV下载」 —— 「Suno Api系列」第6篇
Suno Api V4模型无水印开发「人声伴奏分离」 —— 「Suno Api系列」第7篇
Suno Api V4模型无水印开发「人声伴奏分离 – 自定义音频」 —— 「Suno Api系列」第8篇
Suno Api V4模型无水印开发「人声伴奏分离 – 网络地址」 —— 「Suno Api系列」第9篇
Suno Api V4模型无水印开发「视频封面编辑」 —— 「Suno Api系列」第10篇
Suno Api V4模型无水印开发「上传参考音频 - 方式一:通过二进制流的方式」 —— 「Suno Api系列」第11篇
Suno Api V4模型无水印开发「上传参考音频 - 方式二:通过URL的方式」 —— 「Suno Api系列」第12篇
Suno Api V4模型无水印开发「分页获取音乐列表」 —— 「Suno Api系列」第13篇
导读
讲了这么多节的Suno API接口,最后还是来实现一下做一个简单的音乐网站。
具体的一个基本效果如下:
一、准备工作
在动手之前,我们需要确保已经准备好了必要的环境和工具:
Vue和Node.js环境:确保你的开发环境中已经配置好了Vue和Node.js,这将是我们构建前端和后端的基础。
文本编辑器或IDE:选择你熟悉和喜欢的文本编辑器,如VS Code、Sublime Text等。
Suno AI音乐API密钥:这是我们生成音乐所需的关键。
申请和使用
「已经有API的,可以跳过此步骤」
要使用Suno AI API,首先可以先登录到站点:
https://suno4.cn/#/?i=8NCBS8_WXTT
点击头像昵称旁边的… ,点击API接入
然后获取请求所需要的凭证:
如果你尚未登录或注册,会自动跳转到登录页面邀请您来注册和登录,登录注册之后会自动返回当前页面。
接口文档
接口文档地址:
https://doc.apipost.net/docs/3769af043c83000?locale=zh-cn
好了,现在,我们获得了Suno API,下面就可以来快速的搭建AI音乐生成平台了。
二、搭建前端和后端
1. 创建Vue项目
为了更清晰地组织前端和后端代码,我们将项目目录结构分为两个主要部分:frontend和backend。以下是具体的目录结构和说明:
suno-music-site/
│
├── backend/
│ ├── node_modules/
│ ├── package.json
│ ├── package-lock.json
│ └── server.js
│
├── frontend/
│ ├── node_modules/
│ ├── public/
│ ├── src/
│ │ ├── assets/
│ │ ├── components/
│ │ ├── App.vue
│ │ ├── main.js
│ ├── package.json
│ ├── package-lock.json
│ └── vue.config.js
│
└── README.md
创建一个 suno-music-site 目录。
2. 创建后端
创建后端目录和文件,在项目根目录下创建 backend 目录,并进入该目录:
mkdir backend
cd backend
初始化Node.js项目
在backend目录下初始化Node.js项目:
npm init -y
安装Express和其他依赖
安装Express和所需的依赖包:
npm install express body-parser node-fetch
创建server.js
在backend目录下创建server.js文件,并添加以下代码:
const express = require('express');
const bodyParser = require('body-parser');
const fetch = require('node-fetch').default; // 使用CommonJS版本的node-fetch
const cors = require('cors'); // 引入cors中间件
const app = express();
const PORT = 3000;
app.use(cors()); // 使用cors中间件
app.use(bodyParser.json());
app.post('/generate-music', async (req, res) => {
const { prompt } = req.body;
const options = {
method: "post",
headers: {
"accept": "application/json",
"authorization": "Bearer xxxxxxxxxxx",
"content-type": "application/json"
},
body: JSON.stringify({
"prompt": prompt
})
};
try {
const response = await fetch("https://xxx.xxx.xxx/_open/suno/music/generate", options);
const data = await response.json();
res.json(data);
} catch (error) {
console.error(error);
res.status(500).json({ error: 'An error occurred' });
}
});
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
3. 创建前端
回到项目根目录,创建frontend目录,并进入该目录:
cd ..
mkdir frontend
cd frontend
创建Vue项目
使用Vue CLI创建Vue项目:
vue create .
选择默认配置或根据你的需要进行配置。
编写前端代码
我们创建一个简单的界面来接收用户输入并显示生成的音乐。
在frontend/src目录下,修改App.vue文件,添加以下代码:
<template>
<div id="app">
<header>
<h1>AI Music Generator</h1>
</header>
<main>
<div class="input-container">
<input type="text" v-model="musicTitle" placeholder="Enter a prompt for the music">
<button @click="handleGenerateMusic" :disabled="loading">生成音乐</button>
</div>
<div v-if="loading" class="loading">
Music is being generated for you, please wait...
</div>
<div v-if="musicGenerated" class="music-container">
<div v-for="music in generatedMusic" :key="music.id" class="music-item">
<h2>{{ music.title }}</h2>
<img :src="music.image_url" alt="Music Image">
<p class="lyric">{{ music.lyric }}</p>
<audio controls class="audio" @play="stopOtherMedia($event)">
<source :src="music.audio_url" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
<video controls class="video" @play="stopOtherMedia($event)">
<source :src="music.video_url" type="video/mp4">
Your browser does not support the video element.
</video>
</div>
</div>
<div v-if="showModal" class="modal">
<div class="modal-content">
<p>{{ modalMessage }}</p>
</div>
</div>
</main>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
musicTitle: '',
musicGenerated: false,
generatedMusic: [],
loading: false,
currentPlayingMedia: null,
showModal: false,
modalMessage: ''
};
},
mounted() {
document.title = "XiaoZhi AI Music Generator";
},
methods: {
handleGenerateMusic() {
if (!this.musicTitle) {
this.showModalMessage('请输入生成音乐的提示语');
return;
}
this.generateMusic();
},
generateMusic() {
this.loading = true;
this.musicGenerated = false;
axios.post('http://localhost:3000/generate-music', { prompt: this.musicTitle })
.then(response => {
this.loading = false;
this.musicGenerated = true;
this.generatedMusic = response.data.data;
})
.catch(error => {
this.loading = false;
console.error('Error generating music:', error);
});
},
stopOtherMedia(event) {
if (this.currentPlayingMedia && this.currentPlayingMedia !== event.target) {
this.currentPlayingMedia.pause();
this.currentPlayingMedia.currentTime = 0;
}
this.currentPlayingMedia = event.target;
},
showModalMessage(message) {
this.modalMessage = message;
this.showModal = true;
setTimeout(() => {
this.showModal = false;
}, 2000);
}
}
}
</script>
<style scoped>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
header {
background-color: #42b983;
padding: 20px;
color: white;
}
main {
margin: 20px;
max-width: 80%;
margin: 20px auto;
}
.input-container {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
margin-bottom: 20px;
}
input[type="text"] {
padding: 7px;
margin-right: 10px;
font-size: 1em;
flex: 1;
max-width: 600px;
}
button {
padding: 8px 20px;
background-color: #007bff;
color: #fff;
border: none;
cursor: pointer;
font-size: 1em;
border-radius: 4px;
}
button:disabled {
background-color: #d3d3d3;
cursor: not-allowed;
}
button:hover:not(:disabled) {
background-color: #0056b3;
}
.loading {
font-size: 1.2em;
color: #42b983;
margin-top: 20px;
}
.music-container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.music-item {
flex: 1;
min-width: 300px;
max-width: 45%;
margin-top: 20px;
padding: 20px;
border: 1px solid #ddd;
border-radius: 8px;
background-color: #f9f9f9;
text-align: left;
}
.lyric {
font-size: 1.2em;
margin: 10px 0;
white-space: pre-line;
}
.audio {
width: 100%;
margin-top: 10px;
}
.video {
width: 100%;
height: auto;
margin-top: 10px;
}
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
background-color: rgba(0, 0, 0, 0.5);
}
.modal-content {
background-color: white;
padding: 20px;
border-radius: 5px;
text-align: center;
font-size: 1.2em;
}
@media (max-width: 600px) {
.input-container {
flex-direction: column;
}
input[type="text"] {
margin-right: 0;
margin-bottom: 10px;
max-width: 100%;
}
.music-item {
max-width: 100%;
}
}
@media (min-width: 601px) {
.video {
width: 100%;
margin: 10px auto;
}
}
</style>
4. 解决跨域问题
在你的项目运行中,可能会出现跨域请求的问题,我们需要解决它。
你可以在现有的 vue.config.js 文件中添加开发服务器代理配置,以解决跨域问题。以下是修改后的 vue.config.js 文件内容:
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
devServer: {
proxy: {
'/generate-music': {
target: 'http://localhost:3000',
changeOrigin: true
}
}
}
})
这样配置后,当前端发起请求到/generate-music时,代理服务器会将请求转发到运行在 http://localhost:3000 的后端服务,从而解决跨域问题。
如果还无法解决的话,你可能还需要处理一下。由于浏览器安全策略的限制,前端和后端运行在不同的域(例如,localhost 和 192.168.0.235)时,浏览器会阻止跨域请求。我们需要在后端服务器中设置适当的CORS头信息来允许跨域请求。
你可以使用 cors 中间件来解决这个问题。
安装 cors 包:
npm install cors
在 server.js 文件中引入并使用 cors 中间件:
这样,后端服务器将允许来自所有来源的请求。如果你想限制特定来源的请求,可以这样配置 cors 中间件:
app.use(cors({
origin: 'http://192.168.20.235:8081' // 允许的前端URL
}));
这样应该能解决CORS问题,并允许前端正常调用后端API。
如果Node.js 无法直接使用 ES 模块(ES Module)加载 node-fetch,因 node-fetch 是一个 ES 模块。解决这个问题的一种方法是将 node-fetch 替换为一个可以在 CommonJS 环境中使用的版本。
你可以安装 node-fetch 的 CommonJS 版本,并修改 server.js 文件中的引入方式。
首先,删除项目中已安装的 node-fetch:
npm uninstall node-fetch
安装 node-fetch 的 CommonJS 版本:
npm install node-fetch@2
在 server.js 文件中,将引入方式修改为动态引入(dynamic import),上面的代码已经修改好了。
三. 运行项目
启动后端服务
在backend目录下,启动后端服务:
node server.js
启动前端服务
在frontend目录下,启动前端服务:
npm run serve
打开浏览器,访问http://localhost:8080(Vue CLI默认端口),你将看到一个简单的界面,输入一个提示词并点击“Generate Music”按钮,即可生成音乐。
默认会生成两首音乐,有 MP3 和 MP4 视频,点击即可播放 AI 生成的音乐。
历史文章
Suno AI API接入 - 将AI音乐接入到自己的产品中,支持120并发任务
Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇
Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇
Suno Api V4模型无水印开发「AI生成歌词」 —— 「Suno Api系列」第3篇
Suno Api V4模型无水印开发「续写」 —— 「Suno Api系列」第4篇
Suno Api V4模型无水印开发「获取整首歌」 —— 「Suno Api系列」第5篇
Suno Api V4模型无水印开发「高清音频WAV下载」 —— 「Suno Api系列」第6篇
Suno Api V4模型无水印开发「人声伴奏分离」 —— 「Suno Api系列」第7篇
Suno Api V4模型无水印开发「人声伴奏分离 – 自定义音频」 —— 「Suno Api系列」第8篇
Suno Api V4模型无水印开发「人声伴奏分离 – 网络地址」 —— 「Suno Api系列」第9篇
Suno Api V4模型无水印开发「视频封面编辑」 —— 「Suno Api系列」第10篇
Suno Api V4模型无水印开发「上传参考音频 - 方式一:通过二进制流的方式」 —— 「Suno Api系列」第11篇
Suno Api V4模型无水印开发「上传参考音频 - 方式二:通过URL的方式」 —— 「Suno Api系列」第12篇
Suno Api V4模型无水印开发「分页获取音乐列表」 —— 「Suno Api系列」第13篇
相关文章:
Suno Api V4模型无水印开发「综合实战开发自己的音乐网站」 —— 「Suno Api系列」第14篇
历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中,支持120并发任务 Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇 Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇 Suno Api V4模型无水印开发「AI生成歌词」…...
【0376】Postgres内核 分配 last safe MultiXactId
上一篇: 【0375】Postgres内核 XLOG 之 设置下一个待分配 MultiXactId 和 offset 文章目录 1. 最后一个安全的 MultiXactId1.1 计算 multi wrap limit1.2 计算 multi stop limit1.3 计算 multi warn limit1.4 计算 multi vacuum limit2. 初始化 MultiXactState 成员3. 完成 mu…...
大模型时代的NL2SQL初探
大模型时代的NL2SQL初探 NL2SQL的基本概念NL2SQL的实现逻辑现代NL2SQL框架与技术大语言模型(LLM)在NL2SQL中的应用向量数据库的作用NL2SQL的应用场景未来展望 在当今信息化时代,数据库已成为各行各业的数据存储核心。然而,直接使用…...
Linux环境下使用tomcat+nginx部署若依项目
Linux Tomcat MySQL Java 是构建动态网站系统的完美解决方案之一,具有免费、高 效、扩展性强且资源消耗低等优良特性。 Java Web 凭借其优秀的开发框架和良好的生态被广 泛应用于社会各行业的信息化系统构建。 本实验以若依管理系统( http://ruo…...
京准电钟解读,NTP网络授时服务器如何提升DCS系统效率
京准电钟解读,NTP网络授时服务器如何提升DCS系统效率 京准电钟解读,NTP网络授时服务器如何提升DCS系统效率 NTP 网络授时服务器为防火墙内的网络设备、终端、服务器提供准确、可靠和安全的高精度卫星时间参考,可为它支持数万台支持标准的网…...
06 - Django 视图view
HttpRequest 和 HttpResponse Django中的视图主要用来接受Web请求,并做出响应。 视图的本质就是一个Python中的函数 视图的响应分为两大类 以Json数据形式返回(JsonResponse)以网页的形式返回 重定向到另一个网页 (HttpResponseRedirect)错误视图(4XX,5XX) (Htt…...
MySQL数据库(锁)
1、MySQL有哪些锁? 全局锁:flush tables with read lock 执行以下语句之后,使用全局锁,整个数据库就处于只读状态了,这时其他线程执行对数据的增删改或者对表结构的更改操作操作,都会被阻塞。 全局锁的应…...
Mac Android studio 升级LadyBug 版本,所产生的bug
当Build 出现,这样的文字以后: Your build is currently configured to use incompatible Java 21.0.3 and Gradle 7.3.3. Cannot sync the project. We recommend upgrading to Gradle version 8.9. The minimum compatible Gradle version is 8.5. …...
springboot/ssm社区助老志愿者服务平台Java代码编写web志愿捐赠活动项目
springboot/ssm社区助老志愿者服务平台Java代码编写web志愿捐赠活动项目 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库&am…...
基于Java+Jsp Servlet Mysql实现的Java Web在线商城项目系统设计与实现
一、前言介绍: 1.1 项目摘要 随着互联网技术的飞速发展,电子商务已成为现代商业活动的重要组成部分。在线商城作为电子商务的一种重要形式,以其便捷性、高效性和广泛覆盖性,受到了越来越多消费者的青睐。同时,随着消…...
安装K8s集群
文章首发于我的博客 :https://blog.liuzijian.com/post/9aa6d426-a01c-05b0-6f7a-5da4343f0f9e.html 因阿里云加速服务调整,镜像加速服务自2024年7月起不再支持,拉取镜像,下载网络插件等操作,需要科学上网访问DockerHu…...
【数据科学导论】第一二章·大数据与数据表示与存储
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀数据处理与分析_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言…...
LabVIEW数字式气压计自动检定系统
开发了一个基于LabVIEW开发的数字式气压计自动检定系统。在自动化检定PTB220和PTB210系列数字气压计,通过优化硬件组成和软件设计,实现高效率和高准确度的检定工作,有效降低人力成本并提升操作准确性。 项目背景 随着自动气象站的广泛部署&a…...
按行分割文本函数(C++)
文本分割函数SplitText2Line解析 以下是对SplitText2Line函数的详细介绍: void SplitText2Line(s8* strText, std::vector<std::string>& vecStrLines) {// 1. 清空存储结果的向量vecStrLines.clear();// 2. 打印原始文本信息(用于调试目的&…...
要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量
文章目录 1、we_chat_subscribe2、we_chat_union_id 1、we_chat_subscribe 要查询 user 表中 we_chat_subscribe 列不为空的用户数量,你可以使用以下 SQL 查询语句: SELECT COUNT(*) FROM user WHERE we_chat_subscribe IS NOT NULL;解释: …...
【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 1、输入数值 2、选择结构语句 3、计算结果并输出 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务:编写一个程序,该程序需输入个人数据,进而预测其成年后的身高。 相关知识 为了完成本…...
使用Excel制作通达信自定义外部数据,安排!!!
Excel相信大家电脑上都有这个工具,相比敲编程代码,用这个去做自定义数据对大多数人,应该是比较友好的。自定义数据分为外部序列数据,看了一下内容理解起来比较多,分两期给大家介绍。为了照顾电脑基础薄弱的朋友&#x…...
阿里云镜像服务使用指南
阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)是面向容器镜像、Helm Chart等符合OCI标准云原生制品安全托管及高效分发平台。ACR企业版支持全球同步加速、大规模和大镜像分发加速、多代码源构建加速等全链路加速能力,与容器服务A…...
adb无法连接到安卓设备【解决方案】报错:adb server version (40) doesn‘t match this client (41);
下载老版本Platformtoolshttps://dl.google.com/android/repository/platform-tools_r28.0.2-windows.zip?hlzh-cn 替换原来的platform-tools文件夹即可。 问题原因分析:电脑端adb client版本(41)和安卓端adb …...
WPF TextBox 输入限制 详解
总目录 前言 通常对于WPF输入框 输入的控制无非以下方式 1 直接禁止输入(包括粘贴) 不符合要求的字符 如只可输入数字的输入框,当你输入字母的时候是无法输入的 2 输入后,校验内容是否符合要求,然后提示错误,禁止提交信息 如只可…...
安装Visual studio2022后,没法新建.net 4.5.2的项目
在Visual Studio 2022中无法新建.NET Framework 4.5.2的项目,通常是因为Visual Studio 2022默认不再支持较旧的.NET Framework版本,如4.5或4.5.2。不过,你可以通过一些手动步骤来使Visual Studio 2022支持.NET Framework 4.5.2项目。以下是一…...
【读书笔记】《论语别裁》孝道是这样一个东西
一、内容摘要 本章通过比较人类与其他动物的生存方式,探讨了孝道和人文文化的重要性。作者提到,在自然界中,所有生物都在为自身生存而努力,动物之间的亲子关系如母鸡保护小鸡体现了母性的重要性。虽然人类在外表上与动物无异&…...
【magic-dash】01:magic-dash创建单页面应用及二次开发
文章目录 一、magic-dash是什么1.1 安装1.2 使用1.2.1 查看内置项目模板1.2.2 生成指定项目模板1.2.3 查看当前magic-dash版本1.2.4 查看命令说明1.2.5 内置模板列表二、创建虚拟环境并安装magic-dash三、magic-dash单页工具应用开发3.1 创建单页面项目3.1.1 使用命令行创建单页…...
Python编程构建动态的圣诞画面
Python编程构建动态的圣诞画面 引言 今天是圣诞节,空气中弥漫着节日的气息。让我们利用Python编程技能,为我们的屏幕带来一丝节日的温暖。本文将引导你通过Python代码创建一个动态的圣诞场景,包括闪烁的圣诞树和房屋画面,所有这…...
2025年创业投资前瞻:AI、可持续发展与基础设施建设的深度整合
随着科技的进步和社会需求的变化,2025年的创业环境将更加复杂且充满机遇。本篇文章旨在为寻求在这一关键时期启动或扩展业务的企业家提供一份详尽的投资指南,聚焦于人工智能(AI)、可持续发展和基础设施建设三大核心领域。 1. 智能政府与公民服务 自动化行政流程:通过引入…...
vulnhub靶场-matrix-breakout-2-morpheus攻略(截止至获取shell)
扫描出ip为192.168.121.161 访问该ip,发现只是一个静态页面什么也没有 使用dir dirsearch 御剑都只能扫描到/robots.txt /server-status 两个页面,前者提示我们什么也没有,后面两个没有权限访问 扫描端口,存在81端口 访问&#x…...
C++软件设计模式之类型模式和对象型模式
在 C 软件设计模式中,通常将设计模式分为两大类:类型模式(Type Patterns)和对象型模式(Object Patterns)。这两种模式在实现和应用上有不同的特点和目的。 类型模式(Type Patterns)…...
Oracle、ACCSEE与TDMS的区别
Oracle、ACCSEE和TDMS都是不同类型的数据管理和存储工具,它们各自有独特的用途、结构和复杂性。Oracle是一个功能强大的关系型数据库管理系统,适用于大规模企业级应用,支持复杂查询和事务管理。ACCSEE主要应用于实时数据采集和过程监控&#…...
视频监控平台:Liveweb视频汇聚融合平台智慧安防视频监控应用方案
Liveweb是一款功能强大、灵活部署的安防视频监控平台,支持多种主流标准协议,包括GB28181、RTSP/Onvif、RTMP等,同时兼容海康Ehome、海大宇等厂家的私有协议和SDK接入。该平台不仅提供传统安防监控功能,还支持接入AI智能分析&#…...
【ES6复习笔记】箭头函数(5)
简介 本教程将介绍如何在 JavaScript 中使用箭头函数,包括箭头函数的基本语法、特点以及在实际开发中的应用。通过本教程,你将学会如何使用箭头函数来简化代码,提高代码的可读性和简洁性。 箭头函数的基本语法 箭头函数是 ES6 引入的一种新…...
数字IC前端学习笔记:脉动阵列的设计方法学(四)
相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 引言 脉动结构(也称为脉动阵列)表示一种有节奏地计算并通过系统传输数据的处理单元(PEs)网络。这些处理单元有规律地泵入泵出数据以保持规则…...
基于web的音乐网站(Java+SpringBoot+Mysql)
目录 1系统概述 1.1 研究背景 1.2研究目的 1.3系统设计思想 2相关技术 2.1?MYSQL数据库 2.2?B/S结构 2.3?Spring Boot框架简介 3系统分析 3.1可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2系统性能分析 3.2.1 系统安全性 3.2.2 数据完整…...
从 GitLab.com 到 JihuLab.com 的迁移指南
本文分享从 GitLab.com 到 JihuLab.com 的迁移指南。 近期,GitLab Inc. 针对其 SaaS 产品做了限制,如果被判定为国内用户,则会建议使用其在国内的发布版本极狐GitLab。从 GitLab SaaS 产品(GitLab.com)迁移到极狐GitL…...
纯真社区版IP库CZDB数据格式使用教程
1. 概述 纯真社区版IP库是一种免费且公开的IP地理位置数据库,主要面向非商业用途。其最新推出的CZDB格式是一种全新的数据文件格式,自2024年10月起将成为官方维护和更新的唯一版本。该格式支持同时存储IPv4和IPv6地址信息,具备以下优点&…...
go window安装protoc protoc生成protobuf文件
1. 下载: Releases protocolbuffers/protobuf GitHub 2. 解压缩: 3. 配置环境变量: 选择系统变量->Path -> 新增 解压缩后的bin路径 4. 打印版本: protoc --version 5. 安装protoc-gen-go cmd 下输入安装命令࿰…...
ChildLife“童年时光杯”足球联赛启动 共促青少年健康成长
2024年12月21日至22日,由美国知名婴幼儿营养品牌ChildLife童年时光赞助的“童年时光杯”青少年足球联赛将在上海拉开帷幕。本次赛事U7/U8组别共有16支足球队参赛,包括上海幸运星足球俱乐部旗下的明星球队,以及其他青少年俱乐部的优秀队伍&…...
Erlang语言的数据结构
题目:Erlang数据结构:构建高效并发世界的基石 一、引言 在编程世界中,数据结构是组织和管理数据的关键工具,它不仅影响着程序的效率,还直接关系到代码的可读性和可维护性。Erlang,这门为高并发、容错性设…...
宏定义介绍
假设我们有以下代码: LOG_INFO("rkipc_ini_path_ is %s, rkipc_iq_file_path_ is %s, rkipc_log_level is %d\n",rkipc_ini_path_, rkipc_iq_file_path_, rkipc_log_level);1. LOG_INFO 宏定义 根据之前的 LOG_INFO 宏定义: #define LOG_IN…...
攻防世界 - Web - Level 1 unseping
关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客 0x01:Write UP 本关是一个 PHP 代码审计关卡,考察的是 PHP 反序列化漏洞以及命令执行的一些绕过手段,下面笔者将带你一步步过关。…...
【ES6复习笔记】ES6的模块化(18)
模块化的概念 模块化是指将一个复杂的系统分解为多个模块,每个模块完成一个特定的功能,模块之间通过接口进行通信。模块化的目的是提高代码的可读性、可维护性和可重用性。 模块化规范产品, ES6 之前的模块化规范有: CommonJS …...
[项目][boost搜索引擎#4] cpp-httplib使用 log.hpp 前端 测试及总结
目录 编写http_server模块 1. 引入cpp-httplib到项目中 2. cpp-httplib的使用介绍 3. 正式编写http_server 九、添加日志到项目中 十、编写前端模块 十一. 详解传 gitee 十二、项目总结 项目的扩展 写在前面 [项目详解][boost搜索引擎#1] 概述 | 去标签 | 数据清洗 |…...
vue3入门教程:计算属性
计算属性的基本用法 计算属性是通过computed函数创建的,它接受一个getter函数作为参数,并返回一个只读的响应式ref对象。该ref对象通过.value属性暴露getter函数的返回值。 <template><div><p>原始数据: {{ count }}</p><p…...
Linux大数据方向shell
一、概述 shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核,还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。 二、shell入门 1.输出hello world touch helloworld.sh&…...
深度学习blog-卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Network,CNN)是一种广泛应用于计算机视觉领域,如图像分类、目标检测和图像分割等任务中的深度学习模型。 1. 结构 卷积神经网络一般由以下几个主要层组成: 输入层:接收…...
Unity3D如何优化物理模拟?
在Unity3D中优化物理模拟可以显著提高游戏的性能和稳定性。以下是一些常见的优化策略: 1. 调整物理引擎设置 物理时间步长(Physics Time Step):这是物理引擎每次更新的时间间隔。较小的值可以提高物理模拟的精度,但会…...
C项目 天天酷跑(下篇)
上篇再博客里面有,接下来我们实现我们剩下要实现的功能 文章目录 碰撞检测 血条的实现 积分计数器 前言 我们现在要继续优化我们的程序才可以使这个程序更加的全面 碰撞的检测 定义全局变量 实现全局变量 void checkHit() {for (int i 0; i < OBSTACLE_C…...
认识Python语言
Python背景介绍 Python的作者是荷兰人 Guido van Rossum(龟叔)Python正是诞生于1991年Python目前有两个版本,Python2和Python3 代码不完全兼容源文件.py文件名后缀Python的解释如今有多个语言实现,我们常用的是Cpython或者IPytho…...
Python——day09
os模块 sys模块 time模块 logging模块...
机器视觉检测相机基础知识 | 颜色 | 光源 | 镜头 | 分辨率 / 精度 / 公差
注:本文为 “keyence 视觉沙龙中机器视觉检测基础知识” 文章合辑。 机器视觉检测基础知识(一)颜色篇 视觉检测硬件构成的基本部分包括:处理器、相机、镜头、光源。 其中,和光源相关的最重要的两个参数就是光源颜色和…...
在 CentOS 系统上安装 ClickHouse
在 CentOS 系统上安装 ClickHouse 数据库相对简单,可以通过官方提供的安装包来进行。以下是详细的安装步骤。 1. 更新系统 首先,确保你的系统是最新的,更新软件包和系统库: sudo yum update -y2. 安装依赖库 ClickHouse 需要一…...