- 博客(93)
- 资源 (10)
- 收藏
- 关注
原创 Navidrome0.55+版本更新了什么?
前文介绍的 使用 Music Tag Web 的可以和 navidrome 完美的结合进行音乐刮削,在最近 navidrome 进行了大版本的更新,让我们来看看更新了什么呢?
2025-03-21 11:29:48
395
原创 【实测可用】告别音乐会员!教你搭建私人 0 流量音乐库(附工具指南)
资源受限性- 会员专属内容限制、广告干扰、算法推荐固化版权脆弱性- 音源下架风险、平台匹配功能失效体验割裂性- 跨设备播放障碍、本地音乐管理缺失搭建私人音乐库可实现的三大核心优势:✅完全资源自主规避平台版权限制,永久保存珍贵音源✅无缝跨端体验支持局域网/外网多设备访问,播放记录云端同步✅智能媒体管理自定义元数据(封面/歌词/标签)、创建个性化歌单体系。
2025-03-10 21:45:02
392
原创 Music Tag Web v1 对比 v2 有什么区别,值不值得买?
前面文章中介绍的部署和安装本文将重点解析 V1 免费版与 V2 专业版的核心差异。
2025-02-23 22:00:21
1343
原创 轻松搞定!小爱音箱无缝播放NAS音乐全攻略
在之前文章中已经教过你怎么管理和刮削你的音乐库本文章将描述你怎么通过使用智能音箱小爱同学进行播放本地音乐在当今这个信息爆炸的时代,智能设备已经成为我们生活中不可或缺的一部分。小米的小爱音箱作为一款智能家居产品,以其便捷的操作和多功能的服务赢得了众多用户的青睐。小爱音箱的开放性生态支持带来更多的玩法。
2025-01-23 15:29:12
3117
原创 深度教程:如何在飞牛云FNOs上快速部署Music Tag Web
在上一篇文章中,我们探讨了如何使用 Docker 和 Docker Compose 来部署 Music Tag Web。今天,我们将详细介绍如何在流行的 NAS 系统——飞牛云 FNOs 中安装 Music Tag Web,以便您能够轻松管理并丰富您的音乐库。
2024-12-05 10:24:58
6021
5
原创 音乐刮削:让您的音乐收藏更加完美
刮削一词源于影视刮削,应用到音乐中也具有同样的意思音乐刮削:刮削是音频播放软件及音乐管理软件的一项功能,它可以自动识别音乐文件,并在线获取相应的专辑封面、歌曲名称、艺术家、专辑信息、流派和发行日期等数据,使得管理和播放本地音乐文件变得更加便捷。更多解释。
2024-12-02 10:29:35
2050
1
原创 【NAS 折腾】个人音乐库解决方案-Music-Tag-Web【支持小爱同学 播放本地音乐】
通常音乐库的选择在Jellyfin/Emby/Plex 三种媒体程序。
2024-04-25 10:17:50
8143
1
原创 Navidrome音乐打标签应用MusicTag Web版(线上刮削)
为什么开发web版?在使用Navidrome时,我的音乐都是在远程服务器上的,本地的Musictag和mp3tag不能满足我的需求, 我需要部署在远程服务器上去需改线上的音乐标签,相当于在使用Navidrome的边车应用。
2023-03-20 17:35:21
9997
10
原创 python redis 布隆过滤器实现
如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间越来越大。同时检索速度也越来越慢,上述三种结构的检索时间复杂度分别为 O(n),O(log n),O(1)。
2022-11-03 11:24:19
1058
原创 python读取大文件md5校验性能优化比较
后端分片的话可以考虑多线程,多进程的处理方案但是一般业务场景 更多是前端上传的文件流的形式更好的方案是前端拆分大文件,后端在接受文件的同时算出md5。
2022-10-27 11:42:03
3635
原创 使用SSE主动向浏览器推送消息(轮询以上,websocket未满)
SSE 全称是 Server Sent Event,翻译过来的意思就是 服务器派发事件。也就是说发送不是api那种一次性的json数据,而是一种流文件,会持续不断的发送,浏览器不会主动关闭连接,由服务端控制是否断开连接,相当于。
2022-10-20 15:03:32
1497
原创 无惧高并发!Python+Redis分布式锁,让你的业务高效稳定!
本文介绍了如何使用Python和Redis实现分布式锁,支持重入和续锁。通过使用Redis的setnx指令实现锁的加锁和解锁,使用Redis的expire指令实现锁的自动过期,从而保证锁的正确性和高效性。
2022-08-26 10:43:59
3878
1
原创 python中werkzeug.Local模块
为什么使用werkzeug.Local而不是threading.local,因为python中应用基于协程运行,使用thread local变量可能会造成请求间数据相互干扰,因为一个线程中存在多个请求。Werkzeug 的设计者认为python自带的ThreadLocal并不能满足需求,主要因为下面两个原因:Werkzeug 主要用“ThreadLocal”来满足并发的要求,python 自带的ThreadLocal只能实现基于线程的并发。而python中还有其他许多并发方式,比如常见的协程(gr.
2022-05-18 18:15:23
474
1
原创 python中并发请求接口的多种实现
名词解释:事件循环:是每个 asyncio 应用程序的核心,每个协程任务都运行在事件循环中,事件循坏来管理分配不同任务的执行,比如aiohttp 请求后会让出控制权,事件循环就会继续执行下面的任务而不会造成阻塞,达到提高并发的目的。当然不是所有协程任务都可以让出控制权,所有要使用aiohttp而不是requests协程 :async关键字声明的特殊函数,就是协程,这时候协程已经不具备函数的特性,所以协程不是函数futures:调度的协程被包装在Tasks 中,它是一种Future类型,loop.cr
2021-12-10 10:55:30
4050
原创 mysql索引原理
文章中的索引均为介绍mysql中innodb引擎的索引什么是索引?索引是一种数据结构(B+树),索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数。磁盘预读?需要知道3个概念时间局部性,如果一个信息项正在被访问,那么在近期它很可能还会被再次访问空间局部性,在最近的将来将用到的信息很可能与正在使用的信息在空间地址上是临近的。顺序局部性,大部分指令是顺序进行的所以计算机操作系统做了一些优化,当一次IO时,不光把当前磁盘地址.
2021-10-08 11:48:47
134
原创 django celery中动态添加周期任务
常用实现方式@periodic_task(run_every=crontab(minute='*/5', hour='*', day_of_week="*"))def get_time(): """ celery 周期任务示例 run_every=crontab(minute='*/5', hour='*', day_of_week="*"):每 5 分钟执行一次任务 """ now = datetime.datetime.now() logger.er
2021-06-21 15:00:34
1069
原创 django中bulk_create返回id的三种实现
Django中的QuerySet有bulk_create方法,但是此方法不会如预期的一样返回新增的所有对象的id,这个特性相当令人头疼,不过Postgre SQL在Django1.10后已经可以返回id了,MySQL还是不行所以 我们只能自己实现返回的ids一,category_ids = Category.objects.values_list('id', flat=True)categories = Category.objects.bulk_create([ Category(ti.
2021-05-20 11:44:18
3307
原创 python实现有向无环图(DAG)
from collections import OrderedDict, defaultdictfrom copy import copy, deepcopyclass DAG(object): """ Directed acyclic graph implementation. """ def __init__(self): """ Construct a new DAG with no nodes or edges. """ self.reset
2021-04-13 19:30:42
5346
1
转载 python slots魔法
在Python中,每个类都有实例属性。默认情况下Python用一个字典来保存一个对象的实例属性。这非常有用,因为它允许我们在运行时去设置任意的新属性。然而,对于有着已知属性的小类来说,它可能是个瓶颈。这个字典浪费了很多内存。Python不能在对象创建时直接分配一个固定量的内存来保存所有的属性。因此如果你创建许多对象(我指的是成千上万个),它会消耗掉很多内存。不过还是有一个方法来规避这个问题。这个方法需要使用__slots__来告诉Python不要使用字典,而且只给一个固定集合的属性分配空间。这里是一个
2021-03-29 11:16:29
2314
原创 django使用gzip实现数据压缩
使用django可以轻松将通过接口请求的数据进行gzip压缩。大大提升用户的体验。全局配置MIDDLEWARE_CLASSES = ( 'django.middleware.gzip.GZipMiddleware',)局部配置from django.views.decorators.gzip import gzip_page# 函数方法@gzip_pagedef viewFunc(request): return HttpResponse("hello"*100).
2021-03-25 10:45:44
1360
1
原创 Django celery 进阶使用
首先在项目中celery.py文件中定义一个celery实例# celery.pyimport osfrom celery import Celery# set the default Django settings module for the 'celery' program.os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')app = Celery('proj')# Using a string her
2021-03-20 13:32:56
454
原创 Django celery KeyError “Received unregistered task of type报错解决
报错提示 Did you remember to import the module containing this task?Or maybe you are using relative imports?下面总结几种可能结果消息队列中缓存之前的任务,清理删除消息队列(rabbitmq或redis)看你使用是什么消息队列,重启celery任务未被注册在celery.py中app.autodiscover_tasks(lambda: settings.INSTALLED_APPS.
2021-03-18 17:33:46
1867
原创 Django从零开始构建CMDB平台之模型设计(一)
一 模型设计传统设计来讲,是一个资产一个表,那么关系型数据库多少张合适?可以认为不同型号的产品都是一个资产,那么不同产品放在一张表中肯定不现实,每个场景一张表,那么如果新加场景如何考虑?增加字段?增加多少字段?所以我们要引入一种方式进行实现这些信息,不同信息是不一样的,比如id信息是一种信息,主机名等也是一种信息,即使分析的再好,一旦广泛使用起来,那么需求也陆续膨胀这样的设计带来很大的问题:字段无法控制,扩展性不够,大量的字段冗余,看似名字差不多,名字也差不多设计模型class CISche
2021-03-04 20:21:38
731
5
原创 Django orm跨多值关联,链式调用filter/exclude数据与预期不符合问题
一般情况下,QuerySet的切片返回一个新的QuerySet—— 其并未执行查询。一个特殊情况是使用了的 Python 切片语法的 “步长”。例如,这将会实际的执行查询命令,为了获取从前 10 个对象中,每隔一个抽取的对象组成的列表:Entry.objects.all()[:10:2]2,Blog.objects.filter(entry__authors__name='Lennon')(假设有个关联的Author模型),若某项条目没有任何关联的author,...
2020-12-24 19:30:38
4234
2
原创 python bad magic number:b‘\x03\xf3\r\n‘:ImportError
当在Python版本更改之间保留旧的.pyc文件时,这是由Python 2.x .pyc文件进入新的Python 3.x项目引起的。解决方法find . -name \*.pyc -deleteython文件*.py运行的时候会产生对应的*.pyc文件,这个是python的解释器把*.py文件编译得到的二进制文件,完全可以*.py文件一样运行,功能上没有任何差别。很多厂商为了防止源码外泄,经常会采用把*.py源码文件编译后删除,完全使用*.pyc文件运行自己的产品。当然了,你打开*.pyc文件是一.
2020-12-21 19:25:57
4375
2
原创 Python实现猴子补丁
猴子补丁猴子补丁(monkey patch)的主要功能就是模块运行时动态的属性的替换。运行时动态改变类的方法class A: def func(self): print("Hi") def monkey(self): print("Hi, monkey")a = A()a.func()'''运行结果Hi'''加上猴子补丁class A: def func(self): print("Hi") de
2020-12-12 16:32:13
442
转载 MySQL索引数据结构及算法原理
原文转载MySQL索引背后的数据结构及算法原理1. 什么是索引?MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是一种数据结构。数据库查询是数据库的主要功能之一,最基本的查询算法是顺序查找(linear search)时间复杂度为O(n),显然在数据量很大时效率很低。优化的查找算法如二分查找(binary search)、二叉树查找(binary tree search)等,虽然查找效率提高了。但是各自对检索的数据都有要求
2020-12-12 16:02:53
259
原创 csrf是什么? Django中csrf的原理?
CSRF攻击CSRF(英语:Cross-site request forgery)是跨站请求伪造的缩写,也被称为XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,CSRF利用的是网站对用户网页浏览器的信任,。举个栗子受害者登录a.com,并保留了登录凭证(Cookie)。攻击者引诱受害者访问了b.com。b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。a.com接收到请求后,对请求进行验证,并
2020-11-28 14:45:17
3473
转载 分布式事务
数据库事务数据库事务的几个特性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily),简称就是ACID分布式事务分布式的网络环境很复杂,这种“断电”故障要比单机多很多,所以我们在做分布式系统的时候,最先考虑的就是这种情况。这些异常可能有 机器宕机、网络异常、消息丢失、消息乱序、数据错误、不可靠的TCP、存储数据丢失、其他异常等等当我们的单个数据库的性能产生瓶颈的时候,我们可能会对数据库进行分区,这里所说的分区
2020-11-14 21:53:52
189
原创 PDF.js跨域(django后端处理数据流方法)
前言PDF.js is a Portable Document Format (PDF) viewer that is built with HTML5.下载地址https://github.com/mozilla/pdf.js/releases跨域网上也有一些设置nginx服务器实现跨域,这里只考虑是把pdf文件请求到后端返回数据流的形式来实现首先修改viewer.jsfunction webViewerLoad() { var config = getViewerConfigu
2020-07-28 10:30:52
2620
原创 Docker部署应用 Django+daphne+Gunicorn+Nginx+Redis
title: Docker部署应用 Django+daphne+Gunicorn+Nginx+Redisdate: 2020-07-22author: charlesTags: dockerSlug: docker-django-daphne-gunicorn-nginxCategory: python前言发布于Docker部署应用 Django+daphne+Gunicorn+Nginx+Redis这里使用Docker部署应用,用到的技术栈Django==2.2.14Daphne,
2020-07-23 12:10:18
5531
转载 github pages不能自动更新
昨天往github pages的repository里提交了一篇文章后,却发现github pages的页面一直没有更新——看不到新提交的文章。网上搜了一些资料,最后解决了这个问题。一般来说,只要你的github pages repository有新的提交,github的服务器就会运行jekyll编译你的repository(延时很小)。如果编译出错,那么你的github pages页面是不会更新的;同时,github也会给你发一封提醒邮件,大致内容如下,The page build failed wi
2020-07-13 16:05:21
9865
3
原创 免费的Github博客搭建(python+pelican)
每个入门程序员或多都想拥有一个自己博客站点,苦于高额的服务器费用和较为麻烦的操作步骤,你完全可以通过 GitHub Pages来实现一个免费,可定制的书写,记录生活,技术分享的平台。为什么使用 GitHub Pages首先它是完全免费,可以省下一笔服务费无须自己购买云服务进行搭建,只需按步骤一步步操作即可,即使你不懂他的技术细节;支持的功能多,玩法丰富,你可以绑定你的域名、使用免费的 HTTPS、自己 DIY 网站的主题、使用他人开发好的插件等等当完成搭建后,你只需要专注于文章创作就可以了,其他
2020-07-13 11:19:57
670
原创 Python3最长递增子序列(Longest Increasing Subsequence/LIS)
最长递增子序列(Longest Increasing Subsequence; LIS)最长增加子序列(LIS)问题是找到给定序列的最长子序列的长度,以使该子序列的所有元素都按升序排序。例如,{10、22、9、33、21、50、41、60、80}的LIS长度为6,LIS为{10、22、33、50、60、80}。def lis(arr): if not arr: return 0 n = len(arr) # 存放每一步规划的最大解 dp = [1] * n
2020-07-01 15:14:57
641
原创 最长共同子序列 (Longest Common SubsequenceLCS)
1. 最长共同子序列 (Longest Common Subsequence; LCS)给定两个序列,找出两个序列中存在的最长子序列的长度。子序列是指以相同的相对顺序出现,但不一定是连续的序列 称为「最长共同子序列」(Longest Common Subsequence; LCS)」示例:序列“ ABCDGH”和“ AEDFHR”的LCS为长度3的“ ADH”。序列“ AGGTAB”和“ GXTXAYB”的LCS为长度4的“ GTAB”。解题思路首先看一个2个字符串abcdefg和c
2020-06-29 16:51:38
1525
原创 一篇基础了解python(非常实用)
Q: Python垃圾回收机制/内存管理机制?A:总体来说,在Python中,主要通过引用计数进行垃圾回收;通过 “标记-清除” 解决容器对象可能产生的循环引用问题;通过 “分代回收” 以空间换时间的方法提高垃圾回收效率。Python垃圾回收机制Q:__new__和__init__的区别?A:__new__作为构造器,起创建一个类实例的作用。而__init__作为初始化器,起初始化一个已被创建的实例的作用。__new__和__init__的区别Q:Python字典dict实现原理?A:散列表是一个
2020-06-23 15:54:21
117
原创 代码放在Docker image还是挂载到volume
首先需要明确的是:Docker到底能够带来什么样的好处,Docker带来轻量级虚拟化容器方面的优势(资源利用率高,创建快捷,环境纯粹) ? 还是镜像带来的优势(便于部署,记录容器状态,持续集成等)? 确定了使用的场景,才好说明代码到底放到什么地方更合适。举几个例子,可以根据场景灵活的方式使用代码和数据:场景一:如果做好了所有代码,想分发给其他使用者,这种无疑代码放到image是最佳的,包括数据库初始化脚本等。场景二:如果是开发环境,代码是用于调试,代
2020-06-12 16:22:31
1073
原创 Python3 双向链表
双向链表双向链表:每一个元素都是一个对象,每个对象有一个关键字key和两个指针:next和prev在双向链表的实现中,使用一个伪头部(dummy head)和伪尾部(dummy tail)标记界限,这样在添加节点和删除节点的时候就不需要检查相邻的节点是否存在。双向链表:每一个元素都是一个对象(DLinkedNode类的实例),每个对象有一个关键字key和两个指针:next和prevclass DLinkedNode: def __init__(self, key=0, value=0
2020-05-25 16:46:06
660
MySQL-python-1.2.5 2.zip
2019-07-30
edit this cookie 谷歌插件
2018-04-13
XSSme平台源码
2018-04-11
adb 1.0.31版本
2018-01-05
Python网络数据采集
2017-09-05
图解机器学习
2017-09-03
图解HTTP(高清)
2017-09-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人