首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

Sa-Token v1.29.0 更新,轻松搭建 OAuth2.0 服务

Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、分布式 Session 会话、单点登录、OAuth2.0 等一系列权限相关问题。 框架针对踢人下线、自动续签、前后台分离、分布式会话……等常见业务进行N多适配,通过 Sa-Token,你可以以一种极简的方式实现系统的权限认证部分 Sa-Token v1.29.0 版本更新包括以下内容: 升级:sa-token-jwt插件可在登录时添加额外数据。 重构:优化Dubbo调用时向下传递Token的规则,可避免在项目启动时由于Context无效引发的bug。 重构:OAuth2 授权模式开放由全局配置和Client单独配置共同设定。 重构:OAuth2 模块部分属性支持每个 Client 单独配置。 重构:OAuth2 模块部分方法名修复单词拼写错误:converXxx -> convertXxx。 重构:修复 OAuth2 模块deleteAccessTokenIndex回收 token 不彻底的bug。 新增:OAuth2 模块新增pastClientTokenTimeout,用于指定 PastClientToken 默认有效期。 文档:常见报错章节增加目录树,方便查阅。 文档:优化文档样式。 新增:新增 BCrypt 加密。 修复:修复StpUtil.getLoginIdByToken(token) 在部分场景下返回出错的bug。 重构:优化OAuth2模块密码式校验步骤。 新增:新增Jackson定制版Session,避免timeout属性的序列化。 新增:SaLoginModel新增setToken方法,用于预定本次登录产生的Token。 新增:新增 StpUtil.createLoginSession() 方法,用于无Token注入的方式创建登录会话。 新增:OAuth2 与 StpUtil 登录会话数据互通。 新增:新增StpUtil.renewTimeout(100);方法,用于 Token 的 Timeout 值续期。 修复:修复默认dao实现类中updateObject无效的bug 完善:完善单元测试。 代码仓库:https://gitee.com/dromara/sa-token 框架功能结构图

优秀的个人博客,低调大师

CDN 搭建工具 GoEdge v0.2.9 发布,改进细节、修改 Bug

GoEdge是一款可以帮你快速构建 CDN & WAF 平台的工具,支持HTTP、HTTPS、TCP、TLS、UDP、IPv6、WAF等特性。 此版本主要改进细节、修复Bug。 注意:这个版本可能会重新记录一些统计数据。 EdgeAdmin 优化节点创建和安装流程 修复节点无法修改线路的Bug 优化代码/支持IP名单的更多格式的导入、导出 访问日志搜索增加域名和IP搜索 访问日志显示节点信息 增加全局服务访问日志 安全设置中增加允许记住登录选项 安全设置检查IP时同时也检查直接连接管理平台的上游IP 修复在MySQL8下安装提示无法创建edgeTest的问题 提升节点配置同步速度(从60秒提升到10秒以内) EdgeAPI 修复多个表unique key无法升级到问题 修复WAF检查IP状态可能会出现panic错误的Bug 边缘节点没有集群的时候视为删除 运行日志只显示已经设置集群的节点 下载:https://goedge.cn/downloads 文档:https://goedge.cn/docs

优秀的个人博客,低调大师

一文带你搭建简单的酒店推荐系统(附代码演练)

所有的在线旅行社都再努力满足亚马逊和Netflix制定的AI驱动的个性化标准。另外,世界各地的线上旅行系统竞争越发激烈,各个旅行商努力通过推荐、比较、匹配和分享来抓住我们的注意力和钱包。在这篇文章中,我们意在为那些在Expedia订旅馆的用户创建一个合适的旅店推荐系统。我们将该问题定义为一个多分类问题,然后建立并融合SVM模型和决策树模型取预测哪个“hotel cluster”是用户最想定的,并给予他详细的搜索信息。 1. 数据数据是匿名用户的,并且所有字段都是数字格式。数据可以在Kaggle中下载,train.csv中记录用户的行为,destinations.csv包含了用户的酒店信息。 import datetime import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestClassifier from sklearn.pipeline import make_pipeline from sklearn import preprocessing from sklearn.preprocessing import StandardScaler from sklearn import svm 为了能够在本地运行,我们随机选取了1%的数据,但仍然有24179条数据。 df = pd.read_csv('train.csv.gz', sep=',').dropna() dest = pd.read_csv('destinations.csv.gz') df = df.sample(frac=0.01, random_state=99) df.shape 输出:(241179, 24) 2. 探索性分析该系统的目的是要根据用户的搜索信息,预测用户将会预定哪种旅馆。总共有100种。换言之,我们是要处理一个100分类问题。 plt.figure(figsize=(12, 6)) sns.distplot(df['hotel_cluster']) 图三可以看出每个类的分布很均匀。 3. 特征工程Checkin和checkout列的数据是时间格式的数据,不能直接使用。我们将从中提取出年份和月份。通过定义一个函数取抽取,并将他们合并到destination.csv中。 from datetime import datetime def get_year(x): if x is not None and type(x) is not float: try: return datetime.strptime(x, '%Y-%m-%d').year except ValueError: return datetime.strptime(x, '%Y-%m-%d %H:%M:%S').year else: return 2013 pass def get_month(x): if x is not None and type(x) is not float: try: return datetime.strptime(x, '%Y-%m-%d').month except: return datetime.strptime(x, '%Y-%m-%d %H:%M:%S').month else: return 1 pass def left_merge_dataset(left_dframe, right_dframe, merge_column): return pd.merge(left_dframe, right_dframe, on=merge_column, how='left') 处理时间格式的列: df['date_time_year'] = pd.Series(df.date_time, index = df.index) df['date_time_month'] = pd.Series(df.date_time, index = df.index) from datetime import datetime df.date_time_year = df.date_time_year.apply(lambda x: get_year(x)) df.date_time_month = df.date_time_month.apply(lambda x: get_month(x)) del df['date_time'] 处理srch_ci列: df['srch_ci_year'] = pd.Series(df.srch_ci, index=df.index) df['srch_ci_month'] = pd.Series(df.srch_ci, index=df.index) # convert year & months to int df.srch_ci_year = df.srch_ci_year.apply(lambda x: get_year(x)) df.srch_ci_month = df.srch_ci_month.apply(lambda x: get_month(x)) # remove the srch_ci column del df['srch_ci'] 处理srch_co列: df['srch_co_year'] = pd.Series(df.srch_co, index=df.index) df['srch_co_month'] = pd.Series(df.srch_co, index=df.index) # convert year & months to int df.srch_co_year = df.srch_co_year.apply(lambda x: get_year(x)) df.srch_co_month = df.srch_co_month.apply(lambda x: get_month(x)) # remove the srch_co column del df['srch_co'] 4. 初步分析在创建了一些新列和去除一些无用的列后,我们想要知道每一列跟类标是否有线性关系。这可以让我们更加关注一些特定的特征。 df.corr()["hotel_cluster"].sort_values() 图4可以看出所有的列都基本跟类标没什么线性关系。这意味着刚才的那些方法对这个问题并不合适。 5. 策略在快速的进行谷歌搜索之后,我们不难发现将目的地、旅馆国家、旅馆超市结合起来能够更加准确的帮助我们找到对应的类标。 pieces = [df.groupby(['srch_destination_id','hotel_country','hotel_market','hotel_cluster'])['is_booking'].agg(['sum','count'])] agg = pd.concat(pieces).groupby(level=[0,1,2,3]).sum() agg.dropna(inplace=True) agg.head() 图五 agg['sum_and_cnt'] = 0.85*agg['sum'] + 0.15*agg['count'] agg = agg.groupby(level=[0,1,2]).apply(lambda x: x.astype(float)/x.sum()) agg.reset_index(inplace=True) agg.head() 图六 agg_pivot = agg.pivot_table(index=['srch_destination_id','hotel_country','hotel_market'], columns='hotel_cluster', values='sum_and_cnt').reset_index() agg_pivot.head() 图七 df = pd.merge(df, dest, how='left', on='srch_destination_id') df = pd.merge(df, agg_pivot, how='left', on=['srch_destination_id','hotel_country','hotel_market']) df.fillna(0, inplace=True) df.shape 输出:(241179, 276) 6. 实现算法我们只对预定的样本有兴趣: df = df.loc[df['is_booking'] == 1] 得到特征和类标: X = df.drop(['user_id', 'hotel_cluster', 'is_booking'], axis=1) y = df.hotel_cluster 朴素贝叶斯: from sklearn.naive_bayes import GaussianNB clf = make_pipeline(preprocessing.StandardScaler(), GaussianNB(priors=None)) np.mean(cross_val_score(clf, X, y, cv=10)) 0.10347912437041926 KNN: from sklearn.neighbors import KNeighborsClassifier clf = make_pipeline(preprocessing.StandardScaler(), KNeighborsClassifier(n_neighbors=5)) np.mean(cross_val_score(clf, X, y, cv=10, scoring='accuracy')) 0.25631461834732266 随机森林: clf = make_pipeline(preprocessing.StandardScaler(), RandomForestClassifier(n_estimators=273,max_depth=10,random_state=0)) np.mean(cross_val_score(clf, X, y, cv=10)) 0.24865023372782996 多分类逻辑回归: from sklearn.linear_model import LogisticRegression clf = make_pipeline(preprocessing.StandardScaler(), LogisticRegression(multi_class='ovr')) np.mean(cross_val_score(clf, X, y, cv=10)) 0.30445543572367767支持向量机:很耗时,但是效果更好。 from sklearn import svm clf = make_pipeline(preprocessing.StandardScaler(), svm.SVC(decision_function_shape='ovo')) np.mean(cross_val_score(clf, X, y, cv=10)) 0.3228727137315005 看起来我们需要做更多的特征工程去优化结果。接下来将会进一步调优。 源代码在Github中找到。公众号后台回复 “1224” 获得Github直达链接。

优秀的个人博客,低调大师

可视化页面搭建平台码良更新,新增轮播组件

桌面端轮播组件 配置 显示指示器 切换是否显示轮播器下方的指示器 自动轮播 切换是否自动轮播 切页方式 切换通过指示器切页的方式,有点击和悬浮可选 箭头显示 切换轮播器左右的箭头的显示方式,有始终显示、始终不显示、鼠标进入即显示 风格 轮播器的展示风格,有卡片式和普通可选 切页回调 设置页面切换时的回调方法 千万不要选择“切换到上一页”或者“切换到下一页”,否则会造成死循环,浏览器不响应,千万不要尝试!!! 子组件 推荐使用“空容器”组件作为直接子组件,每一个直接子组件作为一个轮播页展示。 在组件树中点击上述子组件可以切换到相应轮播页 方法 本组件暴露出三个方法,可供其他组件或脚本调用。 “切换到上一页” 代码调用$vm.prev() “切换到下一页” 代码调用$vm.next() “切换到指定页” 代码调用$vm.setActiveItem(index) 项目代码:https://github.com/ymm-tech/gods-pen 官网:https://godspen.ymm56.com/

优秀的个人博客,低调大师

开源可视化搭建平台-码良新功能组件封装

码良组件封装详解 最近码良迎来了一波新功能的上线,并毫无保留地继续进行了代码开源-赶紧star关注。新上线的功能有桌面端页面制作、”楼层模式“、”正宗“布局组件(容器组件)的开发能力、组件封装、word 文档解析、psd 解析等平台功能和能力。 资源难得赶紧先关注,然后后续学习。 本文将为您详细介绍组件封装。 什么是组件封装 组件封装就是对具有上下层级关系的组件进行合并,隐藏内部细节,只保留顶层组件的过程。表现在组件树中,被封装的组件只能看到顶层组件,并以“小盒子”图标进行标识;表现在页面操作区,被封装组件的内部组件(子孙组件)不可被点击选中,只能对顶层组件进行操作。在对封装组件进行缩放操作的时候,子孙组件的大小被等比缩放、位置被线性变换。 操作方式 右键菜单操作 右键菜单可以在组件树和场景区中在组件上单击鼠标右键呼出,点击菜单中的"封装"指令即可对组件及其所有子孙组件进行封装,相反的,点击菜单中的“解封”(只有已封装组件才有该项)指令即可对该封装组件进行解除封装,还原为原本的树状结构。 组件树操作 比起右键菜单方式进行封装操作,组件树独有的双击操作更加便捷。在组件树上双击待封装组件可以快速进行封装操作;在组件树上双击已封装组件可以进行快速解除封装操作。 使用场景 组件封装看似简单,带来的改变却是多重的。 优化页面结构 通过对整个组件树不同功能块合理划分,然后进行分别封装,页面结构变得简单清晰。 功能抽象,配置集中 码良具有强大的脚本编辑能力,可以通过脚本来接收用户配置、控制组件行为、串联业务逻辑。但是,如果不能合理使用脚本,尤其是如果开发者对用户配置不进行集中管理,会造成使用者面对散落到各个组件的自定义配置无从下手。有了组件封装功能,开发者在进行模板页面的开发时,通过合理划分功能块,将同属一个功能的局部组件们进行封装,同时将自定义用户配置编写在该功能块顶层组件上,内部组件通过“数据总线“来获取用户配置参数,实现了功能抽象、配置集中,使用者不用再面对复杂的页面结构和不知道去哪找的众多配置项。 权限控制 实际使用中,还有一种情况,由于页面结构过于复杂,页面模板使用者(通常是缺乏专业技术能力的运营人员)因为缺乏足够的了解而随意增减组件或调整组件位置等,造成页面功能被破坏,组件封装过后,一方面,运营通过集中配置对页面进行配置,降低认知难度。另一方面,可以通过禁止解除组件的封装来阻止对功能块内部的修改,虽然目前码良并没有实现根据用户职业角色来禁止解除封装功能,但是封装操作仍能使得组件被破坏的难度加大,一定程度上保证了页面功能的完整性。 组合组件 封装后的组件仅限于当前页面复用(复制使用),那么有没有一种方法使封装组件变成普通组件一样,无限制的在其他页面使用呢?答案当然是有,组合组件就是专门干这个的。 如图,通过类似前面组件封装的做法,打开右键菜单,点击”另存为组合组件“指令,按提示然后输入必要的信息,就可以将这个组件功能块存储到服务器,供他人使用了。 看到这里你也许会奇怪,组合组件和组件封装似乎没有什么关联。实际上,合成组件生成时,会自动进行组件封装,因此在其他页面使用了合成组件以后,在组件树中会看到一个标有小箱子图标(封装的标识)的组件。 支持我们 开源项目需要的是持续地坚持,而我们坚持的动力当然也来自于你们的支持来都来了,加个关注再走吧 项目代码:https://github.com/ymm-tech/gods-pen 项目代码(国内镜像):https://gitee.com/ymm-tech/gods-pen

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册