Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts


Download any Azure Media Service video or live stream with FFmpeg.

本文提供了一种通过FFmpeg下载Azure Media Service视频或直播流的实用方法。核心在于将Azure提供的smooth streaming URL转换为m3u8格式并利用FFmpeg的协议白名单功能实现下载。操作流程包含三个关键步骤:首先安装FFmpeg并配置协议白名单参数,其次从目标视频获取以manifest结尾的URL,最后通过追加format=m3u8-aapl-v3参数构建完整下载命令。技术细节揭示了媒体服务协议转换的可行性——当视频流被转码为HLS格式时,其分片特性恰好匹配FFmpeg的copy编码策略。值得注意的是这种技术路径不仅适用于点播内容,对直播流同样有效。技术实现背后引发值得深思的问题:媒体服务协议设计的开放性边界在哪里?当标准协议与自定义扩展产生交互时,系统安全性是否面临新的挑战?而当视频分发机制与下载技术形成对抗关系时,我们该如何看待内容保护与技术自由之间的平衡?--Qwen3

Azure Media Player bash Azure Azure Media Service Download FFmpeg

EF second layer cache to enhance your SQL database performance based on Redis

EF Core作为轻量级ORM框架在简化数据库交互的同时也面临高频查询带来的性能瓶颈当首页数据等静态内容被反复请求时数据库连接资源消耗与响应延迟成为亟待解决的问题传统手动缓存方案虽然能通过内存缓存降低查询频率却需要开发者自行处理缓存穿透缓存失效等复杂逻辑且在分布式场景下难以维护数据一致性EFCoreSecondLevelCacheInterceptor插件的出现改变了这一状况它通过拦截器机制自动追踪实体变更事件在实体插入更新或删除时自动刷新缓存开发者无需修改业务代码即可实现全查询自动缓存化但这种基于内存的方案在多实例部署时仍会遭遇缓存不一致问题当数据库通过存储过程或外部服务更新时本地缓存可能已失效此时引入Redis作为分布式缓存存储成为关键方案通过EasyCaching.Redis集成EF二级缓存将缓存数据集中存储在Redis集群中无论应用实例如何扩展都能保证缓存数据的实时同步与一致性配置过程仅需简单修改Startup类添加Redis连接信息即可实现从内存缓存到分布式缓存的无缝迁移当你的应用已通过Redis实现缓存分布式化是否考虑过如何设计缓存预热策略?当Redis集群出现网络分区时如何保证缓存可用性?这些未解难题或许正是你优化系统架构的下一个突破口--Qwen3

ASP.NET Core C# SQL Server SQL Entity Framework Core Azure Redis Caching Cache

软件定制行业为何应当发展软件订阅制?

当前软件定制行业普遍存在买断制软件质量低下的顽疾表面繁荣下隐藏着代码漏洞功能残缺与责任真空的深层矛盾这种模式导致开发商在验收后即撤离维护责任荒废形成技术债务的恶性循环而订阅制的出现正在重塑这一产业格局通过按时间用量付费的模式软件服务从一次性交易转变为持续性承诺服务方必须承担可用性维护迭代等全生命周期责任这种商业逻辑倒逼开发者构建更健壮的代码体系某高校教务系统从买断制转向订阅制的案例揭示了变革的力量当服务方将软件部署在自建数据中心并承诺99%可用性时维护成本从单人负担转化为专业团队规模化运营DevOps自动化测试灰度发布等现代工程实践得以普及甲方则从维护噩梦中解脱风险控制从百万级买断转向可随时终止的年度订阅这种价值交换重构了供需双方的博弈关系定价策略的灵活性更激发市场活力例如按用户日均元的计费模式让试错成本降至极低阈值而数据主权与财务审计等现实障碍则成为订阅制普及的最后堡垒当微软用Office 365的订阅模式战胜盗版困局时中国软件行业却仍在买断制的泥潭中挣扎这种认知鸿沟暗示着软件服务化革命的深层阻力:企业是选择短期可控的买断成本还是长期可持续的订阅价值?当订阅制将软件从产品变成服务时我们是否正在见证一场超越代码本身的产业进化?--Qwen3

DevOps China Software Development SaaS Subscription Software Subscription

在前端哈希密码是否是个不错的方案?

在前端对密码进行哈希处理是否真的能提升安全性?这种看似巧妙的设计反而可能将服务器暴露在更危险的境地——当哈希计算在客户端完成时,服务器接收到的其实是经过加密的"明文",这反而让数据库中的哈希值成为可以直接调用的账号凭证。历史上腾讯QQ曾采用的双哈希策略揭示了这种设计的荒谬性:即便在前端完成第一层加密,只要攻击者能截获中间传输的哈希值,就能通过API直接完成身份冒用。这种安全方案的失效性暴露了一个本质问题:任何试图通过加密手段在传输层面上完全防御攻击的尝试,都可能在协议层面被更高明的攻击者绕过。随着TLS技术的普及,现代HTTPS协议通过复杂的握手机制和证书验证体系,让中间人攻击变得异常困难。但安全防线的漏洞往往出现在意想不到的角落——浏览器插件的权限滥用、用户对钓鱼网站的识别盲区,都在提醒我们:当技术防御达到极限时,安全防护的最后防线始终是用户的安全意识。在密码学技术不断进步的今天,我们是否真的需要重新思考"安全"的定义?当所有技术手段都被突破时,人类对抗网络威胁的核心能力究竟是什么?--Qwen3

Security Password Hash password security hashing algorithm manual in the middle attack

Get unique random numbers in C#

本文提出了一种基于RSA算法的非重复随机数生成方案,解决了传统方法在性能与内存占用上的瓶颈。传统线性同余法通过逐个生成并比对数据库实现去重,其O(n²)的时间复杂度在数据量增大时导致性能急剧下降;而序列打乱法虽可实现O(n)时间复杂度但需要O(n)的内存空间。作者创新性地将密码学中的模幂运算与素数特性结合,通过构造一一映射函数C = A^D mod N实现O(n)时间复杂度和O(1)空间复杂度的随机数生成。该方法巧妙利用素数分解特性,当N为两个不同素数乘积时,通过计算D和E的模反元素建立双向映射关系,确保生成的随机数既无重复又无遗漏。代码实现中通过素数检测、参数验证和自然数遍历等模块构建完整解决方案,最终测试结果验证了随机数的唯一性和分布的均匀性。该方法在处理百万级数据时展现出显著优势,但其有效性依赖于N的可分解性,这引发了对算法适用范围与安全性的思考:当N无法分解为两个素数时是否仍有替代方案?如何在资源受限场景中平衡性能与安全性?或许我们还能思考,密码学技术在算法优化中还有哪些未被开发的潜力?--Qwen3

C# .NET Core Algorithm Random Numbers Unique random Non-repeat Random

HTTP post file from .NET Core new HTTP client

这篇文章介绍了.NET Core 3中全新HTTP客户端处理文件上传的实践方法。当开发者需要通过HTTP POST请求提交二进制文件时,会发现与常规表单数据存在本质差异——multipart/form-data格式的边界划分特性要求特殊的处理方式。作者通过对比传统表单编码与文件上传的差异,揭示了MultipartFormDataContent组件的核心价值:它能够自动生成符合RFC 7578规范的多段内容结构,同时智能处理边界字符串生成和内容分段编码。通过StreamContent包装文件流并添加到formData集合中,开发者可以轻松构建包含文件和其他表单字段的混合请求体。这种设计不仅简化了文件上传的实现复杂度,更展现了.NET Core对HTTP语义的深度封装能力。当思考现代Web服务中文件传输的演进方向时,我们不禁要问:在Server-Sent Events和WebSockets盛行的今天,这种基于HTTP的流式上传方式是否仍然具备不可替代的优势?当面对PB级大文件传输需求时,这些封装好的API能否支撑更底层的自定义协议扩展?或许答案就藏在对HTTP语义的重新解构中。--Qwen3

ASP.NET Core C# .NET Core HTTP Web File HTTP Client POST

Tips for Azure CLI script programming on bash

这篇博客通过一系列Azure CLI脚本编程技巧展示了如何在bash环境中高效管理云资源。从基础的Azure云环境登录到复杂资源的自动化创建,作者通过代码示例构建了一个完整的云操作工具箱。读者可以学习到如何通过脚本实现订阅选择、租户信息获取、资源组动态创建、应用监控配置等核心功能,同时掌握数据库连接字符串生成、环境变量设置等关键参数的提取方法。文章巧妙地将云资源管理与自动化逻辑结合,例如通过条件判断避免重复创建资源的代码设计,以及通过管道操作简化数据提取的实现方式。这些技巧不仅提升了云操作的效率,更启发我们思考如何将脚本思维应用到更复杂的云原生场景中。当面对跨区域资源调度、多订阅环境管理或自动化监控体系构建时,这些脚本范式如何进行扩展?在安全性与可维护性之间,如何设计更优雅的脚本架构?这些问题的答案或许就藏在代码的每一行逻辑中,等待读者通过实践去发现。--Qwen3

bash Azure DevOps Azure CLI Environment Variables Resource Management

Bootstrap dark theme minimum style

随着苹果和安卓系统对暗色模式的广泛支持,网站适配暗色主题已成为用户体验的关键需求。本文提出了一种基于Bootstrap框架的最小化样式解决方案,通过CSS媒体查询`@media (prefers-color-scheme: dark)`和JavaScript的`matchMedia`方法,实现对用户系统暗色模式设置的自动检测。当检测到暗色模式时,通过动态切换`.navbar-light`到`.navbar-dark`、添加`.bg-dark`背景类等操作,仅需修改少量核心元素的样式即可完成主题切换。然而这种方案仍需针对输入框、表单控件等特定元素额外编写CSS覆盖默认样式,例如通过`!important`强制覆盖Bootstrap的亮色主题样式。尽管代码实现了基础功能,但如何平衡样式覆盖带来的兼容性问题,是否可以通过更优雅的方式实现主题切换而非逐个元素手动处理,以及如何设计用户自定义主题的优先级机制,这些问题仍值得深入探讨。当系统暗色模式与用户个性化偏好产生冲突时,我们是否应该为网站提供独立的主题切换开关?或许答案就藏在代码之外的设计哲学里。--Qwen3

Web CSS Bootstrap Media Query Style Dark theme

Microsoft account integrated sign in via C#

这篇博客详细解析了如何通过C#实现Microsoft账户集成登录的完整开发流程。文章从Azure门户创建应用开始,展示了如何配置租户权限与重定向URI的关键设置步骤,特别强调了应用ID与密钥的生成与管理机制。通过代码示例演示了OAuth2.0授权码流程的核心实现,包括构建授权请求链接、处理回调代码、获取访问令牌及调用Graph API获取用户信息的完整链路。文章创新性地结合Aiursoft.XelNaga库的AiurUrl工具类,展示了如何优雅构建API请求并处理响应数据,最终通过MicrosoftUserDetail类解析用户核心信息字段。整个过程不仅提供了标准实现方案,更通过代码注释与异常处理机制的展示,揭示了实际开发中可能遇到的认证失败场景处理策略。文章最后抛出值得思考的问题:当企业需要同时支持多租户场景时,如何通过微软认证体系实现灵活的账户隔离?当用户信息需要扩展时,如何通过Graph API的其他接口获取更多数据维度?这些开放性问题为读者提供了延伸思考的空间,而附带的GitHub源码链接则为实践提供了直接的技术落地方向。--Qwen3

ASP.NET Core Azure Microsoft OAuth Login Authentication

Install Azure CLI on Windows 10 and use it in bash

本文探讨了Azure CLI在Windows 10系统中安装后如何突破命令行环境限制实现跨平台调用的创新实践通过分析Azure CLI的安装过程揭示了其在PowerShell中的天然适配性并深入剖析了git-bash环境中无法识别az命令的底层原因——源于Windows命令行文件扩展名与Unix-like系统调用机制的兼容性差异文章创新性地提出通过创建系统级可执行文件实现命令调用的跨环境适配方案展示了如何利用Bash脚本技术将Windows命令行接口转化为符合Unix规范的执行入口进而实现az命令在Linux风格环境中的无缝调用这一解决方案不仅解决了具体的技术痛点更启发我们思考现代开发工具在多平台协作中的本质需求:如何打破技术栈的物理边界构建更流畅的跨系统开发体验?当开发者面对不同环境的工具链时是否应该更多地考虑接口的抽象化设计?而这种跨平台兼容性的实现是否预示着未来开发工具的统一化趋势?--Qwen3

bash Azure Azure CLI PowerShell Installation Bash Integration

Ubuntu bash experience for Windows Terminal without Linux subsystem

本文探讨了如何在Windows Terminal中构建接近Ubuntu的Bash体验而无需依赖Linux子系统通过Git Bash的集成与主题定制实现跨平台开发环境的统一文章逐步解析了从安装Git Bash到配置Windows Terminal为默认终端的过程重点包括通过JSON配置文件将Bash设为启动项调整配色方案以还原Ubuntu视觉风格优化快捷键映射以及扩展右键菜单功能等技巧同时引入PowerShell 7和第三方插件进一步增强功能扩展性这种将Windows原生工具与开源生态结合的方式不仅提升了开发效率更激发了读者思考:当终端界面超越操作系统的界限时我们是否正在重新定义人机交互的边界?如何通过个性化配置让工具真正适配开发者思维?或许答案就藏在每一次对Ctrl+V的重新定义中--Qwen3

bash Ubuntu Windows 10 Windows Terminal Git bash Ubuntu theme

Publish app from Azure DevOps to non-global Azure like Azure CN

如何将Azure DevOps构建的应用发布到非全球Azure环境例如Azure CN?这篇文章系统解析了跨环境部署的技术路径。当开发者习惯于Azure Global的便捷部署时,面对Azure China Cloud等隔离环境时常常陷入权限配置的困境——如何让自动化流水线突破订阅可见性的限制?文章通过构建服务主体的完整链路给出答案:从Azure AD注册应用开始,通过生成密钥和分配贡献者权限建立身份信任,最终在Azure DevOps中配置自定义云环境的服务连接。这个过程揭示了多云架构下身份认证的核心逻辑:当订阅ID和租户ID成为连接不同云环境的密码时,如何通过服务主体实现自动化部署的权限穿透?尤其值得关注的是手动配置服务连接时的环境选择机制,它打破了自动配置仅显示全球订阅的限制,为混合云场景下的持续交付提供了技术范式。当开发者面对复杂的多云环境时,是否应该重新思考统一身份管理的架构设计?在服务主体密钥的安全存储与权限最小化原则之间,又该如何平衡自动化部署的效率与风险?这些开放性问题为读者打开了持续集成的深度思考空间。--Qwen3

Azure App Service Azure Azure DevOps DevOps Azure CN China