首页 文章 精选 留言 我的

精选列表

搜索[知识库增强],共10000篇文章
优秀的个人博客,低调大师

Apache Pulsar 2.6.1 版本正式发布:功能增强,新增 OAuth2 支持

在 Apache Pulsar 2.6.0 版本发布后的 2 个月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式发布! Apache Pulsar 2.6.1 修复了 2.6.0 版本中的诸多问题,改进了一些功能,新增了对 OAuth2 的支持,覆盖 Broker、Pulsar SQL、Pulsar Functions、Go Function、Java Client 和 C++ Client,进一步丰富了 Pulsar 作为云原生流数据平台的功能。 在 Pulsar 2.6.1 版本中,来自社区的 commit 有 102 个,越来越多的小伙伴开始参与到 Pulsar 社区建设中,成为 Contributor 的一员。下面一起来看看 2.6.1 版本有哪些更新吧。 Broker 相关改进 📣 将批处理大小限制为 “maxNumberOfMessages” 和 “ maxSizeOfMessages” 的最小值 在 2.6.0 版本之前,BatchReceive 策略中maxNumberOfMessages和maxSizeOfMessages的最小值不会影响批处理大小。当批量大小大于 consumer 中设置的receiveQueue大小时(假设使用的批量大小为 3000,receiveQ 为 500),会出现以下问题: 在 consumer 中使用多主题模式,client 被阻塞,导致不接收任何消息;即使用户在批处理中设置超时策略,client 也不会恢复。 在 2.6.1 版本中,我们把批处理大小设置为 “maxNumberOfMessages” 和 “maxSizeOfMessages” 中的最小值,修复了该问题。 更多详情查看 PR-6865:https://github.com/apache/pul...。 📣 解决 Key_Shared 中使用粘性 hash range 导致的哈希范围冲突问题 在以前的版本中,当用户在 Key_Shared 订阅模型中使用 “stickyHashRange” 时,consumer 指定的 hash 范围不允许重叠。例如,consumer-1 的哈希范围为:[[0,99],[400,65535]],consumer-2 的哈希范围为:[[100,399]]。 这是因为在 broker 端,没有对 stick hash range 中的 start 和 end 位置进行检查。正常情况下不允许 start 大于 end 的位置。在 2.6.1 版本中,我们加入了相应的 check 机制,来避免出现 hash range 冲突的问题。 更多详情查看 PR-7231:https://github.com/apache/pul...。 📣 修复获取 lookup 权限的错误 当前,当 Pulsar AuthorizationService 检查 lookup 权限时,拥有canProducer或canConsumer角色应该具备可以canLookup的能力,但实际上并没有该能力。代码如下: java try { return canLookupAsync(topicName, role, authenticationData) .get(conf.getZooKeeperOperationTimeoutSeconds(), SECONDS); } 如果canProduce或canConsume方法抛出异常,canLookup只会抛出该异常,不检查其他权限。 在 2.6.1 版本中,使用canLookupAsync代替原来的行为,更多详情查看 PR-7234:https://github.com/apache/pul...。 📣 修复创建 non-durable cursor 时无法删除 topic 的错误 当非持久游标创建失败时,会返回 NPE。因为程序发生 NPE 后,仍在继续创建订阅实例: java try { cursor = ledger.newNonDurableCursor(startPosition, subscriptionName); } catch (ManagedLedgerException e) { subscriptionFuture.completeExceptionally(e); } return new PersistentSubscription(this, subscriptionName, cursor, false); 将导致该 topic 的引用计数加一。当用户想要删除这个 topic 时,由于引用计数没有清零,所以即使使用 --force 强制删除,也无法删除 topic。在 2.6.1 版本中,我们解决了无法删除 topic 的问题。 更多详情查看 PR-7355:https://github.com/apache/pul...。 📣 避免在ManagedLedgerImpl.isOffloadedNeedsDelete方法中发生 NPE 在 2.6.1 版本之前,offload-deletion-lag的默认值为null,导致了 NPE 问题。在 2.6.1 版本中,我们在ManagedLedgerImpl.isOffloadedNeedsDelete方法中添加对null值的检查,避免出现该问题。 更多详情查看 PR-7389:https://github.com/apache/pul...。 📣 修复创建新 ledger 时引发 NPE 导致生产者卡死的问题 由于无法解析网络地址,在创建 ledger 时会引发 NPE。如果在添加超时任务之前引发了 NPE,则超时机制不起作用。无法解析的网络地址在 Kubernetes 环境中很常见。当 bookie pod 或工作程序节点重新启动时,可能会发生这种情况。 在 2.6.1 版本中,可通过以下操作来修复该问题: 在创建一个新的 ledger 时,捕获这个 NPE; 触发超时任务时,始终执行回调。因为回调只能触发一次; 添加机制检测 “CreatingLedger” 状态是否发生变化。 更多详情查看 PR-7401:https://github.com/apache/pul...。 📣 修复使用 advertisedListeners 产生的 NPE 问题 当使用带有外部 listener 名称的advertisedListeners = internal:pulsar:// node1:6650,external:pulsar://node1.external:6650时,broker 无法获取名称空间包的所有权。如果未启用 TLS,我们需要更改BrokerServiceUrlTls。 更多详情查看 PR-7620:https://github.com/apache/pul...。 📣 获取最后一条 entry 时,client 错误地读取-1这条 entry 在 2.6.1 版本之前,getLargestBatchIndexWhenPossible()函数没有 return 语句,当 entry 为-1时,client 会对把相应的 MessageData 设置为当前位置的值,并将该值发送到 client,当 client 尝试读取该 entry,会出现如下问题: 16:34:25.779 [pulsar-io-54-7:org.apache.bookkeeper.client.LedgerHandle@748] ERROR org.apache.bookkeeper.client.LedgerHandle - IncorrectParameterException on ledgerId:0 firstEntry:-1 lastEntry:-1 16:34:25.779 [pulsar-client-io-82-1:org.apache.pulsar.client.impl.ConsumerImpl@1986] INFO org.apache.pulsar.client.impl.ConsumerImpl - [persistent://external-repl-prop/pulsar-function-admin/assignment][c-use-fw-localhost-0-function-assignment-initialize-reader-b21f7607c9] Successfully getLastMessageId 0:-1 16:34:25.779 [pulsar-client-io-82-1:org.apache.pulsar.client.impl.ClientCnx@602] WARN org.apache.pulsar.client.impl.ClientCnx - [id: 0xc78f4a0e, L:/127.0.0.1:55657 - R:localhost/127.0.0.1:55615] Received error from server: Failed to get batch size for entry org.apache.bookkeeper.mledger.ManagedLedgerException: Incorrect parameter input 16:34:25.779 [pulsar-client-io-82-1:org.apache.pulsar.client.impl.ClientCnx@612] WARN org.apache.pulsar.client.impl.ClientCnx - [id: 0xc78f4a0e, L:/127.0.0.1:55657 - R:localhost/127.0.0.1:55615] Received unknown request id from server: 10 PR-7495 在代码中增加了 return 语句,GetLastEntry() 会读取最后一条 entry,而不是-1。 更多详情查看 PR-7495:https://github.com/apache/pul...。 ZooKeeper 相关改进 📣 使用主机名进行 Bookie 机架感知映射 PR-5607 中添加了useHostName()和return false。这意味着机架式策略会尝试将 Bookie 主机名解析为 IP 地址,然后使用该 IP 地址来确定 Bookie 属于哪个机架。 这会导致如下两个问题: IP 地址与在/ bookies z-节点中记录的主机名不匹配; 如果在解析 bookie 主机名时发生错误(例如:瞬态 DNS 错误),会触发 NPE 异常;对 BookKeeper 客户端来说,该 bookie 在集群中一直不可用。 例如,在下面代码中的第 77 行会抛出 NPE,因为getAddress()给出了一个null,而该地址没有解析: java 74 if (dnsResolver.useHostName()) { 75 names.add(addr.getHostName()); 76 } else { 77 names.add(addr.getAddress().getHostAddress()); 78 } 默认情况下,DnsResolver.useHostName()返回true。 更多详情参考 PR-7361:https://github.com/apache/pul...。 Java Client 相关改进 📣 修复了无法重命名 Athenz 身份验证中使用的 HTTP header 的问题 Athenz 的身份验证插件允许用户更改 HTTP header 的名称,并通过roleHeader参数将身份验证令牌发送到代理服务器。更改 HTTP header 名称会保留 “AuthenticationAthenz” 侧的 “roleHeader” 参数的值,并将其直接用作标头名称。 更多详情参考 PR-7311:https://github.com/apache/pul...。 📣 修复多次回收 batch ack 的集合 多次回收 batch ack 的根本原因是批量 Ack 刷新和累积确认中存在竞争条件。因此,为该 ackset 添加回收状态检查,避免多次回收 batch ack。 更多详情参考 PR-7409:https://github.com/apache/pul...。 📣 添加支持 OAuth2 身份验证的客户端 Pulsar 支持使用 OAuth 2.0 访问令牌验证客户端身份。可以使用令牌来标识 Pulsar 客户端,并将令牌关联到允许执行某些操作(例如:发布到主题或从主题消费)的某些 “principal”(或“role”)。 该模块直接支持 OAuth 2.0 的 Pulsar 客户端身份验证插件。客户端与 OAuth 2.0 服务器进行通信后,将从 OAuth 2.0 服务器获取“访问令牌”,并将该“访问令牌”传递给 Pulsar broker 进行身份验证。 因此,代理方仍然可以使用 “org.apache.pulsar.broker.authentication.AuthenticationProviderToken”, 用户也可以添加自己的AuthenticationProvider来使用此模块。 更多详情参考 PR-7420:https://github.com/apache/pul...。 📣 在 consumer 关闭之后,不再订阅这个 topic 当 consumer 重新连接到 broker 时,将竞争条件固定在 consumer 中。 在 consumer 重新连接到代理时会发生竞争条件,消费者重新连接到代理时连接设置为null。如果此时关闭 cosnumer,客户端不再向代理发送关闭 consumer 的命令。因此,如果 consumer 重新连接到 broker,consuemr 将再次发送订阅命令。 在 2.6.1 版本中,当 consumer 的连接打开时,consumer 会添加状态检查。如果使用者状态为关闭或正在关闭,则无需发送订阅命令。 更多详情参考 PR-7589:https://github.com/apache/pul...。 📣 OAuth2 身份验证插件使用 AsyncHttpClient 在之前的版本中,OAuth2 客户端 auth 插件使用 Apache HTTP 客户端库发出请求,Apache HTTP 客户端仅用于主机名验证。如 PR-7612 所述,为了摆脱对 Apache HTTP 客户端库的依赖,在 2.6.1 版本中使用 AsyncHttpClient。AsyncHttpClient 在客户端和 broker 中的其他地方都有使用。 更多详情参考 PR-7615:https://github.com/apache/pul...。 CPP Client 相关改进 📣 在 CPP 客户端中支持 OAuth2 的认证方式 Pulsar 支持使用 OAuth 2.0 访问令牌对客户端进行身份验证。可以使用令牌来标识 Pulsar 客户端,并将其与允许执行某些操作(例如:发布到主题或从主题消费)的某些“principal”(或“role”)关联。 在 2.6.1 版本中,允许用户在 CPP 客户端中使用 OAuth2 的认证方式。 更多详情参考 PR-7467:https://github.com/apache/pul...。 📣 修复在关闭 callback 中 partition 索引的错误 在分区生产者/消费者中关闭 callback 时,分区索引始终为 0。我们需要将 ProducerImpl / ConsumerImpl 的内部 partition 索引字段传递给 PartitionedProducerImpl / PartitionedConsumerImpl 的 close 回调。 更多详情参考 PR-7282:https://github.com/apache/pul...。 📣 修复了 C++ 客户端中计时器的竞争状况导致的段崩溃 在 2.6.1 版本之前,竞争条件下会发生段崩溃: 关闭操作,称为 “keepAliveTimer_.reset()”; 同时,在startConsumerStatsTimer和handleKeepAliveTimeout方法中访问计时器。 在 2.6.1 版本中,我们修复了此问题,竞争条件下不再发生段崩溃。 更多详情参考 PR-7572:https://github.com/apache/pul...。 📣 支持从文件读取凭据 支持从文件读取凭据,使其与 Java 客户端保持一致。 更多详情参考 PR-7606:https://github.com/apache/pul...。 📣 修复在连接出错时多 topic consumer 的段错误 当创建 consumer 出现错误时,多主题 consumer 将触发段错误。这是使用 null 回调关闭部分使用者的调用所致。 在 2.6.1 版本中,我们修复了此问题。 更多详情参考 PR-7588:https://github.com/apache/pul...。 Functions 相关改进 📣 使用标准主机名作为 worker 的默认值 Java 8 和 Java 11 获取主机名的方法不同。在 Java 8 中,使用InetAddress.getLocalHost()参数,getHostName()返回完全限定的主机名。在 Java 11 中,则是返回简单主机名。使用getCanonicalHostName()` 参数后,在Java 8 和 Java 11 中都能返回完全限定的主机名。 更多详情参考 PR-7360 https://github.com/apache/pul... 📣 修复 2.6.0 引入的向后兼容问题 PR-5985 破坏了向后兼容性。如果分开运行 Function Worker 与 Broker,Function Worker 和 broker 从 2.5 版本单独更新到 2.6 版本时会发生以下错误: text java.lang.NullPointerException: null\n\tat java.net.URI$Parser.parse(URI.java:3104) ~[?:?] java.net.URI.<init>(URI.java:600) ~[?:?]\n\tat java.net.URI.create(URI.java:881) ~[?:?] org.apache.pulsar.functions.worker.WorkerUtils.initializeDlogNamespace(WorkerUtils.java:160) ~[org.apache.pulsar-pulsar-functions-worker-2.7.0-SNAPSHOT.jar:2.7.0-SNAPSHOT] org.apache.pulsar.functions.worker.Worker.initialize(Worker.java:155) ~[org.apache.pulsar-pulsar-functions-worker-2.7.0-SNAPSHOT.jar:2.7.0-SNAPSHOT] org.apache.pulsar.functions.worker.Worker.start(Worker.java:69) ~[org.apache.pulsar-pulsar-functions-worker-2.7.0-SNAPSHOT.jar:2.7.0-SNAPSHOT] org.apache.pulsar.functions.worker.FunctionWorkerStarter.main(FunctionWorkerStarter.java:67) [org.apache.pulsar-pulsar-functions-worker-2.7.0-SNAPSHOT.jar:2.7.0-SNAPSHOT] 错误原因:2.5 版本中 broker 会对包含bookkeeperMetadataServiceUri字段的请求做出响应,管理客户端将返回该字段为null,从而导致 NPE。 在 2.6.1 版本中,当初始化 function worker 时,对BookkeeperMetadataServiceUri的 value 进行检查,判断其是否为null。 更多详情参考 PR-7528:https://github.com/apache/pul...。 Pulsar Perf 相关改进 📣 在 pulsar-perf 的 producer/consumer/reader 中支持tlsAllowInsecureConnection 在命令行工具 pulsar-perf 中支持tlsAllowInsecureConnection配置,以支持对不安全的 TLS 连接的集群进行 producer/consumer/reader 的性能测试。 更多详情参考 PR-7300:https://github.com/apache/pul...。 参考信息 Apache Pulsar 2.6.1 官网下载地址:https://pulsar.apache.org/en/... 更多关于 Apache Pulsar 2.6.1 的信息,可以参考下方:https://pulsar.apache.org/rel... Pulsar 2.6.1 PR 列表:https://github.com/apache/pul...

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

基于风险的应用程序安全方法可增强安全防御

如今,不可否认的是网络犯罪已逐渐进入人们的生活,为人们所重视。无论何时,随意浏览新闻都能看到新漏洞的发现,或者是敏感信息的泄露、窃取等。因此,任何企业董事会都应该尽早加强网络安全防御。 然而,即使现在网络威胁来势汹涌,但是网络安全防御仍然不够。通常而言,当最佳安全实践有可能干扰业务效率或整体生产力时,业务优先级往往是高于安全优先级的。对于许多CSO和CISO来说,资金不足是另一个值得普遍关注的问题,董事会根本没有准备好,没有为他们提供真正需要的预算和资源,来确保他们的业务安全。 企业需要有长远考虑 在短期内,减少安全资金以促进业务的其他领域发展似乎是个好主意,但这是一个很大的风险,一旦高管人员也受到攻击,后果更加不堪设想。例如,尽管在年度预算周期内,额外拨出50万英镑作为新的安全资源投入似乎并不可行,但与数据泄露后面临的数百万英镑的罚款、法律费用和缓解费用相比,这显得相形见绌。 英国航空公司(British Airways)在其网站上称遭到“复杂的恶意犯罪袭击”之后,就被信息专员办公室(ICO)罚款1.83亿英镑,因为在此期间,约有50万名客户的详细信息泄露。 这样的例子强调了通过实施网络安全实践来确保长期安全性和合规性的重要性,这些实践首先能做的就是防止此类数据泄露。另一种更为主动的方法就是将网络安全实践整合到更广泛的业务策略中去,这可以大大减少数据丢失,并使安全团队能够更迅速、更准确地应对任何真实存在的威胁。 随着越来越多的组织依靠软件应用程序来发展业务,所以保护这些应用程序变得十分必要。因此,采用一种系统的、基于风险的方法在软件开发生命周期(SDLC)的早期评估和解决网络安全漏洞,而不是出现漏洞后才这样做。 业务和安全目标必须保持一致 安全方法与整个组织的方法结合才是最有效的。但是很多时候,一旦将安全性纳入SDLC会对开发时间或者发布窗口有不利影响时,便会被重新考虑。 当补救漏洞所需的时间威胁到重要应用程序的发布时,安全团队就会承受压力。如果不能通过令人信服的业务案例来推迟发布,并解决安全问题,那么风声将不胫而走。 风险在有效安全决策中的作用 在上述情况下,安全团队需要能够迅速让高层决策者认识到所涉及的风险以及无法修复漏洞的潜在后果。这既需要对应用程序的预期业务目标有扎实的理解,又需要有以决策者能够理解的方式来构成论点的能力,而不是给他们一堆的安全术语。最好的方法之一是基于风险的方法,该方法有两个主要阶段。 第一阶段包括全面评估当前正在开发的所有Web应用程序,并建立严格的监视流程以快速识别漏洞。在此阶段进行彻底检查至关重要,因为如果只是遗漏了一个应用程序,或者一个系统没有安全保护,那么它将为网络罪犯创造一个新的潜在风险。 完成第一阶段后,便可以开始第二阶段,将业务影响纳入战略规划过程。通过正确定义特定漏洞可能造成的潜在损失,并帮助高级管理人员以通俗易懂的方式理解这些损失。不仅可以帮助满足对有效安全性的需求,还可以根据整个组织的风险级别对活动进行更精细的调整。 采用基于SaaS的方法进行应用程序扫描 在整个SDLC中采用基于SaaS的方法进行应用程序扫描,安全团队可以持续评估生产过程中的风险,而不仅仅是几个关键点。因此,当与业务活动优先级合理结合时,可以评估更为准确的风险状况,公司各层级也可以接受。 关于有效的安全性,对于安全团队来说,让整个组织企业理解是很重要的。采用基于风险的方法可以做到这一点,通常将复杂的漏洞和分析转换成对所有人,特别是对高级管理人员有意义的术语,有助于他们理解。然后进行适当的讨论,采取合理的、正确的决策,从而使整个公司受益,并使公司免受众多网络威胁的侵害。 【责任编辑: 赵宁宁 TEL:(010)68476606】

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

演讲稿: 如何使用增强现实技术提高应用的用户体验

这是Jerry在SAP成都研究院内部用英文做的一个演讲,这里把底稿分享给大家: With the accellerated evolution of mobile hardware, application developers tend to reconsider the importance of the Augmented Reality technology ( called AR for short in this article subsequently ) in regard to satisfy their customers better with enhanced user experience. What is AR? See one explanation from Wikipedia: Augmented re

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

阿里巴巴:工业互联网构筑增强型微笑曲线

发展工业互联网对中国制造业转型升级具有重大意义,其将有效带动全社会制造资源的优化配置、打破制造体系的封闭与知识的不对称、加速制造业向数字驱动型发展模式转变,有效拉动微笑曲线的整体上移,是中国制造业换道超车的关键。 中国工业互联网的新4大红利 中国工业互联网起步较早,并没有掉队。中国数字经济发展所形成的新4大红利正成为中国工业互联网赶超制造强国的加速器。 l工程师红利:全球25%以上的工程师来自中国。中国理工科毕业生数量超过300万人,是美国的五倍,数据与算法工程师的数量在快速增加。 l模式红利:互联网技术激发了十几亿消费者的潜力。以C2M、共享经济为代表的用户驱动型商业模式加速与工业互联网对接,并倒逼制造业数字化、网络化、智能化升级。 l数字红利:我国大数据、云计算、人工智能等新一代数字技术已走在了世界前列;5G基础扎实,最快将

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

甲骨文宣布因 '主要增强功能'延迟发布Java EE 8

甲骨文(Oracle)公开承认不得不再一次延迟Java 8企业版的发布。新版Java企业版(Java EE)将于2017 年底上架,比原定计划推迟了至少六个月。甲骨文上一次调整发布日期是今年6月,其时的计划发布日期是明年"上半年"。 甲骨文Java EE 和应用程序服务器开发副总裁Anil Gaur在美国加州旧金山的召开的甲骨文JavaOne大会上公布了新日期。 Gaur承诺Java EE 9 将于Java EE 8发布后的一年后发布,即是说 2018年年底。 Gaur 表示,Java EE 9 的工作会“马上开始”,不会等到Java EE 8完成后才开始。 Gaur证实了本网站不久前曾报道过的Java EE 8延迟。十个 Java EE 8 项目现在处于“重大改进”阶段,以应对开发和部署领域里新的流行趋势。这些改动影响到 Bean 验证、 CDI、 JAX-RS、JSF、JSON P 和 Servlet。 甲骨文并未就Java EE 8的又一次延迟给出理由。甲骨文的Java开发今年曾出现掉链子。工程师和负责规范的人一度停止了和社区的沟通,甲骨文提交的代码数量急剧下降。甲骨文备受质疑而被迫发表声明,坚称甲骨文对Java的承诺不变。 社区内幕人士告诉记者,大家的感觉是甲骨文将员工调去建公司的云系统了。 Gaur对这些完全避而不谈,说的一些话让人想起英国首相Theresa May说的“英脱欧即是英脱欧”;Gaur在JavaOne大会上称,甲骨文“有明确的Java EE 8 和 9计划”。 Gaur表示,“Java EE 下一步的主题是为云和微服务而建立的新型应用程序开发方式。” JSON-B 和安全是两个新的重点领域,相应的项目也提到了议事日程上,甲骨文为二者的添加、配置及"例行检查”做了一些工作。 Gaur提出警告,他称,为了使 Java与云、 Microservices(微服务)很好地共存,为了使随之而来的编码更容易、更快捷,为了使框架更简洁、更具扩展性,编程模型必须改变。即是说, Java EE 的改进是在工作规模、模块化和安全方面。 Java EE 8 将支持分布式数据流、HTTP/2、键-值对(用于使用 OAuth 和 OpenID 连接系统时管理密钥)、Docker在单个容器里的多件打包、 统一事件模型、交易管理一致性及多租户服务。 为了帮助编码的简化,Java SE 8的 Lambda 会进入 Java EE 9。一些Java EE 8容不下的功能会放在 Java EE 9里。 甲骨文现在正在征求社区成员的意见,在听他们说希望在 Java EE 9 里看到哪些功能。 和往常一样,Gaur想唬一唬JavaOne大会的与会者,他在 JavaOne大会上表示,“这是社区的事,专家团决定什么东西可以进入JSR。” 原文发布时间为:2016年9月21日 本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。

资源下载

更多资源
Mario

Mario

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

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部分的功能。

用户登录
用户注册