文章类型

原创[MAUI 项目实战] 手势控制音乐播放器(二): 手势交互

[MAUI 项目实战] 手势控制音乐播放器(二): 手势交互
pit很简单,是一个包含了名称属性的控件,这个名称属性是用来标识pit的。定义一个拖拽物,和它拖拽的目标,拖拽物可以理解为一个平底锅(pan),拖拽目标是一个坑(pit),当拖拽物进入坑时,拖拽物就会被吸附在坑里。这里用Grid作为pit控件基类型,因为Grid可以包含子控件,我们可以在pit控件中添加子控件,比如一个图片,一个文字,这样就可以让pit控件更加丰富。,这个AbsoluteLayout类型的容器控件,内包含一系列控件作为pit,这些pit集合将作为平移手势容器的判断依据。

原创用Abp实现两步验证(Two-Factor Authentication,2FA)登录(一):认证模块

用Abp实现两步验证(Two-Factor Authentication,2FA)登录(一):认证模块
创建方法IsTwoFactorAuthRequiredAsync,返回登录用户是否需要双因素认证,若未开启TwoFactorLogin.IsEnabled、用户未开启双因素认证,或没有添加验证提供者,则跳过双因素认证。双因素认证(Two-Factor Authentication,简称 2FA)是使用两个或多个因素的任意组合来验证用户身份,例如用户提供密码后,还要提供短消息发送的验证码,以证明用户确实拥有该手机。至此,双因素认证的后端逻辑已经完成,接下来我们将补充“记住”功能,实现一段时间内免验证。

原创在EF Core中为数据表按列加密存储

在EF Core中为数据表按列加密存储
转换器将实体中属性类型,通过AES加密算法,转换为Base64编码字符串类型,存储到数据库中。当从数据库中读取数据时,再通过AES解密算法,将Base64编码字符串类型转换为实体中属性类型。在转换器中,将这些参数设置为静态属性,方便在使用时,进行修改。,则不需要转换为Base64编码字符串类型,直接对二进制数据进行加密和解密。其中有身份证号码IdentificationNumber列,需要加密存储,该如何实现?方法,为User表的IdentificationNumber列,添加值转换器。

原创解决Abp设置DefaultLanguage默认语言不生效的问题

解决Abp设置DefaultLanguage默认语言不生效的问题
默认地,Abp的语言提供程序将返回的CultureInfo为En,在一些默认实现的接口(比如/api/TokenAuth/Authenticate)返回的错误信息是英文。当请求到来时,会按照顺序依次调用这些语言提供程序,直到有语言提供程序的规则命中并返回了CultureInfo,这个CultureInfo就会被用于当前请求的语言设置。因此我们需要把AbpSettings中获取默认语言设置的优先级提高,即将AbpDefaultRequestCultureProvider排在默认的提供程序之前。

原创[Volo.Abp升级笔记]使用旧版Api规则替换RESTful Api以兼容老程序

[Volo.Abp升级笔记]使用旧版Api规则替换RESTful Api以兼容老程序
Volo.Abp 配置应用层自动生成Controller,增删查改服务(CrudAppService)将会以RESTful Api的方式生成对应的接口),这与旧版本的Abp区别很大。RESTful固然好,虽然项目里新的Api会逐步使用RESTful Api代替旧的,但在前后端分离的项目中已经定好的接口,往往需要兼容之前的方式。

原创[Python]语音识别媒体中的音频到文本

[Python]语音识别媒体中的音频到文本
Azure提供了快捷转换语音到文本的工具 https://speech.microsoft.com/portal。这里需要注意的是,需要上传的音频格式为16kHz 或 8kHz、16 位和单声道 PCM。编写代码,将视频文件test.mp4中的音频提取到test2.wav。文件以16kHz 采样率和单声道 PCM 编码方式,保存至。中的音频识别,并转换成文本写入。上传完成后将自动转换成文本。编写代码,将视频文件。

原创集成RocketChat至现有的.Net项目中,为ChatGPT铺路

集成RocketChat至现有的.Net项目中,为ChatGPT铺路
今天我们来聊一聊一个Paas的方案,如何集成到一个既有的项目中。以其中一个需求为例子:在产品项目中,加入IM(即时通信)功能,开始徒手撸代码,会发现工作量很大,去github找开源项目,结果也可能事与愿违:功能不够强大,或者用不同的语言编写的,编译出来程序集无法集成到项目中。可能当下最好的方案是利用独立的聊天功能组件,作为项目的中间件(Paas方案)。组件是独立部署,独立运行的,功能的稳定性,搭建速度快,作为基础设施服务,可以用在其他项目中,并且项目中的对接作为抽象层,可随时替换现有组件。

原创[MAUI 项目实战] 音乐播放器(三):界面交互

[MAUI 项目实战] 音乐播放器(三):界面交互
UI设计的本质是对于产品的理解在界面中多种形式的映射,当需求和定位不同时,对相同的功能表达出了不同的界面和交互方式。作为播放器,界面可以是千差万别的。《番茄播放器》的iOS平台上我开发了传统版本,和基于手势播放的版本。它们界面不同,但用的同一个播放内核。作为播放内核项目,在MatoMusic.Core的工作已经结束。本系列博文重点还是在播放器思路的解读,关于MAUI动画交互,我打算有时间另外写博客(这里给自己挖个坑)。

原创[MAUI 项目实战] 音乐播放器(二):播放内核

[MAUI 项目实战] 音乐播放器(二):播放内核
曲目排序,原理是通过交换位置实现的,iOS和Android平台都有自己的可排序列表控件,在对选中的条目进行排序(往往是提起条目-拖拽-释放)的过程中,触发事件往往提供当前条目。在传统播放器随机播放时,如果下一曲不是我想听的,我仍然想听上一曲,由于上一曲按钮是随机触发的时机,你可能找不到它了,不得不再音乐列表再搜索它。播放控制类,用于当前平台播放器对象的操作,对当前所播放曲目的暂停/播放,下一首/上一首,快进快退(寻迹),随机、单曲模式等功能的控制。同样,用到了排序逻辑,再将他的排序(

原创[MAUI 项目实战] 音乐播放器(一):概述与架构

[MAUI 项目实战] 音乐播放器(一):概述与架构
为什么想起来这个项目了呢?这是一个Windows Phone 8的老项目,2014年用作为兴趣写了个叫“番茄播放器”的App,顺便提高编程技能。这个项目的架构历经多次迁移,从WP8到UWP再到Xamarin.Forms。去年底随着MAUI的正式发布,又尝试把它迁移到MAUI上来。

原创Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块

Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块
这是一篇系列博文,我将使用Abp.Zero搭建一套集成手机号免密登录验证与号码绑定功能的用户系统:第三方身份验证在Abp中称之为, 区别于Abp的,这里Auth的全称应为Authorization,即授权。首先来厘清这两个不同的业务在Abp中的实现,我之前写的这篇系列文章中描述的业务,即使用的Abp外部身份授权(ExternalAuth)的相关扩展而实现的。还记得我们实现的WeChatAuthProvider吗?它继承于ExternalAuthProviderApi这个抽象类,实现的微信授权功能。

原创使用PdfSharp从模板生成Pdf文件

使用PdfSharp从模板生成Pdf文件
最近在做一个生成文档的需求。通过先制作一个包含各字段占位符的文档模板,导入这个模板并填写内容替换掉占位符,再输出成最终文件。由于版式固定,安全性更好,业务上常用Pdf作为最终标准化的格式, 在.Net平台下,可以使用PdfSharp导入,编辑,导出Pdf文档。