Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts


How to serialize JSON object in C# without Newtonsoft Json

这篇文章探讨了在无法使用 Newtonsoft.Json 包的情况下如何在 C# 中进行 JSON 对象的序列化和反序列化。通过提供一个自定义工具类 `MyJsonConverter`,展示了利用内置的 `DataContractJsonSerializer` 实现这些功能的方法,并附有代码示例以验证其有效性。文章最后提出了一些问题,如“在没有第三方库支持的情况下,如何高效处理复杂的 JSON 数据?”以及“除了避免版本冲突,还有哪些场景适合使用这种方法?”,旨在激发读者的兴趣和进一步思考。--DeepSeek

C# JSON .NET Newtonsoft.Json JSON handling Custom JSON solution

Enable PowerShell remoting for Windows Server machines

这篇文章介绍了如何在Windows Server机器上启用PowerShell远程管理功能,使其支持通过HTTPS协议执行远程命令。文章首先指导用户删除现有的侦听器,然后创建一个自签名证书用于身份验证。接着,用户需要配置一个新的HTTPS侦听器以允许远程连接,并提供了一组PowerShell脚本命令来完成这些操作。为了确保连接的安全性,作者建议在本地机器上使用特定的会话选项跳过CA、CN和吊销检查,因为自签名证书不被默认信任。文章还附带了两个示例图片,展示了用户在输入密码后成功建立连接的过程。此外,文章提到了一个常见问题:如果无法连接到服务器,可能是因为防火墙阻止了相关端口(5986),并提供了一个PowerShell命令来创建一个新的防火墙规则以允许WinRM通过HTTPS进行通信。 这篇文章不仅为读者提供了实用的指南,还鼓励读者思考如何在实际环境中应用这些技术。例如,你是否已经考虑过将PowerShell远程管理整合到你的自动化任务中?或者,你是否已经在使用类似的解决方案,并希望进一步了解其安全性和效率?通过学习本文的方法,你可以更好地掌控远程服务器的操作,同时也能更深入地理解Windows Server的安全机制和网络配置。--DeepSeek

PowerShell Windows Server Remote Management WMI PowerShell Remoting Self Signed Certificate

Best-practice after creating a new Linux server

这篇文章介绍了优化和管理Ubuntu服务器的详细步骤,包括安装必要的软件包、配置防火墙、调整系统设置、优化内核和CPU性能、更改时区、移除Snap以及进行服务器基准测试等。主要内容涵盖使用Uncomplicated Firewall(UFW)配置防火墙规则,通过安装最新内核提升硬件兼容性和性能,禁用节电模式以提高CPU性能,设置正确的时区(如GMT或亚洲/上海),彻底删除Snap以减少系统资源占用,并使用iperf3和sysbench工具测试网络和CPU性能。此外,还提到了可能需要安装的运行时环境(如Node.js、Docker和.NET)以及后续服务部署的指导。--DeepSeek

bash Linux Ubuntu SSH System Configuration Server Optimization

Setup auto-renew wildcard HTTPS certificate on Azure virtual machine

本文详细介绍了如何在Azure环境下为网站配置HTTPS证书,使用Let's Encrypt和win-acme工具实现自动化的证书申请与续期。文章首先指导读者创建一个新的应用程序注册并获取必要的身份标识信息,包括订阅ID、资源组名称、目录/租户ID、应用客户端ID和应用客户端密钥。接着,文章说明了如何在Azure DNS中添加A记录,将所有子域名指向虚拟机的公共IP地址。随后,作者详细描述了通过运行win-acme工具,选择DNS验证方式,并输入之前获取的所有身份标识信息来完成证书的自动申请、验证和安装过程。最后,文章指出证书成功安装后,网站即可实现HTTPS加密访问,确保数据传输的安全性。--DeepSeek

Azure Azure DNS Windows Server HTTPS Win-ACME Certificate letsencrypt ACME

C# Rotate the square matrix

这篇文章探讨了一个在C#中旋转正方形矩阵的实现方案,并分享了一种高效的方法来完成这一任务。作者通过一个具体的例子展示了如何将一个4x4的二维数组顺时针旋转90度,同时详细解释了其中的关键思路和代码逻辑。文章中的核心方法`Rotate`采用了分层处理的方式,每一层都从外向内逐步进行旋转操作,并通过递归实现了这一过程。关键函数`RotateItem`则负责将矩阵中的每一个元素按顺时针方向移动到正确的位置。 作者还分享了在编写过程中的一些思考,比如如何确保元素的正确替换以及如何避免重复覆盖数据。这种方法不仅适用于4x4的矩阵,也可以扩展到任意大小的正方形矩阵。文章最后邀请读者思考:是否还有其他方法可以实现同样的效果?或者是否可以通过优化来减少内存占用或计算复杂度? 这篇文章不仅为需要处理矩阵旋转问题的开发者提供了一个可行的解决方案,还通过代码示例和逻辑分析,帮助读者更好地理解这一算法的核心思想。此外,作者提出了一个值得深思的问题:在更广泛的场景中,这种分层处理的方法是否可以应用到其他类型的变换或数据结构优化中?这个问题不仅为读者提供了进一步探索的方向,也激发了对矩阵操作的更多可能性进行畅想的兴趣。 通过这篇文章,读者不仅可以学到如何旋转正方形矩阵,还能从中体会到算法设计中分治思想的魅力。你是否曾经思考过类似的矩阵操作问题?或者是否有其他更高效的实现思路?不妨在阅读后继续探讨这些问题,并尝试自己动手实践,寻找属于你的解决方案!--DeepSeek

C# Algorithm Matrix Math Matrix Rotation C# Implementation

Creating a proxy to another URL with ASP.NET Core

这篇博客介绍了如何在 ASP.NET Core 中实现一个简单的 HTTP 代理逻辑,使你的项目能够将请求转发到任意目标 URL。通过创建 `CreateProxyHttpRequest` 和 `CopyProxyHttpResponse` 扩展方法,你可以轻松地将用户的原始请求转换为可重用的 `HttpRequestMessage` 并发送给目标服务器,同时将目标服务器的响应结果返回给用户浏览器。文章通过示例代码展示了如何在控制器中使用这些扩展方法实现一个简单的代理功能,并验证了其有效性。 这篇文章不仅帮助开发者理解 HTTP 代理的基本原理,还提供了一个灵活且可扩展的解决方案,适用于需要跨域请求或访问受限资源的场景。你是否也在寻找一种高效的方式来处理复杂的网络请求?通过本文的方法,你可以快速构建自己的代理逻辑并根据实际需求进行定制化开发。--DeepSeek

ASP.NET Core C# Reverse Proxy Web Proxy HTTP Proxy

Fix Azure Media Player can't play video in iOS mobile devices

这篇文章探讨了在iOS移动设备上使用Azure Media Player播放视频时遇到的问题,并提供了一些有效的解决方法。文章指出,尽管同一网页在Android设备上能够正常播放视频,但在iOS设备上却出现了播放失败的情况。通过分析和测试,作者总结了几点可能导致问题的原因,并提出了具体的解决方案。 首先,确保播放器具有autoplay、playsinline和controls属性。其次,在配置Azure Media Player时,将nativeControlsForTouch设置为false,并避免加载广告和字幕以减少对iOS设备的不兼容性。此外,使用正确的MIME类型(如application/ vnd. ms-sstr+ xml或video/mp4)也是关键。文章还提到,避免在播放器上添加事件监听器可以显著提升iOS设备上的加载性能。 通过这些调整,作者成功解决了视频无法在iOS设备上播放的问题,并强调了针对不同平台进行适配的重要性。这篇文章不仅为遇到类似问题的开发者提供了宝贵的解决方案,也为进一步探索跨平台视频播放的技术细节提供了启发。你是否也曾经遇到过类似的问题?或者是否有其他的解决方法可以分享?--DeepSeek

Azure Media Player Azure Azure Media Service Video Playback iOS Devices Configuration Adjustments

微信的架构是如何实现分布式消息分发?

这篇文章详细探讨了微信的分布式网络架构设计及其在实际使用中的表现。文章指出,微信采用的是去中心化的服务器架构,服务器仅作为消息中转站和临时存储,而不保存用户的聊天记录,这使得微信能够在不同设备间快速传递信息,并具备高可用性和灵活性。文章还解释了一些用户常见的疑问,例如为何需要手机扫码登录PC端、更换设备后聊天记录丢失的原因以及无法得知是否被好友拉黑等问题。这些现象都与微信的服务器架构设计密切相关。此外,文章还将微信的设计与QQ的传统集中式部署进行了对比,指出腾讯在设计微信时选择了完全不同的技术路线,以应对全球化和高并发的需求。最后,文章对产品经理提出建议,强调理解系统设计的本质对于产品开发的重要性,并提醒产品经理不要盲目模仿微信的功能,而应深入理解其背后的技术逻辑。--DeepSeek

Web WeChat Distributed Messging IM Distributed Systems

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

这篇文章详细介绍了如何使用FFmpeg工具下载Azure Media Service中的视频或直播流内容,并提供了具体的操作步骤和命令示例。文章首先说明了需要先安装FFmpeg,并提供了其官方网站的下载链接。接着,文章展示了如何准备一个简单的FFmpeg命令来下载视频,并解释了如何获取Azure Media Service的平滑流媒体URL(通常以`manifest`结尾)。为了使该URL适用于下载,文章建议在URL末尾添加`(format=m3u8-aapl-v3)`以转换为m3u8格式。最后,通过替换命令中的占位符并执行,即可完成视频下载。整篇文章旨在帮助技术爱好者或开发者快速掌握这一实用技巧。你是否也在寻找一种高效的方式获取Azure Media Service的视频内容?这篇文章或许能为你提供所需的方法和灵感!--DeepSeek

Azure Media Player bash Azure Azure Media Service Download FFmpeg

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

文章介绍了在ASP.NET Core应用中使用Entity Framework Core进行数据库查询优化的方法,特别是通过添加二级缓存来提升性能。文章首先介绍了内存缓存的实现方法,使用了EFCoreSecondLevelCacheInterceptor库,并详细说明了如何配置和使用该库。接着,文章扩展到Redis分布式缓存的应用场景,介绍了如何安装必要的NuGet包(如EasyCaching.Redis),并展示了如何在应用程序中配置Redis缓存提供程序以替代内存缓存。最后,文章提到了如何在appsettings.json文件中添加Redis的连接信息,并通过Azure Redis Cache示例说明了如何获取必要的配置参数。整个过程无需修改业务代码即可显著提升应用性能,展示了使用Redis作为分布式缓存的优势。--DeepSeek

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

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

这篇文章探讨了软件定制行业从传统买断模式向订阅制转型的必要性和优势。传统模式下,开发商完成项目后往往不再负责后续维护,导致软件质量参差不齐、用户体验差等问题。而订阅制通过长期服务协议,使开发商能够持续优化和维护软件,从而提升整体服务质量。 文章以大学教务管理系统为例,详细分析了订阅制的优势:一方面,用户无需承担高昂的初始成本和后期维护风险;另一方面,服务商可以通过规模效应降低成本,并获得稳定的收益来源。此外,订阅制还推动了DevOps等先进运维理念的应用,进一步提升了软件的可靠性和扩展性。 文章指出,尽管订阅制在成本效益、用户体验等方面具有明显优势,但数据安全、资产申报等问题仍对部分企业构成障碍。尽管如此,作者认为这是行业发展的必然趋势,并以微软Office 365的成功转型为例,证明了订阅制的巨大潜力。 这篇文章引发我们思考:如何平衡软件定制服务的灵活性与企业的实际需求?未来,随着更多企业接受这一模式,软件服务质量将得到显著提升,这将是整个行业的福音。--DeepSeek

DevOps China Software Development SaaS Subscription Software Subscription

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

这篇文章探讨了前端密码哈希方案及其潜在风险,通过腾讯QQ的历史案例揭示了看似合理的加密措施可能带来的漏洞。文章指出,虽然前端哈希密码可以防止运维人员直接获取密码明文,但这种做法本质上并未真正解决中间人攻击的问题,反而可能导致更高的安全风险。文章还回顾了过去在HTTP时代,由于缺乏有效的加密手段,导致密码容易被截获和破解的情况,并以作者本人的经历为例说明了当时的安全隐患。同时,文章分析了现代HTTPS协议的普及如何极大地提升了通信安全性,但同时也指出了当前仍存在的漏洞,如浏览器插件的潜在威胁以及钓鱼网站的欺骗手段。最后,文章强调,单纯依靠技术手段无法完全保障安全,提高用户的安全意识和判断能力才是解决问题的关键。通过这些讨论,作者呼吁读者在享受技术进步带来便利的同时,也要保持警惕,认识到安全防护是一个综合性的系统工程。--DeepSeek

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