首页 文章 精选 留言 我的

精选列表

搜索[开源生态],共10000篇文章
优秀的个人博客,低调大师

开源无代码/低代码平台

原文链接:https://www.nocobase.com/cn/blog/nocobase-2-0 NocoBase 1.0-alpha 于 2024 年 4 月 28 日发布,同时我们也正式开启了商业化的服务。在过去这 10 几个月里,我们收到了成百上千的用户的反馈和交流,收到了数十位来自全球各地开发者贡献的代码,也收到了 50 多个国家、数百家企业的商业订单。 感谢每一位用户,每一位贡献者 ,以及每一位付费客户。 过去 6 个月,我们在不断迭代升级 1.x 版本的同时,也在投入很多时间思考、讨论、开发下一代 NocoBase。现在,是时候正式向你介绍 NocoBase 2.0-alpha! AI 员工 在过去 10 几个月里,AI 发展日新月异,大模型在很多场景中都展现出不俗甚至惊人的能力。作为 AI 的重度用户,我们将 AI 带进了 NocoBase 2.0,并以 AI 员工的方式为你服务。 NocoBase 中的 AI 员工不是聊天机器人,也不是孤立的 Agent,而是无缝集成在你的业务系统中,理解业务上下文、直接执行任务的智能同事。 他们出现在你需要他们的任何地方,表格旁边,表单旁边,这样你就可以随手唤醒它 他们可以帮你总结邮件、分析数据、整理杂乱的内容并自动填写表单、设计数据模型、编写 JavaScript 代码 他们会自动获取数据作为上下文,也能自动获取页面结构作为上下文 他们每个人都具备独特的技能、工具、知识库 你可以创建无限个 AI 员工,组成你的 AI 团队 详细了解 AI 员工 开通 Demo,亲自体验 全新的 2.0 页面 NocoBase 虽然采用插件化架构,但是在 1.x 时代,对于界面上一些灵活多变的交互、样式、数据请求和展示、逻辑判断等需求,NocoBase 很难以低成本满足。 我们在 NocoBase 2.0 中采用全新的方案重构了页面。这些新特性对于解决个性化的需求将会很有帮助: RUNJS RunJS 提供了一种轻量级的扩展方式,适合快速在界面上实现个性化逻辑和样式,而无需创建插件或修改源码。 通过它,你可以直接在界面设计器中输入 JavaScript 代码,实现: 自定义渲染内容(字段、区块、列、项等) 自定义交互逻辑(按钮点击、事件联动) 结合上下文数据,实现动态行为 这些地方都支持 RUNJS JS block JS action JS field JS item 联动规则 事件流 详细了解 RUNJS 事件流 在 NocoBase 1.x 中,我们提供了联动规则用于在界面中编排一定的逻辑,但它的能力有限,仅限在一个区块内部实现少量的编排。 NocoBase 2.0 中新增了事件流功能,使前端逻辑编排能力大大增强。 事件流由以下部分组成: 触发事件,比如渲染前、点击、表单值变动 触发条件 动作步骤,比如显示通知、刷新目标区块、执行 JavaScript 栅格布局 在 NocoBase 1.x 中,对区块、字段拖拽布局时,每个元素的宽度是自由拖拽且必须充满整行宽度的,这在很多时候并不方便做出精确、美观的布局。 NocoBase 2.0 中采用了全新的栅格布局,每个元素都可以对齐格栅。 引用和复制区块、弹窗 在 NocoBase 1.x 中虽然提供了区块模板、复制和引用的功能,但是由于逻辑复杂,存在不少 bug,并且灵活性不高,而且只能引用区块而不能引用整个弹窗。 在 NocoBase 2.0 中,我们用全新的方式实现了区块和弹窗的引用和复制,这极大增加了灵活性,减小配置工作量。 详细了解引用和复制区块 详细了解引用弹窗 提升区块体验 在 NocoBase 2.0 的区块中,我们根据用户反馈,增加了很多细节提升。比如表格区块中支持在单元格内直接编辑数据,而无需打开弹窗。 更多的改进还在持续开发中。 更高性能 NocoBase 2.0 的页面带来比 1.x 更高的前端性能。 FlowEngine 2.0 页面的重构基于全新的前端无代码、低代码开发引擎 FlowEngine。它将模型(Model)与流(Flow)结合,简化前端逻辑、提升复用性与可维护性;同时,借助 Flow 的可配置能力,为前端组件和业务逻辑赋予无代码化的配置与编排能力。 在 1.x 中,开发插件的前端部分经常遇到繁琐甚至很难处理的问题。有了 FlowEngine,这些问题将大大简化。 详细了解 FlowEngine 多应用和多空间 1.x 中提供了基础的多应用功能,所有应用共享进程且无法监控每个应用的资源消耗情况,也不能进行应用的管理和切换。 在 NocoBase 2.0 中提供了全新的多应用和多空间插件。 多应用插件(仍在开发中)允许动态创建和管理多个独立应用,而无需单独部署。每个子应用都是完全独立的实例,拥有自己的数据库、插件和配置。多应用运行以独立进程或共享进程运行,可以在父应用中监控和管理各个子应用的资源消耗、状态。新的多应用插件适用于多租户等场景。 多空间插件允许在单一应用实例中,通过逻辑隔离实现多个独立的数据空间,适用于多门店或工厂等场景,即:业务流程和系统配置高度一致,例如统一的库存管理、生产计划、销售策略和报表模板,但需要保证每个业务单元的数据互不干扰。 详细了解 多空间 全新的数据可视化 1.x 中提供了基础的数据可视化插件,基于 Ant Design Charts 和 Echarts 实现最基本的数据可视化展示,但对于复杂图表、个性化交互、数据联动的场景却无能为力。 NocoBase 2.0 中基于 Echarts 提供了全新的数据可视化插件,支持可视化配置模式和 SQL、JSON 模式,支持事件,可以方便地满足复杂图表、多图表联动、数据下钻等场景。 不需要担心 SQL 和 JSON 过于复杂,有 AI 员工 Nathan 帮你。 详细了解 数据可视化 同步主数据库结构,修改字段类型 在 1.x 中,主数据库中的表格字段尽可以通过 NocoBase 的数据源管理界面创建,且创建后不可更改类型。 在 NocoBase 2.0 中,可以同步主数据库已有的表格字段,并且可以更改字段的类型。这意味着你可以使用已有数据结构的数据库作为主数据库。 其他插件 数据历史记录 历史记录插件用于追踪数据的变更过程,自动保存新增、修改、删除操作的快照与差异记录,帮助用户快速回溯数据变化、审计操作行为。 详细了解 数据历史记录 表单草稿 表单草稿插件支持在用户填写表单时自动保存草稿。 全新的邮件管理 邮件管理插件使用 FlowEngine 进行了重构,使 AI 员工可以无缝参与到邮件的总结、分析、撰写中,同时新增了自动保存草稿等功能。 详细了解 邮件管理 如何升级 从 1.x 升级到 2.0 很简单,只需要按照 手册 正常操作即可。但请注意 NocoBase 2.0 目前为 alpha 版本,请确保你可以接受诸多不稳定。 得益于 NocoBase 的界面与数据解耦的架构,升级之后,在 1.x 中搭建的应用不受任何影响。在新建页面的选项中,分为 v1 和 v2 两种页面,新建 v2 页面即可使用 NocoBase 2.0 的新功能。

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

开源无代码/低代码平台 NocoBase v1.9.0 正式版发布!

原文链接:https://www.nocobase.com/cn/blog/nocobase-1-9-0 新特性 字段验证规则 支持为字段配置多种验证规则(如必填、格式、长度、范围、正则表达式等),在表单提交时自动校验输入数据,确保数据准确性一致性。验证规可在字段设置中灵活配置。 参考文档:字段验证 表格区块支持添加「列设置」 允许用户在不进入编辑模式的情况下调整列顺序、可见性和固定位置,从而使数据显示更加灵活和用户友好 审批新增「数据保存前」触发模式 审批现在支持“数据保存前”触发模式——启用后,审批发起时不会存储数据,只有在审批通过后才会保存数据。 审批触发器中开放审批单据编号变量以供使用 公开了 Approval ID 变量,允许在工作流其他节点中引用,以实现更灵活的配置和数据跟踪。 [异步任务管理器] 支持通过环境变量和队列进行异步任务服务拆分 新增服务拆分机制,支持通过 WORKER_MODE 环境变量将工作流、异步任务等服务独立运行,实现多节点部署与性能优化。 参考文档:服务拆分 新增用于处理队列消息的事件队列 增加了一个专用的事件队列来处理系统队列消息,提高了异步任务处理能力和可靠性。 参考文档:集群模式:消息队列 为应用增加优雅停机的生命周期处理 引入了优雅关闭处理机制,在应用进程收到 SIGTERM / SIGINT 信号时,开始处理关闭流程,以避免部分进行中的数据操作造成的问题。 优化 系统表自增 ID 改为 53 位类雪花 ID 将主键为自增 ID 且不具备唯一标识的系统表的 ID 修改为 53 位的类雪花算法 ID 支持查看和继续执行已停用工作流中的人工待办任务 人工待办的区块列表不再限制已停用工作流的待办任务展示,并允许对待办继续提交。 邮件管理器 邮件数据支持重新同步 允许调整插入到邮件编辑器中的图片大小 富文本编辑器支持软换行,优化邮件排版体验。 优化邮件列表性能,操作更流畅。 工作流模块优化 优化了 Workflow 模块中队列执行相关的查询性能,使用了分离字段与索引来提升数据检索效率。

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

国人自研开源隐私计算框架SecretFlow,深度拆解框架及使用【开发者必看】

打开链接点亮社区Star,照亮技术的前进之路。 每一个点赞,都是社区技术大佬前进的动力 Github 地址: https://github.com/secretflow/secretflow 一、"隐语"架构设计全貌 1.隐语框架设计思想 隐私计算是一个新兴的跨学科领域,涉及密码学、机器学习、数据库、硬件等多个领域。根据过去几年的实践经验,我们发现 隐私计算技术方向多样,不同场景下有其各自更为合适的技术解决方案 隐私计算学习曲线很高,非隐私计算背景的用户使用困难 隐私计算涉及领域众多,需要领域专家共同协作 隐语的设计目标是使得数据科学家和机器学习开发者可以非常容易地使用隐私计算技术进行数据分析和机器学习建模,而无需了解底层技术细节。 为达到这个目标,**隐语提供了一层设备抽象,**将多方安全计算(MPC)、同态加密(HE)和可信执行环境(TEE)等隐私计算技术抽象为密文设备, 将单方计算抽象为明文设备。 基于这层抽象,数据分析和机器学习工作流可以表示为一张计算图,其中节点表示某个设备上的计算,边表示设备之间的数据流动,不同类型设备之间的数据流动会自动进行协议转换。在这一点上,隐语借鉴了主流的深度学习框架,后者将神经网络表示为一张由设备上的算子和设备间的张量流动构成的计算图。 隐语框架围绕开放这一核心思想,提供了不同层次的设计抽象,希望为不同类型的开发者都提供良好的开发体验。 在设备层,隐语提供了良好的设备接口和协议接口,支持更多的设备和协议插拔式的接入,我们希望与密码学、可信硬件、硬件加速等领域专家通力合作,不断扩展密态计算的类型和功能,不断提升协议的安全性和计算性能。 同时,隐语提供了良好的设备接口,第三方隐私计算协议可作为设备插拔式接入。在算法层,为机器学习提供了灵活的编程接口,算法开发者可以很容易定义自己的算法。 2.架构分层总览 隐语总体架构自底向上一共分为五层: 资源管理层: 主要承担了两方面的职责。第一是面向业务交付团队,可以屏蔽不同机构底层基础设施的差异,降低业务交付团队的部署运维成本。另一方面,通过对不同机构的资源进行集中式管理,构建出一个高效协作的数据协同网络。 明密文计算设备与原语层: 提供了统一的可编程设备抽象,将多方安全计算(MPC)、同态加密(HE)、可信硬件(TEE)等隐私计算技术抽象为密态设备,将单方本地计算抽象为明文设备。同时,提供了一些不适合作为设备抽象的基础算法,如差分隐私(DP)、安全聚合(Secure Aggregation)等。 明密文混合调度层: 提供了统一的设备调度抽象,将上层算法描述为一张有向无环图,其中节点表示某个设备上的计算,边表示设备之间的数据流动,即逻辑计算图。逻辑计算图由分布式框架进一步拆分并调度至物理节点。 AI & BI 隐私算法层: 这一层的目的是屏蔽掉隐私计算技术细节,但保留隐私计算的概念,其目的是降低隐私计算算法的开发门槛,提升开发效率。 有隐私计算算法开发诉求的同学,可以根据自身场景和业务的特点,设计出一些特化的隐私计算算法,来满足自身业务和场景对安全性、计算性能和计算精度的平衡。 在这一层上,隐语本身也会提供一些通用的算法能力,比如MPC的LR/XGB/NN,联邦学习算法,SQL能力等。 用户界面层: 隐语的目标并不是做一个端到端的产品,而是为了让不同的业务都能够通过快速集成隐语而具备全面的隐私计算能力。因此我们会在最上层去提供一层比较薄的产品API,以及一些SDK,去降低业务方集成隐语的成本。 3.架构细节拆解 设备与原语层 隐语的设备分为物理设备和逻辑设备,其中,物理设备是隐私计算各个参与方的物理机器,逻辑设备则由一个或多个物理设备构成。 逻辑设备支持一组 特定的计算算子(Device Ops),有自己特定的数据表示(Device Object)。逻辑设备分为明文和密文两种类型,前者执行单方本地计算,后者执行多方参与的隐私计算。 逻辑设备的运行时负责内存管理、数据传输、算子调度等职责,运行在一个或多个物理设备上。 逻辑设备和物理设备不是一对一的关系,一个物理设备可能同时属于多个逻辑设备。在同一组物理设备上,可以根据不同的隐私协议和参与组合虚拟出不同的逻辑设备。 下表是隐语目前暂定支持的设备列表: 设备 类型 运行时 算子 协议 前端 状态 PYU 明文 Python Interpreter — — Python Release SPU 密文 SPU VM PSI, XLA HLO SPDZ-2k, ABY3 JAX, TensorFlow, PyTorch Alpha HEU 密文 HEU Runtime Add, XLA HLO Paillier, OU, TFHE Numpy, JAX Alpha TEE 密文 TEE Runtime XLA HLO Intel SGX JAX, TensorFlow, PyTorch WIP 可编程性 逻辑设备具备可编程性,即用户可以在设备上自定义计算逻辑,每个设备对用户提供了协议无关的编程接口。**在一个设备上,用户可以定义从简单的矩阵运算, 到完整的深度模型训练。**当然,这一切取决于设备提供的计算能力。 对于明文设备PYU,它的前端为python,用户可以通过@device将一段预定义python函数调度至其上执行。 对于密文设备SPU、HEU、TEE,它们的前端可以是任何支持XLA 的框架, 如JAX, TensorFlow,PyTorch等。同样的,用户也可以通过@device将基于这些前端自定义的函数调度至指定的设备执行。 import jax.numpy as jnp dev = Device() # maybe PYU, SPU, HEU, TEE @device(dev) def selu(x, alpha=1.67, lmbda=1.05): return lmbda * jnp.where(x > 0, x, alpha * jnp.exp(x) - alpha) res = selu(x) # res is a DeviceObject 用户自定义函数首先转换成XLA HLO Computation,由XLA进行设备无关的代码优化和分析,并发往后端设备。后端设备进一步执行代码优化和分析,并生成最终 的可执行代码。 可执行代码或由设备的虚拟机解释执行(SPU, HEU),或由硬件直接执行(TEE)。使用XLA HLO作为IR,使得我们可以复用XLA前端和设备无关 代码优化,同时使得后端实现更加简洁干净。 对于密文设备(半同态)HEU,它仅支持一组有限的计算,因此提供了一组预定义算子如__add__,__mul__等,用户不能通过@device进行自定义编程。 x, y = HEUObject(), PYUObject() z = x + y # add z = x * y # mul z = x @ y # matmul 协议转换 用户在逻辑设备上进行编程,构建逻辑计算图,**其节点表示设备上的一段函数或算子,边表示设备对象的流动。**逻辑计算图被设备进一步分割为子图,两个子图间的 边表示跨设备的对象流动,此时需要进行协议转换。设备对象的DeviceObject.to接口用于转换至目标设备对象,任何新增的设备都应该提供相应的转换函数并 插入对象转换表中。 下表是各个逻辑设备对象的转换表: PYU SPU HEU TEE PYU share encrypt encrypt SPU reconstruct encrypt+add reconstruct+encrypt HEU decrypt minus+decrypt decrypt+encrypt TEE decrypt decrypt+share decrypt+encrypt 分布式引擎 用户基于设备构建了一张逻辑计算图,那么我们如何执行这张计算图?由于逻辑设备映射到一个或多个物理设备,因此我们需要将逻辑设备上的算子正确调度到其对应的物理设备,同时处理好这些物理设备间的数据传输关系。毫无疑问,我们需要一个分布式图执行引擎来解决这些问题。 那么我们需要一个怎样的分布式图执行引擎?以下是隐语对它的要求 细粒度的异构计算:在一张逻辑计算图中,具有不同粒度的计算任务,既有简单的数据处理(秒级),也有复杂的多方训练(几个小时至几十小时)。同时,物理节点具有不同的硬件环境,CPU, GPU, TEE, FPGA等。 灵活的计算模型:在水平、垂直场景下,针对数据处理和模型训练等不同工作流,支持多种并行模型,如数据并行、模型并行、混合并行。 动态执行:在联邦学习场景下,不同机构的数据规模、带宽延迟、机器性能可能有较大差异,这导致同步模式的效率受限于最慢的工作节点。因此,我们希望支持 异步训练模式,这要求图执行引擎具有动态执行能力。 隐语针对隐私计算场景,已经对框架进行了一些安全加固工作:通过身份认证、代码预装、代码存证等手段对框架做了整体加固。 未来,还将探索沙箱隔离、访问控制、静态图等机制以进一步提升安全水位。在环境适配方面,为了适配跨机构网络通信的特点,推进了GCS gRPC通信、域名支持、弱网断线处理等相关功能的开发。 AI & BI 隐私算法 这一层的目的是其目的是降低隐私计算算法的开发门槛,提升开发效率。有隐私计算算法开发诉求的同学,可以根据自身场景和业务的特点,设计出一些特化的隐私计算算法,来满足自身业务和场景对安全性、计算性能和计算精度的平衡。 在这一层上,隐语本身也会提供一些通用的算法能力,比如MPC的LR/XGB/NN,联邦学习算法,SQL能力等。 二、"隐语"框架的使用 使用隐语构建隐私计算算法 逻辑设备抽象为算法开发者提供了极大的灵活性, 他们可以像积木一样自由组合这些设备,在设备上自定义计算,从而构建自己的隐私计算算法。 接下来,我们通过一个具体的算法来展示隐语框架的通用编程能力。联邦学习算法联邦机器学习又名联邦学习、联合学习、联盟学习,是一种机器学习框架,能有效帮助多个机构在满足用户隐私保护、数据安全和政府法规的要求下,进行数据使用和机器学习建模。 联邦学习的算法流程如上图所示,大致分为以下四个步骤: 机构节点在本地进行多轮训练,得到模型参数 机构节点使用加密协议,将模型参数上传至聚合节点 聚合节点使用加密协议,对模型参数进行聚合,得到全局模型 机构节点从聚合节点获取最新的全局模型,进入下一轮训练 节点本地训练 机构节点运行在机构本地,隐语提供了一个逻辑设备PYU,执行本地的明文计算。 下面的BaseTFModel定义了本地模型训练逻辑,用户可以选择自己喜好的机器学习框架,如TensorFlow, PyTorch等。 隐语提供了@proxy装饰器,对一个普通的类进行了初始设置,以便后续在逻辑设备上对其实例化。@proxy(PYUObject)表明该类需要在PYU设备上实例化。 @proxy(PYUObject) class BaseTFModel: def train_step(self, weights, cur_steps, train_steps) -> Tuple[np.ndarray, int]: self.model.set_weights(weights) num_sample = 0 for _ in range(train_steps): x, y = next(self.train_set) num_sample += x.shape[0] self.model.fit(x, y) return self.model.get_weights(), num_sample 模型安全聚合 模型聚合对各个机构节点的模型参数进行加权平均,如下面_average所示。隐语逻辑设备的最大特点在于可编程性,用户可以将一段函数调度到多种设备执行,以达到使用不同隐私计算技术的目的。 目前,DeviceAggregator可以支持PYU明文聚合,也可以支持SPU MPC协议聚合,后续我们还将支持TEE, HEU等多种密文设备。 @dataclass class DeviceAggregator(Aggregator): device: Union[PYU, SPU] def average(self, data: List[DeviceObject], axis=0, weights=None): # 2. 机构节点使用加密协议,将模型参数上传至聚合节点 data = [d.to(self.device) for d in data] if isinstance(weights, (list, tuple)): weights = [w.to(self.device) if isinstance(w, DeviceObject) else w for w in weights] def _average(data, axis, weights): return [jnp.average(element, axis=axis, weights=weights) for element in zip(*data)] # 3. 聚合节点使用加密协议,对模型参数进行聚合,得到全局模型 return self.device(_average, static_argnames='axis')(data, axis=axis, weights=weights) 训练流程整合 有了节点本地训练、模型安全聚合,我们就可以将其整合起来形成完整的训练流程。首先,我们在每个PYU设备(代表机构节点)创建BaseTFModel实例。 同时,初始化聚合器,可以是PYU, SPU, TEE, Secure Aggregation。然后,按照上述描述的联邦学习算法流程进行迭代训练。 class FedTFModel: def __init__(self, device_list: List[PYU] = [], model: Callable[[], tf.keras.Model] = None, aggregator=None): # 在每个机构节点(PYU)创建一个BaseTFModel实例 self._workers = {device: BaseTFModel( model, device=device) for device in device_list} # 聚合器,可以是PYU, SPUPPU, TEE, Secure Aggregation self._aggregator = aggregator def fit(self, x: Union[HDataFrame, FedNdarray], y: Union[HDataFrame, FedNdarray], batch_size=32, epochs=1, verbose='auto', callbacks=None, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, validation_freq=1, aggregate_freq=1): self.handle_data(train_x, train_y, batch_size=batch_size, shuffle=shuffle, epochs=epochs) # 初始化模型参数 current_weights = { device: worker.get_weights() for device, worker in self._workers.items()} for epoch in range(epochs): for step in range(0, self.steps_per_epoch, aggregate_freq): weights, sample_nums = [], [] for device, worker in self._workers.items(): # 1. 机构节点在本地进行多轮训练,得到模型参数 weight, sample_num = worker.train_step(current_weights[device], epoch*self.steps_per_epoch+step, aggregate_freq) weights.append(weight) sample_nums.append(sample_num) # 模型参数聚合,可以是:PYU, SPU, TEE, Secure Aggregation current_weight = self._aggregator.average( weights, weights=sample_nums) # 4. 机构节点从聚合节点获取最新的全局模型,进入下一轮训练 current_weights = {device: current_weight.to(device) for device, worker in self._workers.items()} 更多算法: 通过以上联邦学习算法的例子,我们展示了隐语作为隐私计算框架的可编程性、可扩展性。 期待您基于隐语探索更多有趣的用法!更多详情请参考我们的教程和实现。 https://secretflow.readthedocs.io/zh/latest/tutorial/index.html# 在SPU进行PSI对齐,逻辑回归、神经网络训练 使用SPU HEU的组合构建HESS-LR, HESS-XGB算法 横向联邦学习,在PYU进行本地训练,使用SPU、TEE、Secure Aggregation进行梯度、权重聚合 纵向拆分学习,将一个模型拆分至多个PYU,使用PYU聚合隐层,使用差分隐私保护前向隐层和反向梯度 打开链接即可点亮社区Star,照亮技术的前进之路。 Github 地址:https://github.com/secretflow/secretflow 本文由隐语社区统一发布,欢迎大家点 Star

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册