Alby's blog

世上没有巧合,只有巧合的假象。

0%

一、概述

ASP.NET Core 提供了基于角色( Role )、声明( Chaim ) 和策略 ( Policy ) 等的授权方式。在实际应用中,可能采用部门( Department , 本文采用用户组 Group )、职位 ( 可继续沿用 Role )、权限( Permission )的方式进行授权。要达到这个目的,仅仅通过自定义 IAuthorizationPolicyProvider 是不行的。本文通过自定义 IApplicationModelProvide 进行扩展。

阅读全文 »

一、概述

通常我们会在 Startup 类通过 void ConfigureServices(IServiceCollection services) 配置应用的服务。常见的形如 AddXXX 的方法,实际上调用的都是 IServiceCollection 或直接说是 ServiceCollectionAddSingletonAddTransientAddScoped等方法。调用ApplicationBuilderRequestDelegate Build() 方法会调用 IServiceCollection 的扩展方法 BuildServiceProvider 会创建并返回一个 ServiceProvider 对象。
还会在 Startup 类通过 void Configure(IApplicationBuilder app, IHostingEnvironment env) 配置请求管道,在该方法内进行的主要操作是添加中间件。常见的形如 UseMiddlewareUseXXX 的方法,实际上调用的都是 IApplicationBuilder 或直接说是 ApplicationBuilderIApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware) 方法,Use 方法并不是马上将中间件配置入请求管道,而是将“实例化中间件的方式”保存到 ApplicationBuilder 内部一个列表的操作。调用ApplicationBuilderRequestDelegate Build() 方法会实例化中间件并把各个中间件串联起来。

阅读全文 »

一、概述

编码从数据结构上看,是将 AVFrame 转换为 AVPacket 的过程。如何构建 AVFrame,以及获取到 AVPacket 后续要进行什么操作,严格来说并不是编码的步骤。
x264 是作为一个插件编译入 FFmpeg 的。 FFmpeg 对 VideoToolBox 也做了适配。单独使用 x264VideoToolBox 也可以进行编码,本文主要关注通过 FFmpeg 相关 API 进行 H.264 编码。

阅读全文 »

一、概述

解码从数据结构上看,是将 AVPacket 转换为 AVFrame 的过程。如何构建 AVPacket,以及获取到 AVFrame 后续要进行什么操作,严格来说并不是解码的步骤。
本文主要关注使用 FFmpeg 的软解 H.264。虽然本文并不涉及 VideoToolBox,但硬解和软解有一些共用的 API,并且软解过程更流畅,所以熟悉软解后再去了解硬解会容易。

阅读全文 »

一、概述

早在2015年8月初,FFmpeg 就已经开始逐步支持 macOS 和 iOS 平台的 VideoToolBox,2017年7月低,FFmpeg 在 example 中新增了一个 hw_decode.c 用于演示对文件的硬解码。以前使用过其软编码(基于 x264 )和软解码,也单独使用 VideoToolBox 进行过硬编码和硬解码。但是距离上次使用 FFmpeg 后其 API 发生了一些改变,VideoToolBox 也支持 HEVC 了,所以重新研究一次。

阅读全文 »

一、概述

请勿将生成器函数( generator function )和生成器( generator )混淆。其次生成器函数和普通函数有所区别,《Fluent Python》( 《流畅的 Python》 )作者 Luciano Ramalho 甚至觉得应该新增一个 gen 关键字来区分两者。

本文未将函数和方法加以区分。

阅读全文 »

一、概述

插入、更新、删除和移动操作总是保证结构完好;查询使用一条 SELECT 语句即可;查询节点的所有父节点使用 CET 进行递归查询。其中最复杂的部分是更新和移动。

阅读全文 »