温馨提示  2024年 6月我们已经停止开发者板块文章内容更新,谢谢来访。存档数据

最新文章

Google开发者 Next ’24 - 踏上云端新旅程
资讯

Google开发者 Next ’24 - 踏上云端新旅程

Thomas KurianGoogle Cloud CEO去年,全世界才开始想象生成式 AI 将为企业带来怎样的转变,如今这些转变正在逐步展开。而 Google 一直遵循着相同的原则: 打造人人都能受益的 AI 技术,尽力为更多人带来更美好的生活。一个连接云端、由 AI 驱动的Agent 世界借助我们丰富多样的 AI 产品组合,比如基础架构、Gemini、多种模型与 Vertex AI 等,客户与合作伙伴可以打造日渐精密的 AI Agent,用来服务客户、支持员工和创造内容等。出色的客服 Agent 可以协助您的客户通过包含 web、移动设备、呼叫中心及销售点在内的多种渠道,灵活运用文本、语音等方式,让您的企业与用户的互动更为顺畅。● 洲际酒店集团将推出由生成式 AI 驱动的旅行规划功能,协助客户轻松规划下一趟度假行程。● Target 超市集团正在优化其 Target 应用程序和 Target.com 上的优惠和 curbside pickup 功能。员工 Agent 可帮助所有员工提高工作效率,更好地协同工作。例如: ● Etsy 使用 Vertex AI 训练技术来优化搜索建议与广告模型,为买家提供更好的商品推荐,并提升销售额。● 巴西企业 Dasa 协助医生更快地侦测出检测结果的相关发现。创意 Agent 能成为您强大的设计师与制作团队,与您一同进行图片与幻灯片的浏览和创作,并探索各种创意想法。我们提供强大的平台与技术栈协助您打造创意 Agent。例如: ● Canva 采用 Vertex AI 为其产品 Magic Design for Video 提供动力,协助使用者在短短几秒钟内制作出引人入胜的视频。● 家乐福使用 Vertex AI 开创营销新方法,使他们能够在数周而不是数月内在不同社交网络上创建动态活动。以下是我们在 Cloud Next ’24 大会上宣布的一系列产品创新,协助各种规模的组织在 AI 时代向前迈进。利用 AI 优化的基础架构实现规模化生成式 AI 需要强大的基础架构来加以支持,才可迅速推动转型。为了能支持各种技术需求层次的客户,我们进行了多项重要更新: A3 mega我们与 NVIDIA 合作,使用 H100 GPU 开发的全新 GPU 实例现已正式推出,其带宽为 A3 实例的两倍,能支持要求最严苛的工作负载。此外,我们也同步推出 Confidential A3,客户能够在训练和推理过程中更进一步保护敏感数据,并确保 AI 工作负载的机密性和完整性。NVIDIA HGX B200 与 NVIDIA GB200 NVL72Google Cloud 将于 2025 年初采用最新的 NVIDIA Blackwell 平台晶片,并提供 HGX B200 和 GB200 两种选项。B200 专为主流模型的训练与服务而设计,而 GB200 NVL72 则可为万亿参数规模的模型提供实时大语言模型推理和大规模训练。TPU v5p我们宣布正式推出 TPU v5p,这是我们最强大、可拓展且最灵活的 AI 加速器,可用于训练和推理,且每个 Pod 的计算能力是上一代的 4 倍。我们还宣布为 TPU v5p 提供 Google Kubernetes Engine (GKE) 支持;过去一年,在 GKE 上运行的 GPU 和 TPU 使用量增长了 900% 以上。AI 优化的存储选项我们通过 Cloud Storage FUSE 和 Parallelstore 全新的缓存功能提升训练速度,这些功能可以将数据存储更接近客户的 TPU 或 GPU。我们也推出 Hyperdisk ML (预览版),这是新一代块储存服务,与常见的替代方案相比,其模型加载时间加速了 3.7 倍。动态负载调度(Dynamic Workload Scheduler)日历模式可以协助并确保工作负载在指定时间开始执行,而弹性启动模式可提供最佳的经济效益,协助客户为复杂的训练与推理任务有效管理资源。我们正致力于将 AI 带到更接近数据生成与运用的位置,包括边缘、实体隔离 (air-gapped) 环境、Google 主权云和跨云环境。通过 Google Distributed Cloud (GDC),我们可以在任何地方启用 AI,让您可以选择最符合组织特定需求的环境、配置与控制选项。 我们也宣布多项 GDC 的新功能,包括: 在 GDC 上提供 NVIDIA GPUs我们将为采用网络互联与物理隔离配置的两种 GDC 提供 NVIDIA GPU,这两种配置都将支持新的 GPU 实例,以高效运行 AI 模型。在 GDC 上提供 GKE 服务领先的 AI 公司在 Google Cloud 使用的 GKE 服务,也将在 GDC 上提供。支持 AI 模型我们在 GDC 中支持多种开放 AI 模型,包含 Gemma、Llama 等,为这些模型提供可在物理隔离与网络互联的环境中执行。在 GDC 上提供 Vector Search我们也将在 GDC 引入 Vector Search 的强大功能,您可以在 GDC 上以极低的延迟对您的私人和敏感数据进行搜索和信息检索。主权云 (Sovereign Cloud)为符合最严格的监管要求,我们提供采用完全物理隔离配置的 GDC。这个产品能在本地操作并具备完整的存续能力 (survivability),可由 Google 或您选择的合作伙伴代管,您拥有完全的控制权,并且在法规变更时,我们也可以灵活反应,协助您快速应对。虽然并非所有工作负载都属于 AI 工作负载,但您在云中运行的每个工作负载都需要进行优化,且每个应用都有独特的技术需求。因此,我们推出全新的通用计算选项,协助客户获得最佳性能、确保应用程序之间的互通性,满足可持续发展目标,同时降低成本。Google Axion是我们专为数据中心设计的首个 ARMⓇ 架构 CPU,与当前基于 x86 的同类实例相比,性能最多可提升 50%,能效最多可提升 60%。我们的通用 VM 系列也将推出两个全新的机器系列:N4 与 C4C3 机器系列将推出原生裸机机器类型。此外,我们也将正式推出 Hyperdisk Advanced Storage Pools,以及更多新的产品。我们也将 Vertex AI 上的生成式 AI 静态存储数据的数据驻留 (data residency) 服务范围扩展到 11 个新的国家和地区,包括澳洲、巴西、芬兰、香港、印度、以色列、意大利、波兰、西班牙、瑞士和台湾。● 此外,客户现在使用 Gemini 1.0 Pro 和 Imagen 时,可以将机器学习的操作限制在美国或欧盟境内。● 与去年我们宣布开始服务的其他 10 个国家和地区一样,我们协助这些新开放的国家和地区的客户控制其数据的存储位置和访问方式,让客户更能符合世界各地的监管及安全要求。利用 Vertex AI创建 AgentsGoogle Cloud 在 Vertex AI 上提供超过 130 种第一方与第三方模型,我们正在扩大对各种模型的访问,为客户提供更丰富的模型选择: Gemini 1.5 ProGemini 1.5 Pro 提供两种大小的上下文窗口: 128K token 与一百万 token,目前在公开预览版阶段。客户现可以在单个数据流中处理大量信息,包含 1 小时的视频、11 小时的音频、超过 30,000 行的代码,或 700,000 个以上的字词。Claude 3Anthropic 全新系列的先进模型,现已在 Vertex AI 上向客户开放使用。CodeGemmaGemma 是先进的轻量级开放模型系列,采用与创建 Gemini 模型相同的研究和技术而构建。而 CodeGemma,一款 Gemma 全新微调、针对代码生成与代码辅助等编码使用场景而设计的模型,现已在 Vertex AI 开放使用。Imagen 2这是我们最先进的文生图技术,具备多种图像生成功能,协助企业打造符合品牌需求的定制化图像。全新的文生图功能让营销与创意团队能轻松生成例如 GIF 等动图,并且配备安全筛选与数字水印。此外,我们也宣布推出高级照片编辑功能,包含图像修复、图像扩展,以及其他更多功能。数字水印由 Google DeepMind 的 SynthID 技术提供支持,此功能现在起正式应用于 Imagen 2 生成的 AI 图像中。当客户利用企业数据对模型进行增强和 Grounding 时,可以发挥模型最大功效并获取更多价值。今天,我们用两种方式加强 Vertex AI 的 Grounding 能力,使其功能更加完善: Google 搜索以 Google 搜索作为模型的信息来源,能结合 Google 最新基础模型的强大功能,以及访问最新、高质量信息的能力,从而显著提高响应的完整性与准确性。您的数据运用企业应用程序,如 Workday 或 Salesforce 中的数据作为模型基础,并轻松连接 AlloyDB 和 BigQuery 等 Google 数据库。当您选择了合适的模型、加以 finetune 并 Grounding 后,Vertex 还可以协助您部署、管理和监控模型。今天,我们宣布推出更多 MLOps 功能: Prompt 管理工具这些工具让您可以在内置 Prompt 上进行协作,附上备注和状态、追踪变更纪录,以及比较不同 Prompt 的响应质量。自动并排比对Auto SxS 功能现已正式推出,它可以说明为何某个响应优于另一个,并提供确定性分数,有助于使用者了解评估的准确性。快速评估功能此功能现已推出预览版,可协助客户在迭代 Prompt 设计时,运用较小的数据集来快速评估模型。最后,Vertex AI Agent Builder 集成了基础模型、Google 搜索和其他开发者工具,使您可以轻松建构和部署 Agent。它提供了无代码 Agent 生成器控制台的便利性,以及强大的联结、编排与增强功能,使用 Vertex AI Agent Builder,您现在可以利用 Google 搜索和您组织的数据快速创建一系列生成式 AI Agent。缩短开发时间Gemini Code Assist 是 Google 专为企业打造的 AI 代码辅助解决方案。为支持开发人员,我们宣布推出以下项目: Gemini 1.5 Pro in Gemini Code Assist此次升级带来了高达 1 百万 token 的上下文窗口,甚至可为最大型的项目带来革命性编码方式。Gemini Code Assist 现在可以提供更准确的代码建议、更深入的洞察,以及精简的工作流程。Gemini Cloud Assist此功能可在应用程序生命周期各阶段提供 AI 辅助功能,让使用者更轻松地设计、保护、操作、故障排除,以及优化应用的性能与成本效益。我们为 Google 内部的一组开发人员部署了 Gemini Code Assist,发现完成一般开发任务所需的时间缩短了 40% 以上,编写新代码的时间缩短了 55%。事实上,Gemini Code Assist 支持位于任何位置的私人代码集,无论是本地部署、GitHub、GitLab、Bitbucket,甚至是多个位置。结合数据释放庞大 AI 潜能Google Cloud 可让您将 AI 技术与您的企业数据相结合,同时维持数据的隐私性和安全性。我们现在宣布推出全新增强功能,协助组织构建出色的数据 Agent: Gemini in BigQueryGemini in BigQuery 运用 AI 技术来协助数据团队准备、发现、分析和治理数据。此外,您将能通过新的 BigQuery Data Canvas 构建与执行数据管道,它结合自然语言与嵌入式可视化功能,提供了与 Notebook 类似的全新使用体验,两种目前皆提供预览版。Gemini in Database您可轻松安全地将数据从旧系统中迁出,例如将数据库转成 AlloyDB 等现代云数据库。Gemini in Looker我们将推出数项预览版的新功能,这些功能可轻松地将您的数据 Agent 集成到您的工作流中。我们还新增与 Google Workspace 集成的全新生成式 AI 功能,可让您与业务数据进行对话。运用 AI 技术提升网络安全安全 Agent 可在安全生命周期的每个阶段提供帮助,因此生成式 AI 有潜力扭转局势,让抵御攻击的一方占上风。Google Cloud 安全产品组合中的创新功能可以提供更强大的安全成果,并使每个组织都能让 Google Cloud 成为他们安全团队的一部分,这些功能包括: Gemini in Threat Intelligence使用自然语言技术,可以针对威胁发动者的行为提供深入的洞察。通过 Gemini,我们能够分析数量庞大的潜在威胁恶意代码样本。Gemini 拥有更大的上下文窗口,能分析模块之间的交互,针对代码的真正意图提供全新洞察。Gemini in Security Operations全新辅助调查功能可以将自然语言转换为启动检测、总结事件数据、建议应采取的行动,并通过对话式聊天引导使用者在平台上操作。利用 Google Workspace提升工作效率通过 Gemini for Workspace,企业可直接在 Gmail、文档和表格等产品中,使用内置的 AI Agent。今天,我们宣布推出 Gemini for Workspace 的下一波创新与增强功能,包含: Google Vids这个由 AI 驱动的视频创作应用程序,结合视频创作、制作及编辑助理于一身,它可以自动生成一个分镜图 (storyboard) 让您轻松编辑,当您选择好风格后,它会将您的草稿与素材库中的视频片段、图片和背景音乐拼凑在一起。它还可以帮助您找到合适的旁白来传递信息,可以选择我们预设的旁白或是使用您自己的录音。Vids 将加入我们其他的生产力工具的行列,例如: 文档、表格和幻灯片等。它拥有简单易用的界面,让您能安全地通过浏览器协作和共享工作项目。Vids 将于六月于 Workspace Labs 发布。AI Meetings and Messaging 插件这款协作工具提供 "帮我记录(Take notes for me)" 与聊天摘要功能,支持 69 种语言 (相当于 4,600 种语言组合) 的实时翻译功能。全新的 AI Security 插件Workspace 管理员现在可以使用专为其组织训练、可保护隐私的 AI 模型与数据外泄防护控件,来自动分类与保护机密档案与数据。回顾过去这一年,看到我们的使用者从最初抱着热衷尝试和实验的心态,一路进展到实际运用 AI 工具并推出早期产品,这确实令人惊叹,也使我们更加期待他们未来更广泛的应用。
2024-04-12 70 次阅读 Google开发者
Dart null safety是什么?为什么过去不支持?
知识

Dart null safety是什么?为什么过去不支持?

实际上很多语言都引入了null safety这个概念,特别是现代的编程语言。用一句话来说就是防止空指针错误,从编译的角度来看,也可以大幅度提高程序的运行性能,某些层面来看这是因为将运行时检查的逻辑,交给了语法检查器。Dart null safety是Dart编程语言中的一个重要特性,它为开发者提供了一种更安全的方式来处理可能为null的对象。Dart null safety的主要作用是防止空指针不同寻常(Null Pointer Dereference),最终减少程序错误,提高代码的可维护性和可读性。在传统的C++或Java等语言中,处理可能为null的对象需要额外的检查和代码,这可能会导致代码复杂性和冗余。可是在Dart中,空值(null)是一种明确的可能状态,它不需要显式的检查和空值处理机制,这使得代码更加简洁和易于理解。Dart null safety的一个主要优点是它可以帮助开发者防止NullPointerException。在处理可能为null的对象时,如果开发者不小心访问了null对象,就会导致NullPointerException,这可能会导致程序崩溃或者产生未定义的行为。而使用Dart null safety,开发者可以更加自信地处理可能为null的对象,因为编译器会强制执行空值的安全性检查,只有在合适的情况下才允许访问null对象。除了安全性之外,Dart null safety还可以提高代码的可维护性和可读性。在传统的编程风格中,为了处理可能为null的对象,开发者通常需要编写更多的代码来检查和处理空值。而使用Dart null safety,开发者只需要编写一次安全的代码结构,而无需为可能的null情况编写额外的检查。除此之外,由于编译器会强制执行安全性检查,代码更加清晰易懂,也更易于调试和维护。Dart null safety是一个非常重要的特性,它为开发者提供了更安全、更简洁、更易读的代码,同时也提高了代码的可维护性和可读性。在未来的软件开发中,我们相信Dart null safety将继续发挥重要作用,并帮助我们编写更加可靠、可维护和高效的代码。在使用AI特征时,Dart null safety也可以发挥重要作用。因为AI模型的输出可能会存在不确定性和噪声,如果不对这些输出进行适当的处理和验证,就可能会引入空值和潜在的错误。使用Dart null safety可以帮助我们更好地管理这些不确定性,确保我们的代码在处理AI输出时更加安全和可靠。自 Dart 2.0 替换了静态可选类型系统为 完善的静态类型系统 后,空安全是我们对 Dart 作出最大的改变。在 Dart 初始之际,编译时的空安全是一项少有且需要大量时间推进的功能。直到今日,Kotlin、Swift、Rust 及众多语言都拥有他们自己的解决方案,空安全已经成为 熟视无睹的话题。总结来说就是, Null 已不再被看作所有类型的子类实际上Null并不会因为这样变得不再有用,反而更有作用。所以我们仍然需要合理地处理它。可选参数就是非常好的例子。叫我们来看下这段空安全的代码:// Using null safety: makeCoffee(String coffee, [String? dairy]) { if (dairy != null) { print('$coffee with $dairy'); } else { print('Black $coffee'); } } 此处我们希望 dairy 参数能传入任意字符串,或者一个 null 值。为了表达我们的想法,我们在原有类型 String 的尾部加上 ? 使得 dairy 成为可空的类型。本质上,这和定义了一个原有类型加 Null 的 组合类型 没有什么区别。所以如果 Dart 包含完整的组合类型定义,那么 String? 就是 String|Null 的缩写。使用可空类型要是你的表达式可能返回空值,你会如何处理它呢?由于安全是我们的原则之一,答案其实所剩无几。因为你在其值为 null 的时候调用方法将会失败,所以我们不会允许你这样做。dart// Hypothetical unsound null safety: bad(String? maybeString) { print(maybeString.length); } main() { bad(null); } 如果我们允许这样的代码运行,那么它将毫无疑问地崩溃。我们只允许你访问同时在原有类型及 Null 类下同时定义的方法和属性。所以只有 toString()、== 和 hashCode 可以访问。所以呢,你可以将可空类型用于 Map 的键值、存储于集合中或者与其他值进行比较,如此而已。那么原有类型是如何与可空类型交互的呢?我们知道,将一个 非 空类型的值带给可空类型是一定安全的。如果一个函数接受 String?,那么向其传递 String 是允许的,不会有任何问题。在这次改动中,我们将所有的可空类型作为基础类型的超类。你也可以将 null 带给一个可空的类型,即 Null 也是现在Dart已经不在支持非健全空安全模式(也就是在支持空安全的代码中,引用非空安全的代码依旧能通过编译)。
0001-01-01 73 次阅读
资讯

美国国会提议《生成人工智能版权披露法案》

包括 OpenAI 在内的人工智能公司面临涉嫌侵犯版权的诉讼,但声称合理使用。人们担心人工智能对艺术家权利的潜在威胁。美国国会提出的一项新法案旨在要求人工智能公司披露他们用于训练生成人工智能模型的受版权保护的材料。该法案名为《生成人工智能版权披露法案》,由加州民主党人 Adam Schiff 提出,要求人工智能公司在推出新的生成人工智能系统之前,将其训练数据集中的受版权保护的作品提交给版权登记册。公司必须在发布人工智能工具之前至少 30 天提交此信息,否则将面临经济处罚。相关数据集可能包含大量文本、图像、音乐或视频内容。希夫国会议员强调需要平衡人工智能的潜力与道德准则和保护,并指出人工智能对社会各个方面的破坏性影响。该法案并不禁止人工智能使用受版权保护的材料进行培训,但要求公司披露他们使用的受版权保护的作品。此举是为了回应越来越多的诉讼和政府对主要人工智能公司是否非法使用受版权保护的内容来开发 ChatGPT 等工具的审查。娱乐行业组织和工会,包括美国唱片工业协会和美国导演协会,都支持希夫的法案。他们认为,鉴于人工智能生成的内容源自人类,保护人类创意内容的知识产权至关重要。像 OpenAI 这样的公司目前面临着涉嫌侵犯版权的诉讼,他们坚称对受版权保护的材料的使用属于合理使用,这是一种允许某些未经许可使用受版权保护的材料的法律原则。
2024-04-11 72 次阅读
前端

Flutter编译web应用,如何优化?

Flutter应用与经典的H5应用有很大差异,因为绝大多数核心的内容,不是使用Dom渲染所以Flutter Web应用的优化很特殊。不只是需要要把main.js(flutter.js)处理的很小,还要巧妙的做好加载动画,以及静态文件优化,下面我们就来分步骤谈谈。优化 Flutter Web 应用的编译和性能是一个多方面的任务,涉及多个层面的调整。以下是一些建议,帮助你优化 Flutter Web 应用的编译和性能:1. 使用正确的构建命令使用 flutter build web --release 来构建生产环境的 Web 应用,这通常会提供比开发模式更好的性能。2. 代码优化减少不必要的依赖:只包含项目真正需要的依赖,防止不必要的库和包。使用懒加载:对于大型资源或页面,考虑使用懒加载技术,以减少初始加载时间。优化状态管理:防止不必要的状态更新和重建,使用 const 来防止不必要的组件渲染。3. 图片和资源优化压缩图片:使用工具压缩图片大小,减少加载时间。使用 WebP 格式:WebP 通常比 JPEG 和 PNG 有更好的压缩效果。资源懒加载:对于非关键资源,使用懒加载来减少初始加载负担。4. Web 编译选项启用代码拆分:Flutter Web 支持代码拆分,这能帮助并引导减少初始加载时间。使用正确的渲染引擎:比如,你可以选择使用 CanvasKit 而不是默认的 HTML 渲染器,但请注意这可能会增加编译大小。5. 构建和部署优化使用 CDN:将静态资源部署到 CDN,以加快全球用户的访问速度。压缩和缓存:使用 Gzip 或 Brotli 压缩资源,并设置适当的缓存头。6. 性能分析使用 Flutter 的性能分析工具(如 Performance Overlay 或 DevTools)来识别性能瓶颈。根据分析结果调整和优化代码和资源。7. 持续监控和反馈使用用户反馈和监控工具来跟踪应用的性能表现,并根据需要进行调整。8. 考虑使用第三方库和服务有一些第三方库和服务可以帮助你优化 Flutter Web 应用,例如用于图片懒加载、资源压缩等。请注意,优化是一个持续的过程,需要不断地监控和调整。同时,由于 Flutter 和其生态系统在不断发展和更新,建议定期查看官方文档和社区资源,以获取最新的优化建议和实践。wasm应用如何提高加载速度WebAssembly(Wasm)应用的加载速度得到多个因素的影响,包括模块二进制文件的大小、胶水脚本文件的加载和压缩、以及运行时的性能等。为了改善Wasm应用的加载速度,提高Wasm应用的加载速度需要从多个方面进行优化,包括减小文件体积、优化加载与重用、压缩胶水脚本文件、利用JIT加速、解决内存冲突问题以及利用浏览器缓存等。通过综合运用这些优化策略,可以明显提升Wasm应用的加载速度和用户体验。一般可以从以下几个方面进行优化:减小生成模块的文件体积:通过代码优化和压缩技术,减小Wasm模块二进制文件的大小,最终减少下载时间。比如,选择轻量级的底层系统语言(如C或Rust)来编写Wasm模块,这些语言通常具有较小的运行时开销和二进制文件大小。除此之外,也可以考虑使用代码分割技术,将应用拆分成多个小模块,按需加载,以减少初始加载时间。优化模块对象的加载与重用:在加载Wasm模块时,使用异步加载的方式,以防止阻塞主线程。同时,通过缓存机制重用已加载的模块对象,防止重复加载。压缩胶水脚本文件:胶水脚本文件用于连接上层JavaScript环境与Wasm模块实例。通过压缩这些脚本文件,可以减少其大小,最终加快加载速度。利用JIT加速:对于支持JIT(即时编译)的Wasm运行时,可以利用JIT加速来提高模块的执行效率。但需要留意的是,JIT加速模式的加载时间可能较长,因此需要权衡加载时间和执行效率之间的关系。解决内存冲突问题:当Wasm应用在浏览器中运行时,可能会遇到内存冲突问题,尤其是在使用多种运行模式(如wavm和wabt)时。为了解决这个问题,可以考虑将相同的代码编译成多个不共享内存的动态库,最终防止内存冲突导致的程序崩溃。利用浏览器缓存:浏览器通常具有缓存机制,可以缓存已经下载过的Wasm模块和胶水脚本文件。通过合理设置缓存策略,可以减少重复下载,提高加载速度。
2024-04-11 77 次阅读
.Net发展到现在,你了解它的发展历史吗?
域名

.Net发展到现在,你了解它的发展历史吗?

你是不是好奇第一个被注册的.net域名是哪个?告诉你一个有趣的事实,根据注册局官方公示,丹麦、芬兰、冰岛、挪威和瑞典研究员组成的联合教育合作机构 — 北欧研究与教育基础设施于 1985 年注册了第一个 .net 域地址 — www.nordu.net。.net 是 1985 年 1 月实施的首批顶级域(其他五个是 .com、.edu、.gov、.mil 和 .org)之一。在引入这些 TLD 之前,互联网在很大程度上是大学和科学家管理的项目,被用于通信和研究。但是,由于逐日增加的人开始使用这个网络,电子通讯变得越来越难管理,有时,由于邮件负担过重,人们必须停止使用连接。随着对有组织的系统的需求越来越明显,理清这个混乱的世界并建立秩序的担子落在了南加利福尼亚大学信息科学学院 (USCIS) 的 Jon Postel 和他的同事身上。作为请求注解 (RFC) 出版物(互联网工程任务组 [IETF] 和互联网协会领导的研究出版物)的编辑,Postel 和他在 USCIS 的同事在 1984 年 10 月出版了 RFC 920,概述了“在 ARPA 互联网和 DARPA 研究社区中建立新域名的要求”。该政策声明为 .net 和其他五个顶级域的诞生奠定了基础,并将互联网创造成我们如今看到的样子。目前.net 的注册量约为 1310 万 万,拥有第三大的区域基础,紧随 .com 和 .de 之后。www.realestate.net 在 2007 年 2 月以 300,000 美元的价格被出售,成为价格最高的五个 .net 域之一。Jon Postel,1994,互联网顶级域的手绘地图。摄像:南加利福尼亚大学通讯社 Irene Fertik。©1994,南加利福尼亚大学。为什么.net的发展情况不如.com好为什么.NET的发展情况不如.COM好呢?这个问题涉及到多个方面的因素,除了价格还有含义,发音导致的易记性上的不同之处,以下是一些可能的原因:首先,我们需要了解.NET域名的历史和背景。.NET域名是为了鼓励网络开发而创建的,目的是为了吸引开发者社区。可是,随着时间的推移,.COM域名已经成为了互联网上最受欢迎和最具价值的域名之一,这主要是由于其历史悠久、易于理解和记忆,以及其在互联网经济中的重要地位。相比之下,.NET域名的发展情况相对较为平淡。这主要是因为以下几点原因:1. 认知度:.COM域名已经成为互联网的代名词,几乎所有与互联网相关的公司和组织都会使用.COM域名。相比之下,.NET域名在认知度上相对较低,这使得它在市场上缺乏吸引力。2. 竞争激烈:随着互联网的发展,逐日增加的公司和组织意识到域名的重要性,最终导致.COM域名变得非常稀缺。这也代表着对于大多数企业和组织来说,使用.NET域名可能会降低其搜索排名或错过某些机会。3. 传统的影响:互联网已经经历了多年的发展,很多公司和组织在他们的品牌、商标和域名方面已经有了一定的传统。在这样的情况下,使用他们熟悉的.COM域名更具吸引力。相比之下,使用.NET域名可能不会引起同样的共鸣和信任。虽然.NET域名没有成为与.COM域名一样的顶级域名,但这并不代表着它没有价值和发展空间。它仍然是一个具有特定意义的域名,可以吸引特定领域的组织和开发者。同时,它也能帮助并引导推广网络开发领域的文化和技能。所以呢,我们不能简单地说.NET域名不如.COM好,而应该根据具体需求和目标来选择最适合的域名。总的来说.NET域名的发展情况不如.COM好主要是由于其认知度较低、竞争激烈和传统的影响。可是,它仍然是一个具有特定意义和价值的域名,可以吸引特定领域的组织和开发者。在今后,随着网络开发领域的不断发展和普及,.NET域名可能会得到更多的关注和认可。
2024-04-10 55 次阅读
软件

整理Flutter可用的APP统计SDK

App统计是指对应用程序(App)的使用情况、用户行为、流量数据等各方面进行统计和分析的过程。通过App统计,开发者可以更好地了解用户行为,优化产品设计和功能,提高用户满意度和忠诚度,进而实现商业成功。一、App统计的重要性1. 了解用户行为:通过App统计,开发者可以了解用户在应用程序中的行为模式,如使用频率、停留时间、访问页面等,最终更好地理解用户需求,优化产品设计和功能。 2. 优化产品设计和功能:基于App统计数据,开发者可以发现产品中存在的问题和不足,进而进行优化和改进,提高用户体验和满意度。 3. 监控运营效果:App统计可以帮助开发者了解应用程序的运营状况,如流量、用户增长、活跃度等,最终更好地制定运营策略,实现商业成功。二、App统计数据起源1. 用户行为数据:包括用户在使用应用程序时的各种行为数据,如点击、浏览、购买等。 2. 流量数据:包括来自各种渠道的流量数据,如广告、社交媒体、应用商店等。 3. 设备数据:包括用户设备信息,如设备型号、操作系统版本等。三、App统计指标1. 安装量:应用程序被安装的次数和比例。 2. 活跃度:应用程序被激活的次数和比例,以及用户在应用程序中的停留时间、访问频率等。 3. 留存率:已安装应用程序的用户中,继续使用应用程序的比例。 4. 转化率:用户在应用程序中的购买、注册、分享等行为比例。四、App统计工具常用的App统计工具有谷歌 Analytics、AppAnnie、Segment.io等。这些工具可以帮助开发者收集、分析和可视化各种数据,提供丰富的数据报告和分析结果,帮助开发者更好地了解应用程序的表现和用户行为。App统计是开发者和运营者必不可少的重要工具,可以帮助他们更好地了解用户行为,优化产品设计和功能,提高用户体验和满意度,实现商业成功。 极光分析//github 集成 dependencies:flutter_plugin_engagelab:git:url: git://github.com/jpush/janalytics-flutter-plugin.gitref: master // pub 集成 dependencies:janalytics: 2.1.9 APPinstall 免费dependencies: openinstall_flutter_plugin: ^2.1.2 友盟SDK,老牌统计SDK但是目前已经收费在工程 pubspec.yaml 中加入 dependencies: umeng_common_sdk: ^1.2.3
2024-04-10 105 次阅读
前端

Flutter性能优化之Container替换

很多开发者使用Flutter开发的时候都遇到性能瓶颈,其实降低WidgetTree渲染负担才是王道。有时候选择适合的组件是最好的办法。Flutter的Container组件是使用频率最高的组件,那么今天我们就用它来展开聊聊。Flutter Container组件的用途Flutter Container组件是Flutter框架中的一个重要组件,用于创建具有良好设计的容器。它是Flutter布局系统中的基本组件之一,可用于在Flutter应用程序中构建各种UI布局。用途概述 ----Container组件的主要用途是在Flutter应用程序中创建可容纳其他UI组件的区域。它可以用于各种目的,包括显示图像、文本、表单控件等。通过使用Container组件,开发者可以轻松地创建具有不同尺寸、背景颜色、边距和填充等属性的容器,以实现美观和一致的界面设计。示例应用 ----Container组件来创建一个具有边距和背景颜色的容器。这个容器位于Scaffold部件的body中,用于展示一个中心内容。通过使用Container组件,我们可轻松地控制容器的外观和布局,使其适应应用程序的设计需求。自定义属性 -----除了默认属性之外,Flutter Container组件还支持许多自定义属性,允许开发者根据需要调整容器的外观。这些属性包括:* 边框颜色和宽度:可以使用`borderColor`和`borderWidth`属性来设置容器的边框颜色和宽度。 * 背景颜色:可以使用`background`属性来设置容器的背景颜色。 * 填充:可以使用`clipBehavior`和`decoration`属性来控制容器内的内容如何被剪裁和装饰。 * 尺寸:可以使用`width`和`height`属性来设置容器的尺寸。总结 --Flutter Container组件是Flutter布局系统中的基本组件之一,可用于创建各种具有良好设计的容器。通过使用Container组件,开发者可以轻松地控制容器的外观和布局,以满足应用程序的设计需求。它还支持许多自定义属性,允许开发者根据需要进行调整。掌握Container组件的使用,对于构建美观和一致的Flutter应用程序至关重要。如何渐进的替换Container有时候,你只用到padding或者Margin属性,那么就使用Padding组件,有时候你只用到color,那么就用ColoredBox组件,而不是使用Container,因为这样可以大大降低Widget tree的重量。比如只用到contrians, 就使用ConstrainedBox(constraints: constraints)const SizedBox( height: kBrandDetailHeaderHeight, width: double.infinity, child: ColoredBox( color: Colors.black45, child: shrinkBox, ), ), 如果使用Container,那么较多的widget tree在一些渲染次数较多的情况下,会带来一定的压力好了,具体的情况根据自己使用的属性进行合理替换即可。
2024-04-10 59 次阅读
网信办:网购人脸识别属于个人信息过度收集
资讯

网信办:网购人脸识别属于个人信息过度收集

在4月9日的国务院政策例行吹风会上,国新办邀请了相关负责人,详细阐述了《中华人民共和国消费者权益保护法实施条例》的相关内容。其中,国家网信办网络法治局的尤雪云局长特别就《条例》第23条进行了深入解读。尤雪云局长明确指出,该条例明确规定了经营者在为消费者提供商品或服务时,必须承担起保护消费者个人信息的责任。她强调,经营者不得采取过度收集消费者个人信息的方式,也不得使用诸如一次概括授权、默认授权等手段,强制或变相强制消费者同意收集、使用与其经营活动无直接关联的个人信息。为了更具体地解释这一点,尤雪云局长以网购为例进行了详细阐述。她提及,在网购过程中,消费者的必要个人信息主要包括注册时所用的移动电话号码,也就是手机号;收货人的姓名、地址和联系电话;以及支付时间、支付金额和支付渠道等支付信息。她明确指出,如果经营者收集的信息超出了这些范围,比如进行人脸识别等,那就属于过度收集,不再属于必要个人信息的范畴。尤雪云局长的解读,不仅使公众对《条例》第23条有了更深入的理解,也提醒广大消费者在日常生活中要更加注意个人信息的保护,同时也对经营者提出了明确的规范要求,能帮助并引导维护公平、健康的消费环境。
2024-04-09 70 次阅读
ServBay,为MacOS PHP程序员打造的开发工具
软件

ServBay,为MacOS PHP程序员打造的开发工具

ServBay 的功能集专为现代网站开发进行了定制,提供了多样性和高效性。它支持多个 PHP 版本,使不同项目需求下的同时运行不同版本成为可能。Node.js 支持把它能力扩展到基于 JavaScript 的项目,使其成为一个全面的工具包。快速版本切换提高了生产力,允许在不同环境之间无缝切换。本地 DNS 功能简化了网络请求管理,对于本地测试至关重要。除此之外,ServBay 还为定制软件重新编译提供了一个辅助开发包,满足独特项目需求。这些功能的结合使 ServBay 成为开发者的灵活且强大的解决方案。ServBay是一个集成式、图形化、一键安装的本地Web开发环境,专为Web开发者和PHP开发者设计,特别适用于macOS操作系统。它包含了一系列常用的Web开发服务软件和工具,涵盖了Web服务器、数据库、开发语言、邮件服务器、队列服务等,目的是为了为开发者提供一个便捷、高效、统一的开发环境。ServBay的核心特性包括:支持多个PHP实例同时运行、自定义域名及SSL支持、开机启动和菜单栏快速操作、命令行支持、统一服务管理、支持Docker和Nodejs等。它还具有干净的系统环境,支持内网穿透,以及本地网站共享给其他协作人员的功能。ServBay的目标是提供一个快速、全面、高性能、安全的开发环境,使开发者能够更轻松地进行开发、测试和调试工作。下载与安装ServBay 提供了简便的下载和安装过程,让您快速搭建本地Web开发环境。请参考和仔细按照下面的步骤进行操作。下载 ServBay您可以借助以下链接下载最新版本的 ServBay:https://www.servbay.com/请注意,下载得到的文件是一个 .dmg 文件,例如 ServBayInstaller-v1.1.1.dmg。安装 ServBay双击打开下载好的 .dmg 文件。在打开的窗口中,将 ServBay.app 图标拖动到应用程序(Applications)目录。安装完成后,您可以在应用程序(Applications)目录中找到 ServBay。卸载 ServBay如果您需要卸载 ServBay,只需执行以下步骤:打开 Finder。转到应用程序(Applications)目录。将 ServBay.app 拖动到废纸篓(Trash)。清空废纸篓以彻底删除 ServBay。你可能还需要清理ServBay Helper。sudo launchctl unload /Library/LaunchDaemons/Dev.ServBay.macOS.ServBay.Helper.plist sudo rm /Library/LaunchDaemons/Dev.ServBay.macOS.ServBay.Helper.plist sudo rm /Library/PrivilegedHelperTools/Dev.ServBay.macOS.ServBay.Helper 现在,您已成功安装 ServBay,可以开始享受本地Web开发的便捷体验!
0001-01-01 161 次阅读
软件

ZSH 终级Shell

Zsh是一种流行的命令行shell,它是一种用户与计算机交互的界面。它是由Unix系统中的传统shell发展而来的,并且具有许多强大的功能和灵活性。Zsh是一个开源项目,由一群开发者共同维护和开发。它提供了一个高度可配置的环境,用户能够依据自己的需求来定制自己的shell环境。通过使用Zsh,用户可以更好地控制他们的命令行界面,提高工作效率,并减少出错的可能性。Zsh的主要特点包括:* 强大的自动补全功能:Zsh可以结合用户输入的前几个字符或单词来预测用户想要输入的内容,最终减少了手动输入的麻烦。 * 灵活的命令历史:Zsh能够记住用户以前执行过的命令,并在用户输入时提供建议,这使得用户可以更快地执行相同的命令或修改它们。 * 强大的颜色和格式化输出:Zsh允许用户为输出设置不同的颜色和格式,为了更好地区分不同的命令和输出。 * 高度可配置:Zsh允许用户根据自己的喜好和需求来定制许多方面,包括主题、命令行格式、快捷键等。 * 集成和其他工具:Zsh可以与其他工具和软件包集成,例如通过使用脚本语言编写的脚本来自动化任务或自动化某些交互式操作。总结下来,Zsh是一种非常强大的命令行shell,它提供了许多高级功能和灵活性,使得用户可以更高效地使用计算机。它适用于各种操作系统,包括Linux、macOS和Windows等。对于那些需要高度可配置和灵活性的用户来说,Zsh是一个非常值得尝试的工具。zshZsh 终极Shell参考地址:https://github.com/robbyrussell/oh-my-zsh 俗话说活到老学到老,昨天看一个同事在用Zsh,看上去还挺好的,就做了一下研究。1 安装Mac OSX: 默认都带了ZshUbuntu: apt-get install zshCentOS: yum install zsh2 切换默认的 shellchsh –s $(which zsh)安装oh-my-zshoh-my-zsh是一个开源的zsh主题库,可以对zsh进行初始配置 sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"4 使用插件zsh的配置文件默认在~/.zshrc,下面这一行是对插件的定义: plugins=(git bundler osx rake ruby) 所有的插件列表在:https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins5 修改主题风格主题风格对应的在.zshrc中的字段是: ZSH_THEME="robbyrussell" 所有的主题风格地址在: https://github.com/robbyrussell/oh-my-zsh/wiki/themes6 自动更新默认情况,用户会收到自动更新的提示。如果不需要自动更新,更改下面的字段 DISABLE_AUTO_UPDATE=true 手动更新是: upgrade_oh_my_zsh
0001-01-01 60 次阅读
知识

什么是 XML,XML有些什么用途

可扩展标记语言 (XML) 允许您以可共享的方式定义和存储数据。XML 支持计算机系统(如网站、数据库和第三方应用程序)之间的信息交换。预定义的规则简化了在任何网络上以 XML 文件的形式传输数据的过程,接收者可以使用这些规则准确高效地读取数据。为什么 XML 很重要?可扩展标记语言 (XML) 是一种提供规则来定义任何数据的标记语言。与其他编程语言不同,XML 本身无法执行计算操作。相反,任何编程语言或软件都可以用于结构化数据管理。例如,考虑一个带有注释的文本文档。注释可能会给出如下建议:将标题加粗这个句子是标题这个词是作者此类注释在不影响文档内容的情况下提高了文档的可用性。类似地,XML 使用标记符号来提供关于任何数据的更多信息。其他软件(如浏览器和数据处理应用程序)可以使用这些信息更有效地处理结构化数据。XML 标签您可以使用标记符号(在 XML 中称为标签)来定义数据。例如,为了表示书店的数据,您可以创建 <book>、<title> 和 <author> 等标签。一本书的 XML 文档的内容如下:<book><title> Learning Web Services </title><author> Mark Wilkins </author></book>标签带来了复杂的数据编码,以集成跨不同系统的信息流。使用 XML 有哪些好处?XML 允许您将数据与数据描述一起传输,防止数据完整性丢失。您可以使用此描述性信息执行以下操作:验证数据准确性为不同用户自动自定义数据表示跨多个平台一致存储数据 提高搜索效率像搜索引擎这样的计算机程序可以比其他类型的文档更高效、更精确地对 XML 文件进行排序和分类。例如,单词 mark 可以是名词,也可以是动词。基于 XML 标签,搜索引擎可以准确地对相关搜索结果的标记进行分类。因此,XML 可以帮助计算机更高效地解释自然语言。设计灵活的应用程序使用 XML,您可以方便地升级或修改应用程序设计。许多技术,特别是较新的技术,都具有内置的 XML 支持。这些技术可以自动读取和处理 XML 数据文件,这样您就可以在不必重新格式化整个数据库的情况下进行更改。 XML 有哪些应用?可扩展标记语言 (XML) 是数千种应用程序中的底层技术,从文字处理等常见的生产力工具到图书出版软件,甚至是复杂的应用程序配置系统都包含在其范围之内。数据传输您可以使用 XML 在以不同格式存储相同数据的两个系统之间传输数据。例如,您的网站以 MM/DD/YYYY 格式存储日期,但您的会计系统以 DD/MM/YYYY 格式存储日期。您可以使用 XML 将数据从网站传输到会计系统。您的开发人员可以编写代码自动转换以下内容:将网站数据转换为 XML 格式将 XML 数据转换为会计系统数据将会计系统数据转换回 XML 格式将 XML 数据转换回网站数据Web 应用程序XML 提供了您在网页上看到的数据的结构。其他网站技术(如 HTML)使用 XML 向网站访客提供一致且相关的数据。例如,考虑一个销售服装的电子商务网站。该网站使用 XML 根据用户偏好创建定制网页,而不是向所有访客展示所有服装。该网站通过筛选 <brand> 标签显示特定品牌的产品。文档您可以使用 XML 指定任何技术文档的结构信息。然后,其他程序会处理该文档结构使其灵活呈现。例如,段落、编号列表中的项目和标题有 XML 标签。使用这些标签,其他类型的软件会自动准备文档以供打印和网页发布等用途。数据类型许多编程语言都支持 XML 作为数据类型。有了这种支持,您可以轻松地用其他语言编写可以直接用于 XML 文件的程序。XML 文件有哪些组成部分?可扩展标记语言 (XML) 文件是一种基于文本的文档,可以使用 .xml 扩展名保存。您可以像其他文本文件一样编写 XML。要创建或编辑 XML 文件,您可以使用以下任一方法: 文本编辑器,如 Notepad 或 Notepad++在线 XML 编辑器网络浏览器任何 XML 文件都包括以下组成部分。XML 文档<xml></xml> 标签用于标记 XML 文件的开头始和结尾。这些标签中的内容也称为 XML 文档。这是任何软件处理 XML 代码所需的第一个标签。XML 声明XML 文档的开头是有关 XML 本身的一些信息。例如,其中可能会提到它所遵循的 XML 版本。这个开头称为 XML 声明。示例如下。<?xml version="1.0" encoding="UTF-8"?>XML 元素在 XML 文档中创建的所有其他标签都称为 XML 元素。XML 元素可以包含以下功能:文本属性其他元素所有 XML 文档都以主标签开头,称为根元素。例如,考虑以下 XML 文件。<InvitationList><family>      <aunt>      <name>Christine</name>       <name>Stephanie</name>      </aunt></family></InvitationList><InvitationList> 是根元素;family 和 aunt 是其他元素名称。XML 属性XML 元素可以具有其他描述符,称为属性。您可以定义自己的属性名称,并在引号中写入属性值,如下所示。<person age=“22”>XML 内容XML 文件中的数据也称为 XML 内容。例如,在 XML 文件中,您可能会看到这样的数据。 <friend>      <name>Charlie</name>       <name>Steve</name></friend>数据值 Charlie 和 Steve 是内容。什么是 XML 架构?可扩展标记语言 (XML) 架构是指描述 XML 文件结构的某些规则或限制的文档。您可以用几种不同的方式描述这些约束,如:确定元素顺序的语法规则内容必须满足的是或否条件XML 文件中内容的数据类型数据完整性约束例如,书店的 XML 架构可能会施加如下约束:book 元素的属性有 title 和 author。book 元素嵌套在具有属性名的 category 元素下。书的价格是嵌套在 book 下的单独元素。 为了满足这些约束,我们编写了如下所示的 XML 文件。 <category name=“Technology”><book title=“Learning Amazon Web Services”, author=“Mark Wilkins”><price>$20</price></book></category>XML 架构在不同的软件应用程序创建和使用 XML 文件的方式上实现了一致性。一些行业实施了特定于其操作的 XML 架构,以降低为企业数据传输编写 XML 代码的复杂性。例如,可伸缩矢量图形 (SVG) 是用于描述计算机图形相关数据的 XML 规范。软件开发人员编写 XML 文件,以满足此类行业规范。什么是 XML 解析器?可扩展标记语言 (XML) 解析器是一种可以处理或读取 XML 文档以提取其中数据的软件。XML 解析器还可以检查 XML 文件的语法或规则,并可以根据特定的 XML 架构对其进行验证。由于 XML 是一种严格的标记语言,如果存在任何验证或语法错误,解析器将不会处理该文件。例如,如果以下任一条件成立,XML 解析器将给出错误:缺少结尾标签或结束标签属性值没有引号未满足架构条件软件应用程序使用 XML 解析器将 XML 文件转换为本地数据类型。这样,他们可以专注于应用程序逻辑,而不必深入 XML 本身的细节。 XML 与 HTML 有哪些不同?超文本标记语言 (HTML) 是大多数网页中使用的语言。Web 浏览器可以处理 HTML 文档并将其显示为多媒体页面。万维网联盟 (W3C) 是一个国际社区,旨在制定协议和指导方针以确保网络长期发展。W3C 建立了 HTML 和可扩展标记语言 (XML) 标准,网站开发人员实施这些标准可确保一致性和质量。XML 与 HTML虽然 HTML 和 XML 文件看起来非常相似,但有一些关键区别。用途HTML 的用途是表示和显示数据。但 XML 用于存储和传输数据。标签HTML 有预定义的标签,用户在 XML 中可以创建和定义自己的标签。语法规则HTML 和 XML 语法之间有一些微小但重要的差异。例如,XML 区分大小写,但 HTML 不区分大小写。如果将标签写为 <Book> 而不是 <book>,XML 解析器将给出错误。
0001-01-01 80 次阅读
前端

使用Gap为 Flutter 添加间隙

最近,我希望Row或Column小部件有一个spacing属性来配置子小部件之间的间隙。因为我发现向这些子项添加填充太麻烦了 - 既因为这进一步缩进了小部件树中的小部件,又因为很难决定是否应该仅添加底部填充,或仅添加顶部填充,或同时添加填充子部件的顶部和底部——我最常使用SizedBox部件来引入间隙。还有另一个不便之处:我必须根据是否将间隙添加到or来显式设置widthor属性,并且要使用常量,我必须引入and或 类似的东西。heightRowColumnsmallVerticalGapsmallHorizontalGap我们可以创建一个Gap自动执行正确操作的小部件吗?我们可以!差距这是我的实现。因为它的布局取决于小部件direction的Flex子级(Spacer小部件也有同样的问题),所以仅使用小部件无法实现这一点。我需要一个特殊的渲染对象来执行特殊的布局。因此,Gap应是以下子类SingleChildRenderObjectWidget:class Gap extends SingleChildRenderObjectWidget { const Gap({Key key, this.size = 16}) : assert(size != null), super(key: key); final double size; … Gap现在需要实现一个createRenderObject创建渲染对象的方法。我将RenderGap按照 Flutter 的命名约定将此对象称为。 …… @override RenderGap createRenderObject(BuildContext context) { return RenderGap(size); } …… 由于Gap有一个必须传递的属性,我还实现了updateRenderObject确保对该属性的更改也会影响我的渲染对象: …… @override void updateRenderObject(BuildContext context, RenderGap renderObject) { renderObject.gapSize = size; } } 它RenderGap作为子类实现RenderBox,提供了所需的大部分功能。因为渲染对象(与小部件相反)是可变的,所以我确保对属性的更改gapSize会触发重新布局,但前提是尺寸确实发生变化。class RenderGap extends RenderBox { RenderGap(this._gapSize); double _gapSize; double get gapSize => _gapSize; set gapSize(double gapSize) { if (_gapSize != gapSize) { _gapSize = gapSize; markNeedsLayout(); } } … 我们已经完成了样板代码。为了实现布局,我们必须重写performLayout必须设置对象size属性的方法。文档说它也应该尊重对象的constraints,但现在,我忽略它们,因为我有点着急。希望我的假设是正确的,performLayout只有在对象被添加到渲染树后才会被调用,因此总是有一个parent.我根据其父级的布局方向分配大小,如下所示: … @override void performLayout() { final parent = this.parent; if (parent is RenderFlex) { if (parent.direction == Axis.horizontal) { size = Size(_gapSize, 0); } else { size = Size(0, _gapSize); } } else { throw FlutterError(‘Gap must be used inside a Flex widget’); } } } 现在,可以向列或行添加间隙:Column( Children: [ Text('这是一条消息'), Gap.large, Row( Children: [ Spacer(), RaishedButton( onPressed: () => null, child: Text('取消'), ), Gap .small, RaisingButton( onPressed: () => null, child: Text('OK'), ), ], ), ] ); 为了完整的实现,还必须重写这四种compute{Min,Max}Intrinsic{Width,Height}方法。gapSize如果存在带有正确“ ` 的parent类,则它们应该返回而不是 0 。RenderFlexdirection
2024-04-07 58 次阅读
不兼容安卓!华为鸿蒙原生应用超4000个:四季度正式商用
资讯

不兼容安卓!华为鸿蒙原生应用超4000个:四季度正式商用

快科技4月7日消息,华为今天正式宣布,目前已有超4000个应用加入鸿蒙生态。值得注意的是,原生鸿蒙的扩展进程已经大大加快,华为今年1月18日宣布首批200多家应用厂商开发,到3月底已经超过4000个,短短两个月时间增长幅度高达20倍。自去年9月份华为宣布鸿蒙原生应用全面启动以来,各类开发者纷纷加入,目前鸿蒙生态已实现了完善的垂直行业覆盖,包括便捷生活、出行文旅、金融理财、社交资讯、生产力工具、影音娱乐、游戏等各个领域。甚至央广网App已经完成了鸿蒙原生应用的全量版本开发,B站、小红书、爱奇艺、喜马拉雅、WPS Office、招商银行、邮储银行等头部应用则已完成Beta版本开发。另外,多个省市也已启动本地政务民生应用和垂域应用、本地媒体平台的鸿蒙原生应用开发,包括上海民生服务超级App随申办、浙江浙里办App等,包括网上国网App也已经启动鸿蒙原生应用及元服务的开发,极大的完善了鸿蒙生态的体验。目前,HarmonyOS NEXT鸿蒙星河版开发者预览已面向开发者开放申请,拥有原生精致、原生安全、原生智能、原生易用、原生流畅、原生互联6大极致体验。HarmonyOS NEXT鸿蒙星河版将于今年四季度发布面向消费者的商用版本,系统底座全线自研,不再兼容安卓App,彻底与安卓划清界限。
2024-04-07 46 次阅读 快科技
前端

react中如何使用Pug

在 React 中使用 Pug(以前称为 Jade)模板引擎是可能的,但需要进行额外的配置和使用适当的加载器。以下是一些步骤来在 React 中使用 Pug:1. 安装必要的依赖项: ``` npm install pug-loader pug ```2. 在项目中创建一个使用 Pug 语法编写的 `.pug` 文件,例如 `Component.pug`: ```pug .component h1 This is a title p This is a paragraph ```3. 在 React 组件中导入 `.pug` 文件并使用它: ```jsx import React from 'react'; import PugComponent from './Component.pug'; const MyComponent = () => { return ( <div> {PugComponent()} </div> ); }; export default MyComponent; ``` 在上述代码中,我们直接导入 `.pug` 文件并将其作为函数执行,以生成 React 元素。4. 配置 Webpack 来处理 Pug 文件: 在 `webpack.config.js` 文件中添加以下配置: ```javascript module.exports = { // ... module: { rules: [ // ... { test: /\.pug$/, use: 'pug-loader' } ] } }; ``` 这将告诉 Webpack 遇到 `.pug` 文件时使用 `pug-loader` 加载器进行处理。5. 构建并运行 React 应用程序,Pug 模板将被编译并生成 React 组件。请注意,使用 Pug 来编写 React 组件可以简化 HTML 代码的书写,但也会引入附加的编译步骤和依赖项。鉴于这个原因,许多开发人员选择在 React 中直接编写 JSX,因为它是原生的,在组件代码中使用 JavaScript 来生成 HTML 结构。vue适合用pug还是reactPug 是一种模板引擎,主要用于简化 HTML 代码的书写。它使用类似缩进的语法,可以让 HTML 结构更加清晰和易读。Pug 适用于任何基于 JavaScript 的前端框架,包括 Vue 和 React。在 Vue 和 React 中,你可以选择使用 Pug 或原生的 JSX 来编写模板。以下是一些考虑因素来选择适合你的模板语言:## Vue + Pug- **优点**: - Pug 可以简化模板中的 HTML 代码,减少冗余和重复的标签。 - Pug 可以提高代码的可读性和可维护性,尤其当模板较为复杂时。 - Vue 官方提供了与 Pug 集成的插件,使得在 Vue 项目中使用 Pug 更加方便。- **缺点**: - Pug 是一种额外的语言,需要学习和适应其语法,对于团队中没有 Pug 经验的开发人员来说,上手可能需要一些时间。 - 使用 Pug 可能需要额外的配置和加载器,以使其与 Vue 的构建工具集成。## React + JSX- **优点**: - JSX 是 React 的官方模板语言,它与 JavaScript 紧密集成,使得编写和理解代码更为自然。 - JSX 具有更广泛的社区支持和文档资源,因为它是 React 开发的主要模板语言。 - 对于有 JavaScript 经验的开发人员来说,上手 JSX 相对容易,因为它与原生 JavaScript 更类似。- **缺点**: - JSX 在一些情况下可能会使 HTML 结构变得冗长,尤其是当嵌套较深或结构较复杂时。 - 对于不熟悉 JavaScript 的设计师或前端专家来说,上手 JSX 可能需要一些时间。总而言之,使用 Pug 还是 JSX 取决于个人偏好、项目需求以及团队的技术栈。如果你喜欢简化的 HTML 语法并希望提高代码的可读性,同时也愿意学习和使用额外的模板语言,那么在 Vue 或 React 中使用 Pug 可以是一个好的选择。如果你更喜欢与原生 JavaScript 集成且不需要额外学习的语法,那么在 React 中使用 JSX 是更常见的选择。这只是一个建议,并且个人和团队的首选可能会有所不同。最重要的是选择符合你自己和团队需求的模板语言。希望对你有所帮助!如有其他问题,请随时提问。
2024-04-07 81 次阅读