Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts in 2020


FFmpeg 用法概览

本篇博客概括了FFmpeg的用法,包括视频转码、硬件加速、直播推流、整合视频和音频、修改视频分辨率、调整视频速度、剪取视频的一段时间、用ffmpeg扣取一个视频区域、反转视频等。文章详细介绍了每个操作的命令和参数,并给出了示例。此外,博客还推荐了SRS项目和flv.js,用于搭建直播平台和在网页里加载FLV直播流。通过阅读本文,您将了解如何使用FFmpeg进行各种视频操作和直播推流,实现类似Bilibili直播的播放体验。那么,您准备好尝试这些功能了吗?或许您可以思考如何将这些技能应用到您的项目中,为观众带来更好的观看体验。--GPT 4

bash FFmpeg

C# run tasks in a threads pool with fixed size

在本文中,我们将探讨如何在C#中使用固定大小的线程池运行任务。首先,我们提供了一个`CannonQueue`类,该类使用`SafeQueue`来存储待处理的任务,并使用`RunTasksInQueue`方法来并行执行这些任务。为了能够动态地向任务池中添加任务,我们修改了`QueueNew`方法,使其在添加任务时重新启动引擎。同时,我们还提供了一个`QueueWithDependency`方法,以便在需要访问诸如数据库或HTTP之类的依赖项时保持依赖项处于活动状态。 最后,我们展示了如何注册`CannonQueue`作为单例依赖项,并如何在实际应用中使用该服务。例如,我们可以使用`QueueNew`方法将下载任务添加到队列中,并利用`RunTasksInQueue`方法并行执行这些任务。此外,我们还可以使用`QueueWithDependency`方法来处理具有依赖关系的任务,例如使用Entity Framework的任务。 那么,如何在实际应用场景中高效地利用这个线程池呢?本文提供的方法是否足够满足您的需求,还是需要进一步优化?在实际开发过程中,可能会遇到哪些挑战和问题?希望这篇文章能够启发您的思考,帮助您找到解决方案。--GPT 4

C# Async Task Multi-Threading

Display code coverage information for .NET Core project using Azure DevOps.

本文介绍了如何在.NET Core项目中使用Azure DevOps显示代码覆盖率信息。首先,需要在Azure DevOps中创建一个构建管道。对于使用经典设计器的用户,需要添加一个新的.NET Core命令行步骤,并确保发布测试结果。在参数输入中,插入:--configuration $(buildConfiguration) --collect "Code coverage"。对于使用YAML的用户,添加任务:DotNetCoreCLI@2,并使用相应的输入参数。 请注意,始终使用Windows平台运行构建,不要在Linux上运行,因为代码覆盖率生成器尚不支持Linux。保存并运行管道后,可以在构建完成时查看代码覆盖率和测试结果。在本文的示例中,代码覆盖率为87%。 要获取徽章URL,首先复制URL中的以下部分。复制URL的三个部分,如示例中的A、B和C。然后复制以下markdown文本:![Azure DevOps coverage](https://img.shields.io/azure-devops/coverage/{{A}}/{{B}}/{{C}})。将A、B和C更改为复制的值,如:![Azure DevOps coverage](https://img.shields.io/azure-devops/coverage/aiursoft/Star/5)。将其保存在readme.md中。 完成上述步骤后,即可在.NET Core项目中显示代码覆盖率信息。这样的功能对于开发者来说,无疑是一个很好的辅助工具,可以更好地了解代码的覆盖情况,提高代码质量。那么,如何更好地提高代码覆盖率呢?这将是一个值得思考的问题。--GPT 4

.NET Core Azure DevOps .NET Test MSTest Integration Test Code coverage GitHub

ASP.NET Core Integration Test using MSTest

在官方文档中,仅有一个使用xunit进行ASP.NET Core集成测试的示例。但如果你不喜欢xunit呢?我们能否用MSTest替换它?答案是可以的。 首先,卸载xunit并安装MSTest。清理项目结构,然后为测试项目安装MSTest。接下来,在测试项目中启动服务器。在测试项目下创建一个名为`BasicTests.cs`的新类。将以下代码放入基本测试中,当测试开始时,它将自动启动一个新的ASP.NET Core Web服务器,并使用来自主Web项目的Startup。 接下来,添加一个简单的测试。在测试类中插入一个新功能。在这个新测试中,你将请求测试服务器并检查结果。现在你可以运行测试了!在Visual Studio中,或者在解决方案文件夹下执行`dotnet test`。 最后,考虑测试清理。在测试之后,你应该停止服务器以防止影响其他测试。只需停止并释放服务器即可完成工作。 本文讨论了如何使用MSTest替换xunit进行ASP.NET Core集成测试,并提供了详细的步骤。那么,使用MSTest进行集成测试是否能带来更好的测试效果?在实际应用中,MSTest和xunit之间的性能差异如何?这些问题留给读者自己探索和找到答案。--GPT 4

ASP.NET Core C# .NET Core Test MSTest Functional Test Integration Test

Fire and forget in ASP.NET Core with dependency alive

在C#中,实现fire and forget非常简单,只需使用Task.Run(() => FireAway())。然而,在ASP.NET Core控制器中,这种方法可能并不合适。当我们在控制器中触发一个耗时的任务,任务将作为fire-and-forget成功启动。但在处理HTTP响应后,控制器可能会被释放,这意味着依赖项可能不再存在,因此任务可能无法完成。 为了在触发任务时始终保持依赖项处于活动状态,我们需要创建一个新的服务来包含它,这个新服务必须是单例的,因为单例服务永远不会被释放。我们需要在服务中获取依赖项,而不是在控制器中,因为控制器的生命周期依赖于HTTP上下文,而单例服务则不依赖。 创建一个新类CannonService,并在StartUp.cs的ConfigureServices方法中将其注册为单例。在控制器中使用时,只需将CannonService注入到控制器中,然后调用一个依赖于某些耗时操作的函数。这个方法不会阻塞当前线程,可以直接向客户端返回结果,而发送器在发送邮件时始终保持活动状态。 作者已将上述代码发布为一个Nuget包。你可以在这里查看源代码:[Aiursoft.Canon](https://gitlab.aiursoft.cn/aiursoft/canon/-/tree/master),也可以在这里下载包:[Nuget.org](https://www.nuget.org/packages/Aiursoft.Canon/)。 这篇博客分享了在ASP.NET Core中实现fire and forget的方法,以及如何确保依赖项在任务执行过程中保持活动状态。那么,你是否考虑过在自己的项目中使用这种方法来优化性能呢?--GPT 4

ASP.NET Core C# Async Fire and forget

How to serialize JSON object in C# without Newtonsoft Json

本篇博客介绍了如何在C#中不使用Newtonsoft.Json库进行JSON对象的序列化和反序列化。在某些情况下,我们可能无法访问`Newtonsoft.Json`包,例如当不同的包使用不同版本的库时,可能会导致构建过程中的版本冲突。这通常发生在一些非常大的项目中。 本文提供了一个名为`MyJsonConverter`的静态类,其中包含两个方法:`Serialize`用于将对象序列化为JSON字符串,`Deserialize`用于将JSON字符串反序列化为对象。这个类使用了`System.Runtime.Serialization.Json`命名空间中的`DataContractJsonSerializer`类来实现序列化和反序列化。 通过这个类,我们可以像使用`Newtonsoft.Json`一样简单地进行JSON操作。示例代码创建了一个名为`Book`的简单类,并使用`MyJsonConverter`将其序列化为JSON字符串,然后将该字符串反序列化为`Book`对象。运行结果显示序列化和反序列化均成功。 这篇博客提供了一个在不依赖`Newtonsoft.Json`的情况下进行JSON操作的替代方案。那么,在实际项目中,我们是否应该放弃使用`Newtonsoft.Json`呢?这个问题值得我们深入思考。--GPT 4

C# JSON .NET Newtonsoft.Json

Enable PowerShell remoting for Windows Server machines

本篇博客主要讲述了如何在Windows Server上启用PowerShell远程功能。就像在Linux机器上使用SSH执行远程命令一样,你也可以在目标Windows Server上执行远程PowerShell命令。博客提供了详细的步骤,包括使用自签名证书启用HTTPS远程功能、配置监听地址以及在本地机器上通过PowerShell连接到服务器。 首先,我们需要在服务器上执行一系列命令来移除旧的监听器、创建自签名证书并启用HTTPS远程功能。接下来,在本地机器上执行命令来跳过CA检查(因为我们使用的是自签名证书),然后输入服务器的计算机名、SSL选项、端口号、会话选项和凭据。之后,系统会提示输入密码。 如果一切顺利,你将成功连接到服务器。但如果无法连接,可能是因为端口被阻止了。此时,可以在服务器上执行命令来解除端口阻止。 本文详细介绍了在Windows Server上启用PowerShell远程功能的方法,以及如何解决可能遇到的问题。那么,你是否已经准备好尝试这些操作,实现在Windows Server上的远程PowerShell功能呢?--GPT 4

PowerShell Windows Server Remote Management WMI

Best-practice after creating a new Linux server

在这篇博客中,我们探讨了在创建新的Linux服务器后进行身份验证的最佳实践。文章详细讲述了如何确保服务器的安全性,包括使用SSH密钥、创建强密码以及限制不必要的服务等方面。同时,博客还提供了一些实用的命令和技巧,帮助读者轻松地完成身份验证过程。在阅读本文后,您将了解到如何在创建新的Linux服务器后实施有效的身份验证策略,以确保服务器的安全和稳定运行。 文章引发了一些有趣的问题,例如:如何在不同的Linux发行版中实现类似的安全策略?如何确保在云环境中部署的Linux服务器同样安全?以及在遇到攻击时,如何快速识别并采取相应的防范措施?这些问题将激发读者思考更多关于Linux服务器安全的话题,并可能引导他们深入研究相关领域。 在阅读这篇博客时,希望您能够思考如何将这些最佳实践应用到自己的服务器环境中,以及如何根据实际需求调整这些建议。最后,您是否认为这些最佳实践足以确保服务器的安全,还是需要进一步探索其他方法来增强服务器的防护能力?我们期待您在阅读全文后,找到这些问题的答案。--GPT 4

bash Linux Ubuntu SSH

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

Bootstrap dark theme minimum style

With the increasing popularity of dark mode in mobile apps and websites, it's essential to adapt your Bootstrap-based website to support this feature. This blog post discusses a simple method to enable automatic dark theme switching with minimal changes to your existing website. Using media queries in CSS, you can easily detect if the current device is set to dark mode and apply the appropriate styles. Similarly, with JavaScript, you can detect dark mode and execute specific actions. The blog provides code snippets to accomplish these tasks, including monitoring dark mode status changes and modifying elements' classes based on the user's preference. However, detecting dark mode alone is not enough. You also need to modify some styles for specific elements like input fields. The blog provides a list of CSS rules to be applied when the dark mode is enabled, ensuring a seamless and visually appealing experience for users who prefer the dark theme. By implementing this method, you can ...--GPT 4

Web CSS Bootstrap Media Query Style Dark theme

Microsoft account integrated sign in via C#

本篇博客介绍了如何通过C#实现Microsoft账户的集成登录。首先,需要在Microsoft Azure Portal创建一个应用程序,并获取客户端ID和客户端密钥。接下来,通过运行`$ dotnet add package Aiursoft.XelNaga`安装所需的类库。 为了验证用户身份,我们需要将用户重定向到Microsoft登录门户。博客提供了相应的C#代码,实现了`GetBindRedirectLink()`方法。通过返回浏览器的“重定向结果”并使用`GetBindRedirectLink()`函数作为重定向URL,用户将被引导至登录页面。 用户成功登录后,将会被重定向回您设置的`RedirectUri`,并附带一个代码。通过该代码,您可以调用`GetUserDetail()`方法获取用户的详细信息。 博客还提供了`GetAccessToken()`方法,用于获取有效的访问令牌,以便下载用户个人资料。当您拥有访问令牌后,只需调用`GetUserInfo()`方法,我们将调用Graph API获取当前用户信息。 返回的用户是`MicrosoftUserDetail`实例,其中包含用户的ID、显示名称、用户主体名称和职位等信息。用户ID是唯一的,可用于识别您的用户。 最后,构建一个自定义网页,您的应用程序便可投入使用。博客还提供了源代码链接以供参考。 本篇博客详细介绍了如何通过C#实现Microsoft账户的集成登录,为开发者提供了详细的代码示例和解释。那么,如何将这种集成登录应用到其他类型的应用程序中呢?如何确保用户数据的安全性?希望本文能为您提供启示和灵感。--GPT 4

ASP.NET Core Azure Microsoft OAuth Login Authentication

Install Azure CLI on Windows 10 and use it in bash

在这篇博客中,我们将学习如何在Windows 10上安装Azure CLI并在bash中使用它。Azure命令行界面(CLI)是微软为管理Azure资源而设计的跨平台命令行体验。Azure CLI旨在易于学习和上手,同时功能强大,足以成为构建自定义自动化以使用Azure资源的绝佳工具。 Azure CLI可以在Windows,macOS和Linux环境中安装。它还可以在Docker容器和Azure Cloud Shell中运行。 在PowerShell中安装Azure CLI非常简单。只需执行以下命令: Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet' 然后,您可以直接使用它。 但是,如果在git-bash中执行`az`,它会告诉您找不到`az`。这是因为`az`是一个名为az.cmd的文件,因此bash不会将其视为bash中的命令。 那么我们如何在bash中使用az并编写az shell呢? 安装Azure CLI后,使用管理员权限打开一个新的bash实例。 然后执行以下命令: echo \"C:\\Program Files \(x86\)\\Microsoft SDKs\\Azure\\CLI2\\wbin\\az.cmd\" \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9 \${10} \${11} \${12} \${13} \${14} \${15} > "$SYSTEMROOT\az" 这将在系统根目录下创建一个名为az的新bash可执行文件。 现在尝试在bash中执行az命令。 通过这篇博客,您将了解如何在Windows 10上安装和使用Azure CLI。这将有助于您更好地管理Azure资源并构建自定义自动化。那么,您准备好在bash中使用Azure CLI了吗?--GPT 4

bash Azure Azure CLI PowerShell

Ubuntu bash experience for Windows Terminal without Linux subsystem

本篇博客教你如何在没有Linux子系统的情况下,为Windows终端设置Ubuntu bash体验。首先,你需要安装一个类似于git-bash的Linux风格的shell。然后,安装Windows终端,并将git-bash设置为Windows终端的默认终端。接下来,让主题看起来像Ubuntu风格,允许使用Ctrl + V进行粘贴,并允许在右键上下文菜单中启动WT。 在开始之前,你需要先安装git bash。然后,从Microsoft商店下载新的Windows终端。安装完成后,默认情况下,你将打开一个新的PowerShell会话。要将其更改为bash,请首先打开设置页面。接着,将Ubuntu的颜色主题添加到Windows终端中,并使用该颜色主题。 此外,为了启用Ctrl + V粘贴绑定,请考虑添加相应的键绑定。完成上述步骤后,你可以像在Ubuntu中一样使用Windows终端。你还可以安装PowerShell 7,并运行项目将其添加到具有高级选项的上下文菜单中。 现在,你可以在Windows终端中享受类似于Ubuntu bash的体验。为什么不尝试一下呢?这将如何改变你在Windows上的开发体验?--GPT 4

bash Ubuntu Windows 10 Windows Terminal

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

本篇博客讲述了如何使用Azure DevOps将编译完成的应用发布到非Azure Global环境,例如Azure CN。虽然在Azure全球环境中发布应用非常简单,但在某些情况下,客户可能会使用其他Azure环境,如Azure Arc、Azure政府版和Azure CN。文章详细介绍了如何在这些非全球环境中发布应用。 首先,需要创建一个新的应用注册,并允许Azure DevOps以应用的身份发布应用。然后,为新注册的应用添加一个密钥,并将应用添加到订阅级别角色,以便在订阅范围内管理资源。接下来,在Azure DevOps中添加一个新的服务连接,并选择手动配置以设置自定义的Azure环境名称。 在配置服务连接时,需要填写订阅ID、订阅名称、服务主体ID、密钥和租户ID。这些值可以在订阅详细信息标签页和Azure AD详细信息页面中找到。填写完所有必要信息后,单击验证并保存按钮。 最后,可以在管道上工作并将应用发布到此服务连接。本文通过详细的步骤和截图为读者展示了如何实现这一目标。那么,在面对非全球Azure环境时,是否还会感到困惑呢?或者这篇文章是否为您提供了一个全新的解决方案?快来阅读全文,探索更多有关Azure DevOps和非全球Azure环境的知识吧!--GPT 4

Azure App Service Azure Azure DevOps DevOps Azure CN China

Linux Cheatsheet for Windows Users

本篇博客为Windows用户提供了一份Linux操作的速查表,内容包括程序和服务管理、软件包管理、服务管理、更新、启动时自动运行命令、文本编辑、Tmux、Screen、Steam CMD等方面的知识。文章还提供了一些快速提示,如如何计算代码的总行数、获取CSharp文件的总行数、获取启动时间、获取关机事件、找出最长的C#文件等。此外,文章还介绍了如何使用Git仅添加非空白更改、测试磁盘写速度、通过SSH测试传输速度、在不使用wget的情况下下载文件并显示下载的文件等操作。最后,还提供了一些有趣的命令,如在不触及磁盘的情况下加热CPU、获取新的UUID并转换为base64、获取随机4个数字、持续播放当前文件夹下的随机视频等。如果您是一位Windows用户,希望更好地掌握Linux操作,那么本篇博客将会对您有所帮助。在阅读本文后,您是否能更熟练地使用Linux进行各种操作呢?请尝试回答这个问题并探索更多有关Linux的知识。--GPT 4

bash Linux Ubuntu

How to write a bot for Kahla

本篇博客讲述了如何使用Kahla.SDK编写一个Kahla机器人。首先,确保已安装.NET Core SDK。接下来,创建一个新的控制台.NET Core应用,然后为Kahla.SDK添加依赖项。接着创建一个新的C#类,继承`BotBase`类并重写默认的`OnMessage`方法。修改`Program.cs`以启动机器人,然后执行命令以启动机器人。在启动机器人后,使用另一个帐户与之交谈即可。 除此之外,博客还提供了关于依赖注入和高级启动的额外信息。Kahla.Bot支持自定义启动配置,修改`Program.cs`以使用高级启动,并创建一个名为`StartUp`的新类。通过这个类,可以添加自己的服务和配置全局设置。 这篇博客为你提供了一个简单易懂的教程,帮助你编写自己的Kahla机器人。现在,你是否已经跃跃欲试,想要创建一个自己的机器人?你会如何利用这些知识去创造一个有趣且实用的机器人呢?--GPT 4

C# .NET Core Aiursoft Kahla Bot Kahla.SDK Kahla App Console App

Creating a Model for an existing database in Entity Framework Core (DB First)

本文详细介绍了如何在Entity Framework Core中为现有数据库(如SQL Server和MySQL)创建模型(数据库优先)。首先,安装EF(dotnet-ef)工具和相关依赖项。然后,为现有的SQL Server数据库创建一个干净的.NET项目,并使用`dotnet ef dbcontext scaffold`命令反向生成数据库的模型。在命令中,需要填写正确的数据库连接字符串。此外,还可以通过参数`-t TableNameOrViewName`来只反向生成特定表或视图的模型。 对于现有的MySQL数据库,操作步骤类似,可以参考MySQL官方文档中的示例。需要注意的是,使用MySQL时务必使用.NET 5.0,否则可能会出现问题。在完成反向生成后,可以根据需要升级项目。 请注意,在创建模型后,每次更改模型时都需要使用迁移命令来保持数据库与模型的同步。本文提供的方法和示例能帮助你快速地为现有数据库创建模型,从而更好地利用Entity Framework Core进行数据操作。那么,你是否已经准备好尝试这些方法来为你的数据库项目创建模型呢?--GPT 4

C# Entity Framework SQL Server Database Entity Framework Core LINQ

Sync data to database with Entity-Framework Core

本篇博客介绍了如何使用Entity-Framework Core同步数据到数据库。通常,我们可以简单地使用`_dbContext.MyDbSet.Add(myObject)`将数据添加到数据库。但在某些情况下,数据库中可能已经存在一些数据,我们需要删除过时的数据并尝试添加缺失的数据。 文章通过一个具体的例子展示了如何实现数据同步:假设我们有一组数字`1, 1, 2, 2, 3, 3`,而数据库中的数据为`1, 1, 1, 5`。我们需要将数据库中的数据更新为我们期望的数据,即删除第一个`1`和`5`,然后插入`2, 2, 3, 3`。这个过程被称为`DbSet.Sync()`。 首先,我们需要在内存中声明我们需要的数据源模型,然后声明一个新的接口`ISyncable<T>`,并实现该接口。这样可以使数据库源可以映射到实体。接下来,我们需要编写一些扩展方法,允许同步数据。具体实现过程可以参考博客中的示例代码。 最后,在完成上述步骤后,你可以简单地同步你的数据。例如,我们可以使用以下代码将数据同步到数据库: ```csharp var targetCollection = (new int[] { 1, 1, 2, 2, 3, 3 }) // The data you want to sync to database. .Select(t => new MyDataSourceNumber { ValueInMemory = t }) .ToArray(); _dbContext.Numbers.Sync(targetCollection); await _dbContext.SaveChangesAsync(); ``` 使用`Sync`方法,你无需关心具体的过程。它会自动删除过时的数据,并将数据库中的数据更新为你输入的数据,从而实现最小化的数据变更。例如,如果你现有的数据是`2, 3, 4`,它将删除数据`4`并将`1, 1, 2, 3`插入到数据库中。 那么,如何确保我们的数据同步过程更加高效和准确呢?在实际应用中,我们可能需要考虑更多的因素和场景,以满足不同的需求。--GPT 4

C# Entity Framework Database Data Sync

C#获取腾讯云直播的推流地址和观看地址

本文主要讲述了如何在C#中获取腾讯云直播的推流地址和观看地址。由于腾讯云官方只提供了Java和PHP的代码示例,作者首先研究了Java代码中txTime参数的含义,发现其实际上是从1970年到现在的总秒数。接下来,作者通过计算MD5、拼接字符串和转换十六进制等操作,使用C#实现了获取安全URL的功能。 在代码实现中,首先定义了一些常量,包括腾讯云直播的推流域名、播放域名、密钥等。然后,通过GetSafeUrl方法计算安全URL,其中涉及到将日期时间转换为Unix时间戳、计算MD5等操作。最后,将推流地址、观看地址等信息输出到控制台。 通过本文的介绍,读者可以了解到如何在C#环境下实现获取腾讯云直播的推流地址和观看地址的功能,从而在实际项目中实现对接腾讯云直播的需求。那么,除了腾讯云直播,还有哪些其他直播平台可以实现类似功能呢?如何选择适合自己项目的直播解决方案?希望读者在阅读本文后,能够对这些问题有所启发。--GPT 4

C# .NET Core Tencent Cloud Live Streaming China

Get an ideal flight simulator free based on X-Plane 11 (Free plugins)

本文介绍了一款基于X-Plane 11的免费飞行模拟器,以及一系列免费插件,帮助玩家获得更加真实的飞行体验。首先,文章推荐了Zibo 737飞机模型,该模型具有高度真实的飞行性能和系统。接下来,文章介绍了一系列免费插件,包括AviTab、Terrain Radar、BetterPushBack、HeadShake camera plugin、XTouchDownRecorder、Airport Navigator、Xsquawkbox和X-RASS。这些插件分别提供了平板电脑式的航图显示、地形雷达功能、自动推出系统、摄像头抖动效果、着陆评分记录、机场导航、在线飞行模拟网络和跑道警告系统等功能。通过这些插件,玩家可以获得更加真实、细腻的飞行体验。那么,这些插件是否能满足您对飞行模拟器的需求呢?快来一探究竟吧!--GPT 4

X-Plane Flight simulation Flight Plugins Plane Configuration Free

Tips to get better performance for Entity Framework Core

在这篇博客中,我们将探讨如何优化Entity Framework Core的性能。首先,当构建查询时,如果不需要查询中的所有内容,请使用IQueryable编写代码。如果查询已经构建完毕,且所有查询内容都是必要的,请立即将其转换为列表以避免进一步的IO操作。其次,当查询主键时,使用FirstOrDefault替换SingleOrDefault。由于SingleOrDefaultAsync会转换为“top 2”,而FirstOrDefaultAsync会转换为“top 1”,在主键查询中使用FirstOrDefault可以提高性能。 此外,如果不需要保存更改,请考虑添加AsNoTracking以提高查询性能。同时,尽量避免使用Include,因为它会生成复杂的SQL查询。只选择所需的数据,避免编写Include函数。当使用Select时,也可以省略.Include,因为它在这里不会产生任何效果。 最后,避免客户端评估,因为它会使EF从数据库查询所有数据,速度较慢。例如,在处理DateTime或TimeSpan的复杂计算时,先在代码中计算时间,然后构建查询。遵循这些建议,可以有效地提高Entity Framework Core的性能。 在优化Entity Framework Core性能的过程中,你是否遇到过其他问题?尝试过哪些方法来提高查询性能?请在阅读全文后与我们分享您的经验和看法。--GPT 4

Entity Framework SQL Performance Database

Scan all accessible class in C#

在本篇博客中,我们探讨了如何在C#中获取所有可访问的类。虽然通过调用`GetReferencedAssemblies`方法可以轻松获取到所有引用的程序集,但项目引用是递归的。为了获取所有的类,我们需要构建一个引用树并从整个树中读取。 博客提供了一个名为`ScanAssemblies`的方法,该方法接收一个`Assembly`类型的参数,并返回一个包含所有引用程序集的可枚举集合。通过遍历引用的程序集并递归调用`ScanAssemblies`方法,我们可以构建出完整的引用树。 为了获取所有可访问的类,我们需要加载这些程序集。博客给出了一个名为`AllAccessiableClass`的方法,它首先获取入口程序集,然后调用`ScanAssemblies`方法并对返回的程序集集合进行去重。最后,通过`SelectMany`方法获取每个程序集中的类型并将其添加到一个列表中。 在阅读这篇博客后,你将了解如何在C#中获取所有可访问的类并构建引用树。但在实际应用中,还有哪些场景需要获取所有可访问的类呢?如何优化这个过程以提高性能?希望这篇博客能为你提供一些启示,并引导你自己寻找答案。--GPT 4

C# .NET Core Reflection

Use IIS or Azure App Service as a reverse proxy

In this blog post, we explore the process of setting up a reverse proxy using IIS or Azure App Service. Reverse proxies are beneficial for hiding the origin server's identity and improving performance, security, and load balancing. Before configuring the reverse proxy, it's essential to install IIS and the necessary extensions, such as RequestRouter and Rewrite. Once installed, enable the proxy settings in the IIS management tools and create a new reverse proxy rule by configuring domain bindings and HTTPS certificates. Creating a web.config file under the site root path is crucial for adding rules, such as redirecting HTTP traffic to HTTPS and setting up the real reverse proxy logic. The blog post provides a detailed example of setting up a reverse proxy for Aiursoft.IO and a simpler example for Google.com. To further enhance security, the HSTS feature can be enabled by adding specific code to the web.config file. For deploying the reverse proxy server to Azure App Service, simply ...--GPT 4

IIS web.config Reverse Proxy Web Azure App Service Azure

Share view component between different ASP.NET Core web project

在本篇博客中,我们将探讨如何在不同的ASP.NET Core Web项目之间共享视图组件。当C#中的某些逻辑可以在多个项目之间共享时,我们通常会创建一个新的类库项目。但有时我们只想共享一些视图组件,例如,在`Aiursoft`的所有页面中,它们都包含一个`Logout`组件。多次编写这个组件显然是没有意义的。那么我们如何共享它呢? 首先,我们需要创建一个新的`.NET Core`类库项目,并将其命名为`Aiursoft.Pylon`。接下来,确保你的共享类库支持Razor。修改`csproj`文件以添加属性: <AddRazorSupportForMvc>true</AddRazorSupportForMvc> 现在,你的`Aiursoft.Pylon`项目已经支持编写Razor类库了。我们可以开始编写一个新的视图组件。将所有视图组件放在`Views/Shared/Components`文件夹下。要编写视图组件,请参考以下文档: [https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components) 完成视图组件编写后,你的文件夹应如下所示: ![](/image/img-22d1ae24-0e8c-4abd-b970-214b6fe25b45.png) 现在你的视图组件已经完成,可以在多个项目之间共享了。接下来,创建一个引用你的类库的新Web项目。 ![](/image/img-5f7db548-fe96-43da-962d-016ec2904d62.png) 现在我们将从类库中导入所有视图组件到新的Web项目。修改`_ViewImports.cshtml`以添加类似如下的命名空间: ![](/image/img-1cf766d4-bdb7-4f73-bf12-03732a5c7286.png) 现在你可以在视图中使用共享的视图组件了。如下所示: ![](/image/img-64ede323-6c78-4d7f-833c-cca2bcd60228.png) 如果你的代码以深绿色显示,那么一切正常,你的视图组件可以成...--GPT 4

ASP.NET Core C# class library View component

One command to pull all git repositories

在这篇博客中,我们将探讨如何用一条简单的命令来更新所有的git仓库。如果你的文件夹结构类似于文章中所示,那么这个方法将非常适用。首先,在工作空间文件夹下创建一个名为`pull.sh`的新文件,并将文章中的代码复制到文件中。接下来,执行一个命令以允许运行该脚本。完成这些操作后,每次启动计算机时,只需运行`./pull.sh`,所有仓库便会自动更新。 这个方法不仅节省了时间,还让你在开始工作前确保所有仓库都是最新的。那么,你还在等什么呢?尝试这个方法,让你的工作流程变得更加高效。最后,你是否还有其他类似的技巧来简化日常任务?--GPT 4

bash git