Anduin Xue

let today = new Beginning();

All Posts


Setup auto-renew wildcard HTTPS certificate on Azure virtual machine

本文详细介绍了如何在Azure虚拟机上设置自动续订通配符HTTPS证书。首先,需要在Azure DNS服务中创建一个新的资源组,并将域名服务器地址复制到记事本中。然后,在域名提供商处修改域名服务器的值。接下来,创建一个新的Azure虚拟机,并在其上安装IIS。为了获取证书,可以使用win-acme自动工具,它可以自动完成申请、验证和安装步骤。在此过程中,还需要创建一个新的应用程序注册,并为其分配相应的权限。最后,应用通配符HTTPS证书,并设置DNS记录以将任何子域指向服务器。完成这些步骤后,您的网站将使用HTTPS进行加密。本文提供了详细的操作步骤和截图,帮助您更轻松地完成设置过程。在完成设置后,您的在线服务将更加安全可靠。那么,自动续订通配符HTTPS证书对您的业务有何影响?如何确保在整个过程中不会出现问题?--GPT 4

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

C# Rotate the square matrix

In this blog post, a C# solution is presented for rotating a square matrix, a problem that the author encountered during an interview. The provided code demonstrates a straightforward approach to this problem by defining two methods: Rotate and RotateItem. The Rotate method is responsible for iterating through the matrix and calling the RotateItem method for each element, while also handling the padding to ensure that the inner matrix is rotated correctly. The RotateItem method, on the other hand, takes care of swapping the elements in the matrix to achieve the desired rotation. By sharing this solution, the author aims to help fellow developers who may face a similar problem in the future. The code is easy to understand and can be used as a reference or starting point for further exploration of matrix manipulation techniques in C#. Readers are encouraged to study the provided code, try it out, and think about possible optimizations or alternative approaches to this problem. How would...--GPT 4

C# Algorithm Matrix Math

Creating a proxy to another URL with ASP.NET Core

本文讨论了如何在C#或ASP.NET Core中编写简单的HTTP代理逻辑,以及如何让您的项目代理请求到其他URL。这不是关于为您的ASP.NET Core项目部署代理服务器的内容。 首先,您需要明确您要代理的目标,这应该是一个URL。 在项目的任意位置添加以下代码: (此处省略代码示例) 这个方法将用户发送的`HttpContext.Request`转换为可重用的`HttpRequestMessage`,以便您将此消息发送到目标服务器。 在目标服务器响应之后,您需要将响应的`HttpResponseMessage`复制到`HttpContext.Response`,以便用户的浏览器直接获取到它。 (此处省略代码示例) 现在准备工作已经完成,回到我们的控制器: (此处省略代码示例) 尝试访问它,它将被代理到google.com。 (此处省略图片示例) 本文向您展示了如何在ASP.NET Core中实现简单的HTTP代理功能,通过这个代理功能,您可以将请求代理到其他URL。这将为您的项目带来更多的灵活性和扩展性。那么,您是否已经考虑在自己的项目中使用这种代理功能呢?如何有效地利用这个功能来改进您的项目呢?--GPT 4

ASP.NET Core Reverse Proxy Web Proxy

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

本篇博客讨论了Azure媒体播放器在iOS移动设备上无法播放视频的问题,并提供了一些解决方案。首先,确保播放器具有以下属性:autoplay、playsinline和controls。其次,尽量避免使用`nativeControlsForTouch`和一些高级功能,因为iOS可能不支持这些功能。此外,避免使用广告和字幕加载播放器,因为这可能导致播放器在iOS设备上无法正常工作。同时,使用正确的MIME类型,如`application/vnd.ms-sstr+xml`和`video/mp4`等,错误的MIME类型可能导致播放器加载失败。最后,不要在iOS设备上为播放器添加事件监听器,因为这可能导致播放器无法工作或加载速度极慢。通过遵循这些建议,您可以提高Azure媒体播放器在iOS设备上的性能和兼容性。那么,为什么iOS设备在加载和播放Azure媒体播放器时会出现这些问题?有哪些其他方法可以解决这些问题并提高播放器在iOS设备上的性能?--GPT 4

Azure Media Player Azure Azure Media Service

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

微信作为生活中不可或缺的通讯工具,其架构设计之巧妙令人称赞。本文探讨了微信如何通过分布式架构实现高效的消息分发。文章首先提出了一些关于微信的疑问,例如需要手机扫码登录PC端、切换设备后无法同步聊天记录等,然后通过深入分析微信的架构设计,解释了这些现象背后的原因。 文章提出,微信采用了分布式应用架构,其服务器遍布全球各地,没有中心化的服务器。为了实现分布式通讯,微信至少需要设计三个算法:服务器选择算法、服务器端切换算法和用户发现算法。这三个算法共同保证了用户能够快速定位到合适的微信服务器并进行通信。 分布式架构的设计带来了许多好处,例如运维上的便利、对单台服务器生命的弱化、国际化应用的支持等。此外,文章还通过类比Email的通信过程,解释了微信群聊、文件传输等功能的实现原理。 最后,文章指出许多产品经理可能无法理解微信架构设计的复杂性,而盲目模仿或吐槽微信的槽点。实际上,微信的设计非常精巧,为用户提供了高效便捷的通讯体验。然而,这种设计也存在一定的局限性,有些功能并非程序员脑残,而是数据结构本身无法支撑。因此,产品经理在设计产品时,需要更深入地了解技术架构,避免提出不切实际的需求。--GPT 4

Web WeChat Distributed Messging IM

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

本篇博客为您提供了一个关于如何下载任意Azure媒体服务视频或直播流的教程。在开始之前,您需要安装FFmpeg,无论您使用的是Windows、Linux还是Mac OS。您可以在此处下载最新的FFmpeg:[https://ffmpeg.org/download.html](https://ffmpeg.org/download.html)。 安装完成后,准备如下命令: ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i "{0}" -c copy video.mp4 接下来,您需要获取所观看视频的Azure媒体服务平滑流URL。通常,此URL以“`manifest`”结尾。例如: https://amssamples.streaming.mediaservices.windows.net/3b970ae0-39d5-44bd-b3a3-3136143d6435/AzureMediaServicesPromo.ism/manifest 要下载此内容,请首先将其附加为m3u8格式。在URL的末尾附加以下项目: (format=m3u8-aapl-v3) 现在,URL应该如下所示: https://amssamples.streaming.mediaservices.windows.net/3b970ae0-39d5-44bd-b3a3-3136143d6435/AzureMediaServicesPromo.ism/manifest(format=m3u8-aapl-v3) 现在将URL替换为第一步中的命令`{0}`。 ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i "https://yourdomain/manifest(format=m3u8-aapl-v3)" -c copy video.mp4 最后,执行生成的命令。您的视频将作为文件video.mp4下载。 通过本篇博客,您将学会如何使用FFmpeg轻松下载Azure媒体服务中的视频或直播流。那么,这个方法是否适用于其他流媒体服务呢?如何优化下载速度和质量?探索这些问题,找到答案,尽情享受您的视频下载之旅...--GPT 4

Azure Media Player bash Azure Azure Media Service Download FFmpeg

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

本篇博客介绍了如何使用基于Redis的EF第二层缓存来提高SQL数据库性能。首先,安装`EFCoreSecondLevelCacheInterceptor`包,然后在`StartUp`类的`ConfigureServices`方法中进行相应的配置。这个缓存会在通过使用这个库的DbContext更改实体(插入、更新或删除)时更新。如果数据库通过其他方式(如存储过程或触发器)更新,缓存将变得过时。但是,如果我们的应用程序在多个实例中运行,数据库的更改可能不适用于其他实例,可能会导致许多问题。此时,我们需要使用Redis来存储缓存。 Redis是一种开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。本文介绍了三种安装Redis的方法,分别是在Redis官网下载安装、在Windows Server上安装及在Azure上创建Redis缓存实例。安装完成后,使用命令安装`EasyCaching.Redis`包,并修改`StartUp`方法以连接Redis数据库并使用Redis存储Entity-Framework Core的缓存,支持扩展。 此外,还需在`appsettings.json`文件中添加正确的Redis连接信息。这样,在启动过程中,应用程序将尝试连接到Redis数据库,并使用Redis缓存数据库结果。在不修改代码的情况下,ASP.NET Core应用程序的性能得到了极大的提升。Redis值得称赞! 那么,如何在多实例应用程序中保持可扩展性呢?使用Redis作为缓存存储是否足够满足我们的需求?在实际应用中,我们可能还需要关注其他性能优化策略。--GPT 4

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

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

在当前软件定制行业中,普遍存在的问题是软件质量低劣、漏洞百出,对企业的扩展和用户体验造成严重影响。这主要是由于现行的商业采购模式导致的,而发展软件订阅制可能是解决这一问题的有效途径。订阅制意味着甲方按时间和用量付费,购买软件的使用权和保证软件可用性的服务,而非购买整个软件源码的知识产权。这将有助于改善乙方的开发流程,提高软件质量,降低甲方的风险,并且对双方都有更大的利益。 订阅制的软件定价可以更加灵活,降低甲方的初期试错成本,有助于乙方扩展市场。此外,乙方需要靠精准的定价来保证稳赚不赔,实现企业的健康发展。以微软的Office 365为例,采用订阅制销售,使得普通用户更容易接受,同时提供优异的技术支持和高软件可用性。 尽管订阅制在宏观和微观层面上具有诸多优势,但也存在一些问题,如数据安全、财务资产申报等方面的挑战。然而,随着越来越多的软件开发企业开始向服务转型并取得成功,订阅制将成为软件定制行业的主流和未来趋势。我们有理由相信,这将显著提高各行各业的IT服务质量。那么,订阅制是否真的能够改变软件定制行业的现状?企业如何应对订阅制带来的挑战?这些问题值得我们深入思考。--GPT 4

DevOps China Software Development SaaS Subscription

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

在这篇博客中,作者探讨了在前端哈希密码是否是一个不错的方案。文章首先指出,将密码哈希后存入数据库是为了防止运维人员直接查看密码,但如果将哈希过程放在前端完成,则对服务器来说,它实际上只是做了一次明文比较,这样运维人员仍然可以直接调用登录API获取账号权限。 文章接着讲述了腾讯公司的QQ在十几年前曾采用两趟哈希的做法来解决密码明文传输和运维人员登录问题。然而,这种做法实际上对防范中间人攻击并没有帮助,因为只要能抓到的包,就是能伪造的包。 作者回顾了当时网络安全状况较差的年代,例如ARP欺骗和中间人攻击等手段容易实现。然而,在RSA算法普及后,中间人攻击几乎不可能成功。如今,开发Web应用只需借助TLS,将密码原文直接发送给服务器就已经相当安全。 然而,我们仍然不能完全信任HTTPS,因为除了通信层面的防窃取,还存在许多其他攻击手段,例如浏览器插件可以直接阅读网页表单,以及假冒网页诱导用户输入密码等。文章最后指出,要真正解决这些问题,仅靠安全措施和算法远远不够,还需要提高普通用户的警觉性和判断能力,以及对基础安全领域的常识。 在这个背景下,我们不禁要思考:前端哈希密码真的是一个好的解决方案吗?如何在保护用户隐私的同时,确保网络安全?这些问题值得我们深入探讨。--GPT 4

Security Password Hash

Get unique random numbers in C#

本篇博客介绍了如何在C#中生成唯一的随机数。作者首先构建了一个简单的素数检测方法,并通过该方法生成一个素数序列。接着,编写了一个检测E值是否正确的方法,以及从自然数中找到有效E值的方法。在此基础上,作者实现了将输入值N分解为两个素数P和Q的方法,并通过P和Q得到有效的D和E值。 为了检验所得到的P、Q、D和E值是否有效,作者编写了一个函数,该函数在获取正确的P、Q、D和E值时返回true,失败时返回false。最后,通过调用I ^ d % N来生成随机数序列。由于输入的N值可能无效,因此还需要跳过所有无效输入并找到其附近的最近N值。 博客中提供了一个完整的示例,展示了如何使用这些方法生成唯一的随机数。通过运行示例,我们可以看到输出的随机数序列既随机又唯一。这种方法在需要生成不重复随机数的场景中非常有用。 那么,这种生成随机数的方法是否有局限性?在实际应用中,我们可能需要考虑性能和效率问题。此外,是否有其他更简洁或者更通用的方法来生成唯一随机数呢?在阅读本文后,希望读者能够对这些问题进行思考并尝试寻找答案。--GPT 4

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

HTTP post file from .NET Core new HTTP client

随着.NET Core 3的发布,微软推出了一款全新的.NET Core HTTP客户端。新客户端使得调用WEB API变得更加简单。本文将介绍如何使用新客户端提交文件至服务器。 通常情况下,我们调用Web API时不需要提交二进制文件。但是在新客户端中,我们应该如何向服务器提交文件呢?首先,我们需要了解HTTP POST请求带文件与表单URL编码内容的不同之处。表单通过一些边界进行划分,边界名称在HTTP头部的内容类型中指定。 要从.NET Core HTTP客户端提交文件,可以使用`MultipartFormDataContent`,这样框架就可以处理多部分内容。然后,通过添加新的流内容将文件添加到表单中。此外,您还可以向表单中添加其他内容,如URL编码的内容。最后,提交表单。 本文提供的示例代码展示了如何使用新的HTTP客户端提交文件至服务器。在这个过程中,您可能会遇到一些有趣的问题,例如如何处理多个文件的上传,或者如何在提交文件的同时提交其他类型的数据。文章内容将引导您探索这些问题,并帮助您找到合适的解决方案。--GPT 4

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

Tips for Azure CLI script programming on bash

本篇博客文章主要介绍了如何在bash中编写Azure CLI脚本。文章提供了一系列实用的代码示例,涵盖了登录Azure、选择订阅、获取租户ID和域名等操作。此外,文章还详细介绍了如何在Azure中创建资源,例如资源组、应用程序洞察和获取连接字符串等。 文章还涉及了如何获取SQL Server数据库连接字符串、Azure SignalR连接字符串、Azure存储帐户连接字符串以及Azure App服务访问URL等信息。此外,文章还介绍了如何为函数应用和Azure应用服务设置环境变量。 阅读本文后,您将了解如何编写更高效的Azure CLI脚本以完成各种操作。文章提供的代码示例可供参考和实践,以便您更好地理解和掌握这些技巧。同时,您可能会思考如何根据自己的需求定制这些脚本以满足特定场景的需求。您还可以尝试将这些代码片段组合成一个更复杂的脚本,以实现更高级的功能。 最后,有哪些其他Azure CLI脚本技巧可以提高我们的工作效率呢?请继续阅读全文,发掘更多有趣的问题和答案。--GPT 4

bash Azure DevOps Azure CLI