首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

CakePHP 4.4.3 发布,PHP 快速开发框架

CakePHP 是一个运用了诸如 ActiveRecord、Association Data Mapping、Front Controller 和 MVC(model–view–controller) 等著名设计模式的开源 Web 框架。CakePHP 用 PHP 编写,以 Ruby on Rails 的概念为模型,并在 MIT 许可下进行分发。 CakePHP 4.4.3 已发布,这是 4.4 分支的维护版本,修复了几个社区报告的问题 修复了文件断言方法中对 null 的潜在方法调用。 改进了与 PHP 8.2 的兼容性。 如果表配置了选项然后被模拟,TableLocator::get() 不再抛出错误。 更新了 CI 配置以使用 Windows 2022 映像。 修复了未正确设置 umask 的 Folder::create() 中的回归。 与 FileEngine 一起使用的缓存键现在是 URL 编码的。 这会将缓存键中的有效字符与其他引擎对齐。 对于以前使用字母数字范围之外的字符的应用程序,它可能会导致缓存未命中。 删除了多余的类类型检查。 修复了 ResultSet 索引在启用 xdebug 时因循环内抛出的异常而发生变异。 TableLocator 现在可以更好地处理通过命名空间类名获取表。 不推荐使用 Database\Query 中未使用的属性。 更新公告:https://github.com/cakephp/cakephp/releases/tag/4.4.3

优秀的个人博客,低调大师

CakePHP 4.4.0 发布,PHP 快速开发框架

CakePHP 是一个运用了诸如 ActiveRecord、Association Data Mapping、Front Controller 和 MVC(model–view–controller) 等著名设计模式的开源 Web 框架。CakePHP 用 PHP 编写,以 Ruby on Rails 的概念为模型,并在 MIT 许可下进行分发。 4.4.0 是新的稳定版本,对 CakePHP 进行了大量改进,主要集中在以下方面: 有一个新的错误和异常处理框架,更容易扩展 RedisEngine支持使用deleteAsync()。 RedisEngine 现在支持使用 deleteAsync() 进行快速删除。 bin/cake 路线现在突出显示路线模板中的碰撞。 添加了Controller::viewClasses(), 此方法使控制器能够控制可以响应的内容类型。 视图类可以定义静态方法 contentType() 来参与内容类型协商。 添加了 Query::expr() ,作为 Query::newExpr() 的替代方法。 QueryExpression::case() 构建器现在支持 then() 和 else() 的表达式推断类型。 BaseApplication::handle() 现在将 $request 添加到服务容器中。 HttpsEnforcerMiddleware 现在有一个 hsts 选项,允许配置 Strict-Transport-Security 标头。 TreeBehavior 支持在删除节点时触发 ORM 回调。 更新公告:https://github.com/cakephp/cakephp/releases/tag/4.4.0

优秀的个人博客,低调大师

Bali 3.1.3 发布,支持事件驱动开发

这次的版本更新在原来已经支持的 HTTP、RPC 上增加了事件(event)支持。同时,软件的维护层面也增加了 CI 自动化测试的 Workflow。 更新内容: 1. 事件的定义 Event 基类 2. 事件的处理方法及事件处理独立使用一个进程 3. 文档全部使用 Mkdocs 迁移 事件的定义方法(代码示例) from bali.events import Event class HelloEvent(Event): # The __amqp_name__ here defaults to default, # which means that the AMQP configuration using default is used __amqp_name__ = 'default' def dict(self, *args, **kwargs): # Rewrite dict to allow events to be transferred in the AMQP component in the way you define. # If dict is not rewritten, the message will be {'type': self.type, 'payload': self.payload} return {'type': self.type, **self.payload} 事件的 publish 方法(代码示例) dispatch(HelloEvent(type='hello', payload={'aaa':'bbb'})) 事件的 handle 方法(代码示例) class EventHandler: @event_handler('hello') def handle_event(event): print(event) 事件 handle 的进程启动 python main.py --event

优秀的个人博客,低调大师

CakePHP 4.3.8 发布,PHP 快速开发框架

CakePHP 是一个运用了诸如 ActiveRecord、Association Data Mapping、Front Controller 和 MVC(model–view–controller) 等著名设计模式的开源 Web 框架。CakePHP 用 PHP 编写,以 Ruby on Rails 的概念为模型,并在 MIT 许可下进行分发。 CakePHP 4.3.8 正式发布,这是 4.3 分支的一个维护版本,修复了几个社区报告的问题,具体更新内容如下: 错误修正 改进了文档块中的示例 修正了 BelongsToMany 中缺失的 bindingKey 用法 修正了当 cookie 数据包含无效的 base64 编码数据时来自 CsrfProtectionMiddleware 的 TypeError 改进了对 cookie 解析中数字键的处理。 Fixed missing usage of bindingKey in associations generated by BelongsToMany. 更多详情可查看:https://github.com/cakephp/cakephp/releases/tag/4.3.8

优秀的个人博客,低调大师

Databend 内置标量函数开发指南

原文:https://databend.rs/development/how-to-write-scalar-functions/ 什么是标量函数?¶ 标量函数(有时被称为用户自定义函数/UDF)为每条记录返回一个单一的值,而不是作为一个结果集,并且可以在查询或SET语句中的大多数地方使用,除了FROM子句。 One to One Mapping execution ┌─────┐ ┌──────┐ │ a │ │ x │ ├─────┤ ├──────┤ │ b │ │ y │ ├─────┤ ScalarFunction ├──────┤ │ c │ │ z │ ├─────┼────────────────────►──────┤ │ d │ Exec │ u │ ├─────┤ ├──────┤ │ e │ │ v │ ├─────┤ ├──────┤ │ f │ │ w │ └─────┘ └──────┘ trait介绍 ¶ 所有的标量函数都实现了 Function trait,我们把这些函数注册到一个全局静态的FunctionFactory 中,这个工厂只是一个索引map,key: 标量函数名(function name)。 ⚠️ Databend 中的函数名称是不区分大小写的。 pub trait Function: fmt::Display + Sync + Send + DynClone { fn name(&self) -> &str; fn num_arguments(&self) -> usize { 0 } // (1, 2) means we only accept [1, 2] arguments // None means it's not variadic function fn variadic_arguments(&self) -> Option<(usize, usize)> { None } // return monotonicity node, should always return MonotonicityNode::Function fn get_monotonicity(&self, _args: &[MonotonicityNode]) -> Result<MonotonicityNode> { Ok(MonotonicityNode::Function(Monotonicity::default(), None)) } fn return_type(&self, args: &[DataType]) -> Result<DataType>; fn nullable(&self, _input_schema: &DataSchema) -> Result<bool>; fn eval(&self, columns: &DataColumnsWithField, _input_rows: usize) -> Result<DataColumn>; } 如何理解? 剖析一下上述 trait 中函数的意义: name ⇒ 表示这个函数的名称,如 log、sign。不过有时我们应该将名称存储在函数内部,因为不同的名称可能共享同一个函数,如 pow 和 power,我们可以将 power 作为 pow 的别名(同义词)函数。 num_arguments ⇒ 表示 编写的标量函数 可以接受多少个参数。 variadic_arguments ⇒ 标记该函数可以接受可变参数。例如,round() 接受一个或两个函数,它的范围是 [1,2],我们在这里使用封闭区间。 get_monotonicity ⇒ 表示这个函数的单调性,标明它可以用来优化执行。 return_type ⇒ 表示该函数的返回类型,我们也可以在该函数中校验 args 。 nullable ⇒ 表示是否可以返回一个可空字段的列(目前来说,返回true/false即可)。 eval ⇒ eval是执行 ScalarFunction 的主函数: columns → 输入列 input_rows → 输入行数 我们将在下面解释如何编写eval函数。 前置知识 ¶ 在编写eval函数之前,你可能需要以下这些知识。 数据类型 在 Databend 中数据类型分为:逻辑类型和物理类型两个形态。 逻辑数据类型是我们在Databend中使用的数据类型,物理数据类型是我们在执行/计算引擎中使用的数据类型。例如 Date32,它是一种逻辑数据类型,但是它的物理类型是 Int32,所以它的列由 DFInt32Array 表示。 内部有几种方式返回上述的两种数据类型: 通过 DataField 的 data_type() 获取逻辑数据类型 通过 DataColumn 的data_type() 获取物理数据类型 DataColumnsWithField 有 data_type(),该函数返回逻辑数据类型 内存布局 Databend 的内存布局是基于 Arrow 的。关于 Arrow 的内存布局,你可以在[这里]了解。 就拿原始类型 int32 组成的数组举个例。[1, null, 2, 4, 8] 看起来像这样: * Length: 5, Null count: 1 * Validity bitmap buffer: |Byte 0 (validity bitmap) | Bytes 1-63 | |-------------------------|-----------------------| | 00011101 | 0 (padding) | * Value Buffer: |Bytes 0-3 | Bytes 4-7 | Bytes 8-11 | Bytes 12-15 | Bytes 16-19 | Bytes 20-63 | |------------|-------------|-------------|-------------|-------------|-------------| | 1 | unspecified | 2 | 4 | 8 | unspecified | 常量列 有时候column在block中是常量,例如:select 3 from table, column: 3 恒为3,所以我们可以用一个常量列来表示它。这在计算期间对于节省内存非常有用。 因此,Databend 的 DataColumn 表示为: pub enum DataColumn { // Array of values. Series is wrap of arrow's array Array(Series), // A Single value. Constant(DataValue, usize), } 一些指导方针 ¶ 列转换 为了执行标量函数,我们肯定需要对参数的输入列进行遍历。由于我们已经在 return_type 函数中校验了数据类型,所以我们可以使用 i32 函数将输入列强制转换为特定类型的列,比如DFInt32Array 。 常量列 我们前面提到:应该注意 常量列匹配情况,以提高内存使用。 列迭代和有效位图的结合 当我们需要迭代列,我们可以使用 column.iter() 来生成一个迭代器,迭代项为 Option<T>,None 说明 null。不过这种办法比较低效,因为我们每次在循环内迭代列时都需要检查空值,这会污染CPU缓存。 根据 Arrow 的内存布局,我们可以直接利用 原始列的有效性位图 来表示空值。所以我们有ArrayApply trait 来协助你迭代列。如果有两个zip迭代器,我们可以使用 binary 函数来合并两列的有效性位图: ArrayApply let array: DFUInt8Array = self.apply_cast_numeric(|a| { AsPrimitive::<u8>::as_(a - (a / rhs) * rhs) }); binary binary(x_series.f64()?, y_series.f64()?, |x, y| x.pow(y)) Nullable 检查 有时 Nullable 很令人讨厌,但在大多数情况下我们可以接受 DataType::Null 参数。 隐式转换 Databend 可以接受隐式转换,例如:pow('3', 2), sign('1232') 我们可以使用cast_with_type 将参数转换到特定的列。 参考 ¶ 正如你在上面所看到的, 在 Databend 中添加一个新的标量函数并不像你想象的那么难。不过在你开始添加之前, 也可以参考其他标量函数的例子, 如 sign, expr, tan, atan 。 测试 ¶ 为了成为一名优秀的工程师,不要忘记测试你的代码,请在你完成新的标量函数后添加单元测试和无状态测试。 总结 ¶ 我们欢迎所有社区用户为 Databend 贡献更强大的功能。如果您发现任何问题,也请随时在GitHub上 给我们提一个issue,我们会尽最大努力帮助你。 本文由博客一文多发平台 OpenWrite 发布!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册