bt365体育投注.主頁欢迎您!!

    <acronym id="zvmrr"></acronym>
    <td id="zvmrr"></td>
  • <tr id="zvmrr"><label id="zvmrr"></label></tr>
  • <acronym id="zvmrr"></acronym>
  • 徐九

    徐九 查看完整档案

    北京编辑北京工业大学  |  计算机科学与技术 编辑SegmentFault  |  技术编辑 编辑 github.com/Sapesn 编辑
    编辑

    SegmentFault 思否社区老编辑

    饮水机の守护神,艾泽拉斯的勇士,朝阳区埃米纳姆,我爸我妈的儿子,深夜撰稿者,统领一猫一狗的国王,Glory to the Sin'dorei!

    个人动态

    徐九 发布了文章 · 今天 12:09

    微软中国与小冰公司达成战略合作,深化 AI + 云计算商业化行业解决方案落地

    微软 x 小冰
    图为微软公司副总裁、微软中国区首席运营官邹作基(左)、小冰公司首席执行官、原微软(亚洲)互联网工程院常务副院长李笛(中)和小冰公司董事长、原微软全球执行副总裁沈向洋博士(右)

    2020年11月24日,北京 —— 今日,微软中国与小冰公司在北京宣布达成战略合作伙伴关系,强强联手,面向广大 ToB 重点行业客户,联合推出一系列人工智能+云计算商业化解决方案。首批微软和小冰共同联合推出的解决方案将覆盖人工智能金融、人工智能汽车及人工智能内容生产等三个垂直领域。双方随着人工智能与云计算联合技术优势的加深,将在今后不断拓展至更多垂直领域。


    以“2020 行业深耕计划”为契机,微软中国将为小冰公司提供一系列优势资源,全面联合市场拓展、联合销售,以及合作伙伴生态系统的联合创新。此举旨在帮助双方重点行业客户在数字化转型的大潮中,进一步加速向智能化时代迈进。小冰公司董事长、原微软全球执行副总裁沈向洋博士,微软公司副总裁、微软中国区首席运营官邹作基,及小冰公司首席执行官、原微软(亚洲)互联网工程院常务副院长李笛共同出席了战略发布仪式。

    clipboard.png
    小冰公司董事长、原微软全球执行副总裁沈向洋博士

    小冰公司董事长,原微软全球执行副总裁沈向洋博士表示:“大时代的变革呼唤创新。作为面向新交互形式的完整的人工智能技术框架,自发布以来,小冰一直引领着人工智能的技术创新。得益于框架本身的完备性,小冰在垂直领域的应用同样展现出明显的差异化优势及人工智能的巨大潜能。接下来,小冰公司将与微软中国联手,以全新的战略合作形式,进一步共同推动创新变革,共同为商业化客户创造价值。”

    clipboard.png
    微软公司副总裁、微软中国区首席运营官邹作基

    微软公司副总裁、微软中国区首席运营官邹作基表示:“我们非常高兴小冰以全新的形式成为微软中国人工智能商业化解决方案领域的战略合作伙伴。小冰诞生于微软,在中国出生,是多年以来微软人工智能创新的成果,也是微软技术创新于中国、服务于中国的典型例证。微软中国与小冰公司在引领数字化转型机遇的理念、价值观与使命感,以及技术基础上的一脉相承,也为双方的合作奠定了坚实的基础。相信小冰作为全球领先的交互式人工智能应用,将能够与微软在行业应用和商业推广中的优势资源相互结合,加速推进人工智能交互在各行各业的商业推广,为构建跨界生态、赋能行业转型升级提供源源不断的新动能。”

    clipboard.png
    小冰公司首席执行官、原微软(亚洲)互联网工程院常务副院长李笛

    同气连枝,强强携手,聚焦场景,加速关键行业的智能化跃迁

    小冰是一套完整的、面向交互全程的人工智能交互主体基础框架,包括核心对话引擎、多重交互感官、第三方内容的触发与第一方内容生成,和跨平台的部署解决方案,相关领先技术覆盖自然语言处理、计算机语音、计算机视觉和人工智能内容生成等人工智能领域。该框架是目前全球范围内最成熟和最大的该类框架,其交互总量约占全球人工智能交互总量的60%。

    小冰项目于 2013 年底在微软(亚洲)互联网工程院立项,采取代际更新的方式,逐年完善其基础框架结构,实现大规模跨平台部署、多模态交互、全双工语音交互,及包括文本创作、声音创作、视觉创作在内的人工智能创造能力。在全球多个国家,小冰单一品牌已覆盖 6.6 亿在线用户、4.5 亿台第三方智能设备和 9 亿内容观众。2020年7月13日,小冰从微软公司分拆,独立发展。

    微软中国与小冰公司强强联手、共同推出的人工智能商业化解决方案,将采用微软智能云 Azure 作为服务中国及全球市场的云计算运营平台,将完善的人工智能交互体验融入关键行业的典型应用场景中,通过打造可复制、可推广、可成长的解决方案,满足客户推进业务模式转型创新的多样化需求。以小冰在To C领域技术优势和独有的竞争力,以及 To B 商业实践中所取得的成功经验为基础,结合微软中国在关键行业中的广泛而深入的客户资源,首批微软和小冰共同联合推出的解决方案将覆盖人工智能金融、人工智能汽车、人工智能内容生产等三个垂直领域。

    • 人工智能金融

    小冰是目前全球范围内规模第一的金融文本摘要生成平台。自2017年11月起,小冰与万得资讯、华尔街见闻等国内主要金融信息服务提供商合作,为其用户提供由人工智能技术生成的上市公告文本摘要。上述服务覆盖全部26类金融类别,服务对象包括国内90%以上的金融机构交易员及40%以上的个人金融交易者。小冰人工智能技术的赋能,有效保证金融信息服务的稳定性、准确性及时效性,弥合投资机构、投资者与市场之间的信息鸿沟。

    南京万得资讯科技有限公司总经理朱海峰表示:“小冰帮助我们在争分夺秒的金融交易市场,输送最新鲜的资讯信息,实现金融信息的全面和及时传递,助力万得用户获取及时、准确、完整的金融信息。未来,万得将与小冰继续加深合作,给用户带来更多创新的产品体验。”

    • 人工智能汽车

    在汽车领域,小冰已成为华人运通等汽车品牌的深度共创合作伙伴,从前装设计阶段开始,与汽车厂商共同打造虚拟出行伙伴,在实现全车级语音控制的基础上,为用户提供自然而富有情感的互动。得益于人工智能技术,车载智能助手不仅仅是一位高效的助手,更是一位知冷暖、懂悲欢的亲密出行伙伴,为用户带来更美好温暖的出行体验,助力汽车厂商向智能化时代跃迁。

    华人运通高合汽车创始人、董事长兼CEO丁磊表示:“华人运通高合汽车具备全球领先、高度智能的开放式H-SOA超体电子电气架构。在微软和人工智能小冰的赋能下,落地全球首个陪伴用户出行的车载情感化智能伙伴HiPhiGo,有与生俱来的学习、创造能力,可以与车主共同进化成长。未来,双方将共担改变人类未来出行的使命和愿景。”

    • 人工智能内容生产

    小冰是人工智能创造领域的先行者,旨在通过人工智能技术,学习优秀的人类创造者的能力,进行基于文本、声音和视觉的内容生成,并倡导通过人工智能技术解决高度定制化内容的供需矛盾。在视觉内容生成领域,小冰的设计能力已在工业设计、数字印刷图案设计、纺织服装面料设计、包装设计等领域落地,旨在协助各领域改善设计方面的短缺。目前,小冰能够稳定设计三十余种主流风格,并实现按需创作,其图案的设计多样性达到 10 的 26 次方。多条面向量产化的生产线已实现产业化贯通,与中国纺织信息中心、国家纺织产品开发中心共同推出的人工智能纺织服装图案设计平台已投入生产。

    国家纺织产品开发中心主任李斌红表示:“智能设计是智能制造的基础,这正是小冰创造力的价值所在。小冰的人工智能设计能力,赋能成千上万的纺织服装制造企业,帮助企业释放设计潜能,实现大规模、多样化、质量稳定的创意设计,重构产业发展优势,使 AI 设计能力成为全球时尚新的生产力。”

    鲁丰织染有限公司总经理张战旗表示:“小冰针对我公司产品市场定位量身打造花型设计,提升设计能力和设计效率,提高产品附加值和市场竞争力,同时给我们带来更丰富的设计灵感和系列化的设计构思。小冰人工智能设计能力应用在服装纺织制造企业,从针对品牌客户的精准设计开发,到工艺的具体实现,都具有划时代的意义。”

    深化战略合作伙伴发展,微软中国为小冰公司提供全链条支持

    在不久前召开的微软中国年度合作伙伴生态大会(CPC 2020)上,微软中国正式推出“合作伙伴深耕项目”及作为其核心举措的“2020 行业深耕升级计划”,承诺充分动员微软各个部门,以产品技术、销售渠道、客户网络以及整个生态系统的合力,为合作伙伴扩大影响、提升受益、转型发展提供全方位的鼎力支持。

    在整个生态中,小冰公司作为微软中国的战略合作伙伴,将得到微软中国为合作伙伴生态系统提供的优势资源与全力支持,拓展更广阔的发展空间。事实上,在今年微软合作伙伴大会现场,小冰已面向整个微软中国区生态系统生动展现了自己的实力。接下来,微软中国还将在一系列面向客户网络及合作伙伴生态系统的公开市场活动中,为小冰公司提供多样化的舞台,积极探索和拓展人工智能商业化应用的前景与未来。

    segmentfault 思否

    查看原文

    赞 7 收藏 0 评论 0

    徐九 发布了文章 · 11月23日

    为什么你的“开发速度”和“产品性能”,都比不过竞品?丨开发者必读

    牛顿

    物理学家牛顿曾经说过:If I have seen further, it is by standing on the shoulders of giants。

    荀子在《劝学》中也说过:假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。

    他们所表达的意思其实是一致的,很多事情仅仅靠自己的力量是难以解决的,但如果我们懂得利用工具就能够轻松完成。

    在项目开发中也是如此,开发者们也要懂得“善假于物”和“站在巨人的肩膀上”,合理的使用第三方工具,一样可以实现事半功倍的效果。

    随着移动互联网的发展,大部分中小企业比拼的不仅仅是产品功能,而是产品交付速度、质量、性能以及针对特定场景的定制能力。因此,对于底层技术和架构而言,完全可以借助垂直领域的第三方工具,提高开发速度,并得到更好的产品性能。

    以企业最普遍的场景 —— 表格为例,与大家探讨,第三方工具是如何帮助开发人员解放生产力,又是如何帮助他们优化产品性能和用户体验,从而保证为最终用户提供更具价值和更高质量的产品。

    一、前言

    大家应该都知道,很多企业的 IT 业务是从一张表格开始的。团队沟通中的信息共享大量依赖于表格,文档、报告、凭证以及基础数据的汇总分析,大部分都需要依靠表格的形式来进行决策的支持。

    而伴随着企业数字化转型的迫切需要,远程办公模式已正式开启,纯在线的表格产品俨然成为了很多企业必备的工具之一。但综合性的协同办公产品大部分将更多的精力投入在了文档工具的优化当中,对于表格场景并没有投入足够多的时间与精力;另一方面表格产品看似很简单,但背后其实涉及到很多的技术实现,以及产品团队对于表格场景的熟悉度处理,目前的泛用性在线表格工具都很难具备相应的经验与能力。

    因此,如果想要在企业 OA 系统中实现类似 Excel 的在线表格分析功能,为了避免耗费大量的开发精力却只得到一个”鸡肋产品“,最好的办法就是接入更专业的前端表格控件作为辅助。虽然,这类控件数量众多,但经过我的调查研究,能把“表格技术”这一细分场景发挥到极致的产品屈指可数。

    究其原因,这些产品大多未攻克以下四个技术难点。

    二、表格控件的四大技术难点

    B/S 作为 Web 兴起之后的一种网络结构模式,统一了客户端,将系统功能实现的核心部分集中到服务器上。

    但随之而来的问题是多浏览器差异、浏览器沙箱机制、内存访问受限、客户端性能低下等。作为数据载体的表格,最直接的影响就是经常会被“吐槽”卡顿,UI 界面“假死”,界面操作不流畅等。

    引起这些问题的症结在于浏览器渲染引擎的基础原理:当界面元素越多,浏览器的渲染时间会显著增长,内存消耗会越大。这对于强计算逻辑的前端表格控件来说,无疑是棘手的难题。

    由此可见,开发一款前端表格控件需要攻克这四个技术难点:性能、内存消耗、可靠性和操作体验。

    1、性能

    现代应用程序为了追求更好的用户体验,需要对 UI 界面反复优化,而频繁的修改界面 UI 元素,将引发多次浏览器重绘。在这个过程中,UI 元素的创建及修改,会激活内部垃圾回收机制,影响数据处理效率。

    除此之外,前端开发环境的多样化、各类高 DPI 设备、手机、平板、4K 显示屏、企业大屏等,这些无不加重了企业应用系统的处理负担。

    为此,业内目前最佳的解决方案是使用 Canvas 绘制模型。

    Canvas 主要用于在网页上绘制图像,可以将其理解为画布,开发者们在这个画布上构建想要的效果。它与在浏览器中运行的其他应用有所不同,由于 Canvas 只在屏幕上特定的区域执行并显示效果,可以说它的功能是独占的,因此不太会受到页面上其他内容的影响,反之也是如此。

    作为一种不依赖于浏览器解析的方式,使用 Canvas 绘制模型不仅可以解决性能问题,和 DOM 相比还提供了不失真的页面打印,做到所见即所得。

    2、内存消耗

    随着前端工程化的高速发展,各种前端工程脚手架日渐成熟,WebComponent 标准被提上日程,企业开始由 C/S 向 B/S 应用转型。为了优化内存,这就要求前端开发者,需要面对单线程处理复杂业务数据的挑战。

    对于表格控件这类松散的文档结构,业内目前的最佳实践是采用稀疏矩阵存储模型(Sparse Array)来保存数据。

    稀疏矩阵在机器学习方面是很常见的。由于稀疏矩阵含有许多数值为零的元素,可以用来压缩矩阵对象的内存台面空间,或者加速多数机器学习程序。

    而在表格场景中,相较于传统的链式存储或数组存储,稀疏矩阵存储构建了基于行索引的数据字典,在松散布局的表格数据中,稀疏矩阵只会对非空数据进行存储,而不需要对空数据开辟额外的内存空间。

    这种特殊的存储策略,不仅节省了内存消耗,也使得数据片段化变得更加容易。借助这个特性,开发者甚至可以随时替换或恢复整个存储结构中的任何一个级别的节点,实现高效的数据回滚和数据恢复。

    3、可靠性

    传统前端表格应用计算的特点,是没有稳定的框架计算器、语言计算精度差、表格计算依赖复杂。

    随着企业数字系统应用的越来越深入,业务计算方式也变的越来越复杂,灵活度要求也越来越高。为了解决这个问题,必须了解计算引擎的计算流程后进行相应的可靠性优化。

    spreadjs

    如图所示是计算引擎在构建计算依赖链时的一个简单的流程图。表达式树从计算存储模型中找到对应的根节点以及根节点标识,随后遍历整个表达式树,找出其他依赖标识,构建依赖关系。

    当整个依赖链中的任意节点发生变化时,如果沿着这条依赖链,可以查找依赖节点并进行重算,那么在这个过程中,没有在依赖链中的节点是不会发生重算计算的,也就是我们所说的没有脏值运算。

    进行这样的机制优化后,可以大幅提升表格产品的运算速度,从而提供更好的使用体验和更加精准的运算结果。

    4、操作体验

    随着业务场景的丰富,表格系统需要承载更多的功能。例如触摸支持、富文本支持、前端 Excel 导入导出、JSON 存储等。

    我们以触摸支持为例,随着大屏时代的来临,触摸操作成为了一项愈发普遍的使用场景。对于触摸来说,很多时候最难的并不是技术实现,而是对于场景的理解。用手机操作技术文档,单击单元格时,对应的位置是放大还是不放大?

    对于不同的场景,用户需要的反馈是不同的,对于一款优秀的前端表格控件来说,这的确是技术难点,但却值得每一位开发者深入思考,并积极寻求优化方案。


    在一切以用户体验为中心的互联网时代,任何开发活动都应该以改善用户体验为终极目标,产品优化当然也不例外,并且,产品优化最忌陷入纯粹为了追求技术极限而优化的境地。

    而上述四个技术难点,在我和葡萄城的 SpreadJS 产品技术团队详细沟通后,也得到了充分的验证,因为,这同样是他们的客户在实际应用场景中最常面临的问题。

    SpreadJS 纯前端表格控件,由业内最早进行表格产品研发的技术团队——葡萄城推出,如今已完美复刻了 Excel 的 UI 布局、数据透视表、450多种计算公式和182种形状,只要是涉及到 Excel 文件上信息化系统的场景,他们的产品功能都已经覆盖到了。

    spreadjs

    而用户之所以敢于用 SpreadJS 替代传统 Excel,正是基于其产品层面已经完成了大量的优化和迭代任务。据我了解,SpreadJS 在性能优化方面除了引入了 Canvas 绘制模型,还率先使用了双缓存画布技术,从而解决了常见的闪屏问题;此外还提供了支撑复杂逻辑运算的计算引擎,可以帮助开发者打造一个长久稳定且可靠的应用系统。

    想要在产品层面进行优化,一方面需要“吃透”表格产品的底层技术逻辑,另一方面需要有大量实际的场景应用实践,这恰恰想要做独立开发的企业或者泛用性工具平台所不具备的,而借助 SpreadJS 这类专注于垂直领域的表格控件工具,则可以达到事半功倍的效果。

    三、结语

    正如我们前面所说,开发一款前端表格控件最难的不是技术,还有对表格产品的熟悉程度。因为纯技术的问题,在很多时候是难不住开发者的,靠时间与精力的投入总能弥补。然而,一款真正优秀的产品最重要的一点,则是对于应用场景,以及用户使用体验的细节把控。

    就像在表格类工具中有一个算投资回报率的公式,几乎没有人知道这个公式用 Excel、Google Doc 算出来的结果是不一致的。而这个小到会被所有人忽略的细节,也是 SpreadJS 的研发团队告诉我的。

    随着社会的发展,市场需要更灵活、效率更高的开发者解决方案,企业也要同时追求”开发速度“与”产品性能“,这在传统的开发思路中是不可兼得的,但如果做到善假于物,借助第三方工具平台则可以完全实现。

    付出一些成本换来更大的发展机会与空间,谁又能说不是一笔好买卖?

    文中资源扩展阅读:
    SpreadJS 官网:https://www.grapecity.com.cn/...

    segmentfault 思否

    查看原文

    赞 16 收藏 2 评论 0

    徐九 赞了文章 · 11月21日

    Google 2020开发者大会Flutter专题

    由于疫情的原因,今年的Google 开发者大会 (Google Developer Summit) 在线上举行,本次大会以“代码不止”为主题,全面介绍了产品更新以及一系列面向本地开发者的技术支持内容。我比较关注的是移动开发,在本次大会上,关于Flutter 主题的演讲主要从 Flutter 性能方面优化和新功能进行展开。

    作为全球增长速度第二的开源项目,越来越多国内开发者使用 Flutter 实现跨平台开发,包括腾讯英语君团队、阿里闲鱼团队等等。其在 开放性上的进步,得益于开源社区、生态建设、对 Web 的支持。
    在这里插入图片描述
    有兴趣的读者可以通过Google Developer官网进行学习:Google Developer官网

    下面我们就来看一下这些新功能和性能上的优化。

    Flutter 性能优化

    首先为我们带来演讲的是Google 软件工程师李宇骞,他是Flutter 团队的一位软件工程师,主要专注于提升其性能。下面是具体的演讲内容:

    2019 下半年,Flutter 团队共收到 23 个量化的性能提升;2020 上半年,Flutter 团队共收到 27 个量化的性能提升。2020 上半年 Flutter 团队共收到来自 78 位开发者的 49 个性能改进。

    工具的性能十分重要,性能测试也同样至关重要,拥有良好的性能测试可以:

    • 快速重现问题;
    • 迭代和验证解决方案;
    • 提供数据,激励进一步的工作并防止倒退。

    通常,能耗与渲染速度相关,每一帧渲染时间越长则能耗就越高,但能耗并不能衡量渲染速度,因为在某些情况下渲染速度快也可能会导致能耗升高,渲染速度慢也可能不耗能。

    CPU 上运行时间虽然短,但由于新的算法利用了更多的 GPU 核心,所以 GPU 能耗反而增加;有些 CPU 上的任务被别的 I/O 或 GPU 任务阻塞,进行了长时间的等待,而等待的时间内并无过多能耗。

    因此,在速度之外增加能耗测试是十分必要的。因为 Flutter 团队在 GitHub 上收到的大部分能耗问题都和 iOS 相关,所以此次 Flutter 首先加入了 iOS 的能耗测试,Android 的能耗测试工具会于后续加入。

    开发者可以使用 Flutter Gallery App 在 Timeline 中查看 CPU/GPU 的使用率,也可以用集成测试自动检测 CPU/GPU 的使用率。
    在这里插入图片描述

    Flutter 还新加入了 SkSL 着色器编译预热功能,来帮助开发者消除着色器编译卡顿。如果一个 Flutter 程序第一次渲染某类动画时出现明显的卡顿,但是之后渲染这些动画时,卡顿完全消失,那么这就很可能是着色器编译卡顿。开发者可以使用 --trace-skia,然后检查 Timeline 来确认是否为着色器卡顿。
    在这里插入图片描述

    值得一提的是,SkSL 可以实现自动化生成与测试,这对于需要持续更新的 Flutter App 来说,可以节省很多的人力。

    内存和包体积的测试工具

    接下来,是由Flutter 用户体验研究员侯悠扬带来的测试工具专题。侯悠扬于 2017 年加入 Google,并于 2019 年加入 Flutter 团队。她是 Flutter 团队一名用户体验研究员,关注提升 Flutter 产品和开发工具的程序员体验。

    此次,Flutter 团队更新了Dart开发工具。Dart 开发工具是面向 Flutter 和 Dart 开发人员的工具套件,包括如下一些小工具:

    • 布局检查(Inspector)
    • 性能调试(Performance)
    • 内存调试(Memory)
    • 网络调试(Network)
    • 包体积调试(App Size)
    • 调试器(Debugger)
    • 日志(Logging)

    连接上设备然后运行Flutter应用,点击Android Studio底部工具栏中的【Open DevTools】按钮即可开启调试功能。

    内存调试器功能

    Flutter的内存调试器提供如下功能:

    • 事件窗格(Dart 和 Android 内存)
    • 手动和自动快照(snapshot)和垃圾回收(GC)
    • 内存分析
    • 内存堆分配累加器(Heap Allocation Accumulators)
    • 通过命令行界面将内存统计信息到处到 JSON 文件

    内存测试

    内存测试提供如下功能:

    • 通过 ADB 交互直接进行内存测试
    • Dart 开发工具内存测试
    • iOS 内存测试

    更多信息可以通过这篇由 Flutter 工程师撰写的文章进行了解:怎么进行Flutter内存测试

    包体积调试器功能

    包体积调试器提供如下功能:

    • 可视化了应用程序的总大小,包括功能级别的 Dart AOT 快照;
    • 分析快照和应用包(APK,IPA 等);
    • 分析快照或应用程序包(APK,IPA 等)的差异;
    • 查看软件包级别的应用大小归因数据。

    Pigeon与Flutter混合开发

    什么是Pigeon

    在早期的hybird开发模式中,前端和Native交互时需要native双端为JS提供接口。这种情况下如何规范命名,参数等就成了一个问题,如果单独维护一份协议文件,三端依照协议文件进行开发,很容易出现协议更改后,没有及时同步,又或者在实际开发过程没有按照规范,可能导致各种意外情况。

    同样,在Flutter插件包的开发中,因为涉及到Native双端代码开发能力,Dart侧暴露统一的接口给使用者,也会出现同样的问题,此时Pigeon应运而生,Pigeon是Flutter官方推荐插件管理工具,可以使用来解决和优化 Native 插件开发上 platform channel 相关的问题。

    Flutter官方提供的Pigeon插件,通过dart入口,生成双端通用的模板代码,Native部分只需通过重写模板内的接口,无需关心methodChannel部分的具体实现,入参,出参也均通过生成的模板代码进行约束。接口新增,或者参数修改,只需要在dart侧更新协议文件,生成双端模板,即可达到同步更新,有效的避免了参数修改,参数新增带来的双端代码不同步的问题,下面是Pigeon工作原理示意图。
    在这里插入图片描述

    下面是Pigeon给出的示例:
    在这里插入图片描述

    可以看到接入Pigeon后整体代码简洁了不少,而且规范了类型定义。

    Pigeon接入

    接下来我们看一下如何从零接入Pigeon。截止目前,Pigeon已经发布了0.1.15版本,如下图所示。
    在这里插入图片描述
    首先,新建一个名为testpigeon的Flutter项目,打开项目的pubspec.yaml文件,并添加如下依赖代码。

    dependencies:
      pigeon: ^0.1.15

    然后,按照官方的要求在项目目录下新建一个pigeons目录,作为存放dart侧的入口文件,内容为接口、参数、返回值的定义等,以及后面通过pigeon的命令,生产native端代码。接下来,新建一个message.dart 文件,并添加如下。

    import 'package:pigeon/pigeon.dart';
    
    class SearchRequest {
      String query;
    }
    
    class SearchReply {
      String result;
    }
    
    @HostApi()
    abstract class Api {
      SearchReply search(SearchRequest request);
    }

    在上面的message.dart 文件中,通过 @HostApi() 注解标示了通信对象和接口,之后我们只需要执行如下命令,就可以生成对应代码到工程中。

    flutter pub run pigeon  --input pigeons/message.dart

    其实上面的命令是下面命令的简写方式:

    flutter pub run pigeon  --input pigeons/message.dart  --dart_out lib/pigeon.dart  --objc_header_out ios/Runner/pigeon.h --objc_source_out ios/Runner/pigeon.m --java_out android/app/src/main/java/Pigeon.java --java_package "com.xzh.testpigeon"

    命令的参数的含义如下:

    • --input:引入了我们创建的 message.dart 文件;
    • --dart_out:输出了 dart 模板文件;
    • --objc_header_out 和 --objc_source_out 输出了 object-c 文件;
    • --java_out 输出了 java 文件;

    命令执行后 dart 文件输出到 lib 目录下, object-c 文件输出到了 ios/Runner 目录下,java 文件输出到指定的 com.xzh.testpigeon" 包名路径下,之后就可以开始正式接入。然后我们分别使用Android Studio和Xcode打开原生工程代码。

    Android 工程代码

    使用Android Studio打开Flutter项目的原生Android工程,生成的代码如下:

    // Autogenerated from Pigeon (v0.1.15), do not edit directly.
    // See also: https://pub.dev/packages/pigeon
    
    package com.xzh.testpigeon;
    
    import io.flutter.plugin.common.BasicMessageChannel;
    import io.flutter.plugin.common.BinaryMessenger;
    import io.flutter.plugin.common.StandardMessageCodec;
    import java.util.ArrayList;
    import java.util.HashMap;
    
    /** Generated class from Pigeon. */
    @SuppressWarnings("unused")
    public class Pigeon {
    
      /** Generated class from Pigeon that represents data sent in messages. */
      public static class SearchReply {
        private String result;
        public String getResult() { return result; }
        public void setResult(String setterArg) { this.result = setterArg; }
    
        HashMap toMap() {
          HashMap<String, Object> toMapResult = new HashMap<>();
          toMapResult.put("result", result);
          return toMapResult;
        }
        static SearchReply fromMap(HashMap map) {
          SearchReply fromMapResult = new SearchReply();
          Object result = map.get("result");
          fromMapResult.result = (String)result;
          return fromMapResult;
        }
      }
    
      /** Generated class from Pigeon that represents data sent in messages. */
      public static class SearchRequest {
        private String query;
        public String getQuery() { return query; }
        public void setQuery(String setterArg) { this.query = setterArg; }
    
        HashMap toMap() {
          HashMap<String, Object> toMapResult = new HashMap<>();
          toMapResult.put("query", query);
          return toMapResult;
        }
        static SearchRequest fromMap(HashMap map) {
          SearchRequest fromMapResult = new SearchRequest();
          Object query = map.get("query");
          fromMapResult.query = (String)query;
          return fromMapResult;
        }
      }
    
      /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/
      public interface Api {
        SearchReply search(SearchRequest arg);
    
        /** Sets up an instance of `Api` to handle messages through the `binaryMessenger` */
        static void setup(BinaryMessenger binaryMessenger, Api api) {
          {
            BasicMessageChannel<Object> channel =
                new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.Api.search", new StandardMessageCodec());
            if (api != null) {
              channel.setMessageHandler((message, reply) -> {
                HashMap<String, HashMap> wrapped = new HashMap<>();
                try {
                  @SuppressWarnings("ConstantConditions")
                  SearchRequest input = SearchRequest.fromMap((HashMap)message);
                  SearchReply output = api.search(input);
                  wrapped.put("result", output.toMap());
                }
                catch (Exception exception) {
                  wrapped.put("error", wrapError(exception));
                }
                reply.reply(wrapped);
              });
            } else {
              channel.setMessageHandler(null);
            }
          }
        }
      }
      private static HashMap wrapError(Exception exception) {
        HashMap<String, Object> errorMap = new HashMap<>();
        errorMap.put("message", exception.toString());
        errorMap.put("code", exception.getClass().getSimpleName());
        errorMap.put("details", null);
        return errorMap;
      }
    }
    

    上面生成的 Pigeon.java 代码中包含了 Api 接口用于开发者实现交互逻辑,同时开发者可以通过 SearchRequest 获取 dart 发送过来的请求,通过 SearchReply 返回数据给 dart 。然后,还需要在Android的入口文件MainActivity 中实现 Api 接口来完成数据交互,代码如下。

    public class MainActivity extends FlutterActivity {
    
      private class MyApi implements Pigeon.Api {
        @Override
        public Pigeon.SearchReply search(Pigeon.SearchRequest request) {
          Pigeon.SearchReply reply = new Pigeon.SearchReply();
          reply.setResult(String.format("Hi %s!", request.getQuery()));
          return reply;
        }
      }
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(this);
        Pigeon.Api.setup(getFlutterView(), new MyApi());
      }
    }
    

    首先,我们继承 Pigeon.Api 实现了 MyApi 对象,然后在 search() 方法中通过 request.getQuery() 获取 dart 的请求数据,并且通过 Pigeon.SearchReply 的 setResult 返回 数据给dart 端,最后通过 Pigeon.Api.setup(getFlutterView(), new MyApi())启动。

    iOS

    使用Xcode打开Flutter项目的iOS工程,把生成的 pigeon.h 和 pigeon.m 文件 link 到 Xcode 工程里,之后如下代码所示在 AppDelegate.h 引入 Api 协议。

    #import <Flutter/Flutter.h>
    #import <UIKit/UIKit.h>
    #import "pigeon.h"
    
    @interface AppDelegate : FlutterAppDelegate<Api>
    
    @end

    接下来,在 AppDelegate.m 中实现 search 接口,并在收到的 dart 消息后基于回复,最后调用 ApiSetup()方法将完成注册。

    #include "AppDelegate.h"
    #include "GeneratedPluginRegistrant.h"
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      [GeneratedPluginRegistrant registerWithRegistry:self];
      // Override point for customization after application launch.
      FlutterViewController* controller =
          (FlutterViewController*)self.window.rootViewController;
      ApiSetup(controller.binaryMessenger, self);
      return [super application:application didFinishLaunchingWithOptions:launchOptions];
    }
    
    
    -(SearchReply *)search:(SearchRequest*)input error:(FlutterError **)error {
        SearchReply* result = [[SearchReply alloc] init];
        result.result  = [NSString stringWithFormat:@"%s%@","Hi ",input.query];
        return result;
    }
    
    
    @end

    Dart测试

    最后我们在 Dart 代码中新建一个测试的代码,如下所示。

    import 'pigeon.dart';
    
    void main() {
      testWidgets("test pigeon", (WidgetTester tester) async {
        SearchRequest request = SearchRequest()..query = "Aaron";
        Api api = Api();
        SearchReply reply = await api.search(request);
        expect(reply.result, equals("Hi Aaron!"));
      });
    }

    Flutter 在阿里巴巴的应用

    首先,主持人为我们介绍了Flutter的历史,介绍围绕美观、高效、流程和开放等几个方面来介绍Flutter。
    在这里插入图片描述
    接下来,阿里巴巴的无线技术专家门柳介绍Flutter在阿里巴巴的应用,闲鱼是阿里巴巴Flutter技术实践的先驱,也是国内最早尝试Flutter技术的大型互联网公司,而阿里巴巴旗下的淘宝也不甘示弱,也在某些模块结成Flutter,不过大多是业务级别的模块,而没有像闲鱼那样大规模使用。我们可以从下图看到Flutter在阿里巴巴的使用情况。

    在这里插入图片描述
    那为什么,这么多的移动应用开始使用Flutter来进行开发呢?首先,让我们来了解下跨平台技术的发展历程。
    在这里插入图片描述
    可以发现,移动跨平台开发经历了大约四个阶段:

    • 早期的WebView加载方案
    • 原生API桥接的Hybrid方案
    • 原生渲染方案(Web语法+原生UI)
    • 自绘渲染(独立布局/渲染)

    而Flutter就是采用的自绘渲染方案,有兴趣的童鞋可以研究以下Flutter的架构。为什么选择Flutter进行跨平台应用开发呢,下面是Flutter所具有的一些优势:
    在这里插入图片描述
    不过,Flutter也不是万能的,Flutter目前处于快速迭代的阶段,所以保险起见,我们只在一些常规的业务开发和模块化的UI界面开发和部分游戏中使用Flutter。
    在这里插入图片描述
    总结起来,就是在一些富交互类应用和新型的应用中使用Flutter,对于视频、直播等渲染要求高的则继续使用原生进行开发。

    那使用Flutter进行应用开发时,有哪些经验和问题需要注意呢?下图显示了阿里巴巴在使用Flutter进行应用开发时遇到的一些问题,大家使用时需要规避。
    在这里插入图片描述
    首先遇到的问题是,由于Flutter使用的是Dart进行开发,无疑增加了开发者的学习成本。其次,对于大型应用来说,如何保证代码质量,如何在多个平台运行自动化测试脚本也是一个问题;并且由于Flutter作为一门新的技术,如何快速的将老得业务迁移过来也是大家需要考虑的问题。总结一下,就是调试、测试、状态管理、缓和导航栈管理、跨平台兼容以及如何寻找解决方案的问题。
    在这里插入图片描述
    尽管Flutter已经提供了很多的工具,但是如何将它融入到阿里巴巴的客户端开发工作流中,是大家需要考虑的问题。
    在这里插入图片描述
    首先,为了提升开发效率,降低初期的接入成本,我们将Flutter Toolkit融入到Alibab DevOps工作流中,并自研了一些工具、打包和发布平台以及搭建调试环境。接下来,我们基于现存的技术积累,研发了一些中间件。
    在这里插入图片描述
    下面来看一个实例,即如何解决多图列表页面的内存占用问题。这类问题的特征如下:

    • 页面很长,图片很多,首次加载时间很长
    • 大量图片同时加载并生成纹理,内存飙升
    • Sliver中每项Cell拆分粒度很大,单个Cell占用多屏,难以回收

    在这里插入图片描述
    对于列表Flutter列表内存回收的问题,大家可以阅读 细化 Flutter List 内存回收,解决大 Cell 问题这篇文章。

    对于上面的多图长列表的内存问题,我们可以从以下几个方面着手进行优化:

    • 拆分Cell,使每一项变得更小
    • 根据坐标判断图片是否在屏幕内,进而进行图片的懒加载和回收
    • 提前获取图片的宽高大小,减少布局和重绘
    • 以图片为单位进行纹理回收,而不是Sliver中的每项Cell为单位
    • 外接原生图片库,实现共享本地缓存

    在这里插入图片描述
    最后,我们来看一下Flutter在阿里巴巴的体系化建设。首先,Flutter的体系化建设主要从基础能力建设、研发平台和可持续迭代等几个方面着手。
    在这里插入图片描述
    下面是Flutter在阿里巴巴平台建设的具体的一些方案。
    在这里插入图片描述
    目前,Flutter在阿里巴巴已经经过了大规模的应用,并且我们自己的技术体系建设也在稳步推荐中,后面会将建设的一些成果通过社区分享出来。

    附: Google 开发者大会

    查看原文

    赞 15 收藏 1 评论 0

    徐九 发布了文章 · 11月20日

    “开源软件供应链”,可能是对开源生态的一次重要重构

    大教堂与集市

    技术编辑:徐九丨发布自:思否编辑部

    关注开源的朋友应该都听说过《大教堂与集市》这本书,书中对大教堂与集市进行了很形象的两种比喻。

    大教堂给人的感觉,就像机构或者企业中传统的软件项目从立项到完结,有着详尽的流程规划以及质量把控;而开源软件更像集市的发展,没有既定的标准、没有严格的监管、没有明确的方向,看起来乱哄哄的杂乱无章,但却诞生了红帽、Android 和 iOS 这类基于开源的产物。

    不可否认,开源本身确实存在着一些“隐痛”,其中最大的问题就是生态的割裂与分化,并且没有一条基于开源构建出的可行的商业模式,特别是在国内,各大企业、厂商虽然都在积极投身开源,尝试将开源与商业进行融合,但能够真的将开源商业模式跑通的寥寥无几。

    为了让国内的开源软件生态得以良好发展、发挥出开源真正的价值,11 月中旬,在南京举办的开源软件供应链 2020 峰会中,各界开源人士围绕现代软件构建模式的关键供应关系网络进行了为期两天的探讨,而这次会议的主题 —— 「开源软件供应链」,可能正是解决这一问题的关键之一。这一条“供应链”,很可能将对开源生态进行一次重要重构。

    一、什么是开源软件供应链?

    “开源软件供应链”这一概念是由中科院软件所于2017年率先提出的。

    供应链并不是什么新概念,但这是国内第一次将其引入开源领域。对于大部分领域来说,供应链最难的是打通各个环节间的交易或者交付,而对开源软件生态来说,上下游包含什么在之前的蛮荒发展阶段都还不甚清晰,思考清楚生态链的构成也成了进一步发展的前提。

    峰会的开幕式上,中科院软件所所长赵琛从开源软件的源头出发,对比了国内外开源软件发展历史和现状,阐述了对开源软件生产方式、组织体系和运转机制的深刻理解。他表示,要建设可靠的开源软件供应链,不仅需要通过技术、社区和人才,还要保障软件供应的安全和高质量创新。为此,中科院软件所对开源软件供应链提出了一个定义:

    一个系统在开发和运行过程中,涉及到的所有开源软件上游社区、源码包、二进制包、包管理器、存储仓库、社区、基金会等,按照依赖、组合等形成的供应关系网络。

    从这个定义中我们可以看到,开源软件供应链的构成与传统的供应链模型存在着很大的差异。软件所副总工程师武延军在会上以《开源软件供应链研究及实践》为主题进行了分享,其中介绍到了开源软件供应链的几个特点:

    ? 商品迭代快
    ? 模块数量多
    ? 生产线上化
    ? 供应全球化
    ? 仓储集中化
    ? 用户多样化

    正是这几个特点,让开源软件供应链的构建变得非常复杂,但这也说明拥有可靠的开源软件供应链是大规模商用软件的基础,开源软件的发展过程,其实就是供应链整合优化的过程。

    二、开源软件供应链点亮计划,重构开源生态

    本次开源软件供应链峰会共设立了七大主题 —— 操作系统&编译器、虚拟化&云源生、人工智能、大数据、分布式系统、开源文化&开源商业、开源&教育,而这些主题的选择,应该就是指明了供应链中的几个关键节点 —— 核心技术的发展、商业模式的融合、开源力量的拓展。

    赵琛在会议中表示:“相较于发达国家,我国的开源基础核心技术仍然缺失,产业价值链仍然以中低端为主,生态关键环节仍存在挑战。”而武延军在峰会中也分享了国内开源面临的三个最主要的问题:

    1、开源产业价值不高
    2、开源社区贡献不足
    3、开源生态受制于人

    这是目前国内开源软件行业的现状。美国企业之所以占据着开源产业的高地,并且不存在自主可控的问题,原因之一就是具备成熟的开源软件供应链体系。只有打造出国内开源生态的供应链条,将目前零散的生态进行梳理重构,才可以分析出开源产业的核心价值与要素,更好的评估开源生态的短板与发展方向。

    为此,软件所也在不断的研究与实践包括构建开源软件知识图谱、建立供应链可靠性风险识别与评估体系、建立供应链的量化评价指标等等,这些行业规范以及链条逻辑节点的梳理,才是进一步发展的基础和前提。

    此外,生态的发展离不开人才的培养与输入。2020 年 4 月,软件所和 openEuler 社区共同主办了“开源软件供应链点亮计划-暑期2020”活动,旨在培养和寻找新生代的力量。该活动组委会负责人屈晟也于本次峰会中对项目的进展进行了介绍分享。

    报告显示,这次活动共吸引了 42 个开源技术社区、246 位社区导师参与,上线了 388 个项目。截至 10 月底活动结束,有 3 位同学通过社区选举成为 Apache 项目的 Committer,超过100 位同学的贡献被社区认可并成为对应项目的 Contributor。

    三、开源的新时代与新愿景

    本次峰会的重头戏之一是《开源的新时代与新愿景》圆桌论坛。但想要真的迎来开源的新时代,除了打造供应链,还需要更多的力量共同参与,想要蓬勃良好的发展,“政产学研资用”缺一不可。

    在武延军研究员的主持下, openEuler 社区理事会理事长江大勇、鹏城实验室启智平台秘书长刘明、清华大学计算机系长聘副教授陈渝、开放原子开源基金会秘书长杜玉杰、恒拓开源董事长马越、飞漫软件总经理魏永明等 6 位业界代表齐聚一台,分别代表供应链中不同的角色进行了深度交流,也为开源软件供应链点亮计划提出了一些可落地的发展建议。

    峰会主论坛的最后,武延军也代表组委会向广大科研人员宣读了科研成果开源倡议书,倡议科研人员积极开源科研成果,遵守开源规则、维护知识产权,为开源科研成果的传播、改进和再发布创造便利条件,让科研成果发挥更大价值,服务更多领域。

    相信国内的开源软件生态必将随着行业的规范与协作,进入新一个新时代,而新时代的到来,必然也承载着新的愿景。

    开源会走向怎样的未来?又能为社会带来怎样的价值?在构建开源软件生态的路上,大教堂和集市是殊途同归还是分道扬镳,书中作者并没有给出答案,每一个从事开源的人可能也没有答案。

    开源之路任重道远,但“开源软件供应链”概念的提出以及“开源软件供应链点亮计划”的发布实施,必将让开源领域的从业者拥有更强大的信心与底气,去链接更多开源力量、共建开源软件生态、发挥出开源更大的社会价值。

    segmentfault 思否

    查看原文

    赞 13 收藏 1 评论 0

    徐九 发布了文章 · 11月19日

    谷歌发布最新 AI 工具,帮助城市绿化“降温”

    google-AI

    据外媒报道,谷歌今日(当地时间 11 月 18 日)发布了一款 AI 工具,借助 AI 和航拍绘制城市的“绿化地图”,提出绿化决策来解决全球变暖引发的极端高温天气。


    根据数据显示,极端的高温天气每年在美国造成的死亡人数,比其他任何跟天气相关的灾难都要多。

    由于所谓的城市热岛效应,炎热的气温在城市中可能更加危险。城市地区有更多的吸热表面和更少的绿色植物,平均温度比农村地区高出 6 华氏度。

    而树木可以通过多种方式为城市降温。它们可以为人们和建筑物遮阳,当温度上升时,它们通过蒸散作用释放水分来为周围的空间降温。为了帮助城市的园林规划部门确定优先次序并提高种植效率,Google 成立了 「Tree Canopy」实验室,借助 AI 手段和城市航拍提供一些决策建议。

    在分析了全年(春季,夏季和秋季)从飞机上收集的彩色和近红外航拍图像后,Google 能够“查明城市中的所有树木并测量其密度”,还可以通过比较不同角度的图像来创建高度图。

    然后,该实验室使用专门的树木检测 AI 模型,检测树木的分布生成一张显示树木覆盖密度(也称为“Tree Canopy”)的地图。

    google - Tree Canopy

    通过这个特质的地图,可以分析出很多数据:

    • 植被覆盖率的百分比
    • 地区的人口密度
    • 哪些地区易受高温影响
    • 哪些地区可以增加绿化

    这取代了传统需要进行耗时且昂贵的逐块研究绿化的决策方式,既高效也更科学。


    Google 有个口号叫「技术不作恶」,但近些年科技公司们在这个基础上更进了一步,致力于「技术向善」。摩斯密码输入法、AI 疾病监控、智能洪水预报等等,特别是在今年的疫情期间,技术发挥了巨大的社会价值。

    SegmentFault 思否在今年与各类厂商的合作中,有很多活动的主旨都是「技术向善」。比如 AWS 人工智能黑客马拉松,就是围绕遗失宠物的智能寻找、老年人的远程智能诊疗、环境污染的预测等赛题进行;小冰团队推出的“虚拟人类”,也让 AI 不再是冷冰冰的智能助手,而是人类温暖快乐生活的一份子。

    在这个商业化的时代,很高兴能看到越来越多的企业、组织开始背负起技术责任感、探索人与技术共赢的方式,用技术为人类创造更多美好。

    SegmentFault 思否社区 2020 中国技术先锋年度评选已于近日正式启动,其中特设了一项「技术向善奖」,旨在寻找具备较强社会责任感,能够将技术品牌构建与社会、经济、教育、公益相结合,或产品技术成果对于社会有较大贡献的企业、团队或产品线。期待自荐与推荐。

    了解活动详情:2020 中国技术先锋年度评选启动,三大类别奖项申报中

    segmentfault 思否

    查看原文

    赞 1 收藏 0 评论 0

    徐九 发布了文章 · 11月18日

    推出独立文档、视频会议升级,字节跳动旗下办公协作平台飞书发布全新版本「π」

    飞书 - π

    11 月 18 日,字节跳动旗下企业协作平台飞书在北京举办“2020 飞书未来无限大会”。字节跳动副总裁谢欣在演讲中表示,进入知识经济时代,飞书致力于打造一款配得上这个时代的工具。会上,飞书推出全新版本“π”,发布独立 App“飞书文档”,并在视频会议、即时沟通等功能上宣布了重大更新。

    这是飞书自推出以来首次举办大型产品发布会。从去年开始,飞书逐步推向市场,越来越多的企业组织选择了飞书。谢欣表示,飞书的典型客户并非来自单一行业,“越是追求卓越的企业,越是渴求卓越的工具;越是这样的企业,越是喜欢使用飞书。”这也进一步坚定了飞书的方向:打造与追求卓越的企业相匹配的产品,并和企业共同成长。

    字节跳动一年创造 2000 万篇飞书文档

    clipboard.png

    “过去二十多年,我们使用 word 的方式几乎没有改变。即使如今使用着最新的电脑和智能手机,但很多人却沿用着过去的工作方式和工具,这太对不起这个时代了。”回顾字节跳动做飞书的初心,谢欣表示,字节跳动成立的最初几年,试用过国内外所有主流的办公软件,但没有一个可以完全满足公司的需求。基于对“生产力工具缺乏变革、工具不应管控人而要激发人、B 端产品应具有和 C 端产品同样友好的用户体验”三方面的思考,字节跳动启动了飞书项目。

    发布会上,谢欣表示,飞书不仅是在解决当前的问题,也要去创造未来的可能。知识经济时代,企业最重要的生产要素发生了变化,人和信息成为企业构建竞争力的核心。飞书围绕着人和信息思考产品。当工具把人和信息都服务好的时候,会出现一个新现象:知识的涌现。涌现并不是被设计出来的,而是自发产生的。

    过去一年中,字节跳动全体员工在飞书上创建了超过 2000 万篇文档,如果打印成 A4 纸,堆叠起来的高度接近珠穆朗玛峰。谢欣表示,这些文档不仅是企业知识的积累,更是企业一笔宝贵的财富。

    飞书加强了信息的创造、传播、消费和反馈的各个过程,让工作变得更高效、更愉悦。同时,飞书不仅是生产力工具,也能提升企业的组织能力。以飞书 OKR 为例,在字节跳动的发展历程中,OKR 发挥了巨大作用,提升了组织能力。如今,飞书的 OKR 正在帮助更多企业,激发员工潜能、增强企业竞争力。

    张楠-飞书

    飞书负责人张楠在「飞书未来无限大会」上,也首度公开介绍了飞书的产品定位及设计理念。

    飞书文档 App 独立发布 “妙记”提供结构化智能会议纪要

    在产品功能层面,飞书也迎来了一次大规模更新,并发布了全新的“π”版本。飞书总裁张楠介绍,“π”代表着“无限”,寓意飞书拥抱未来工作方式的无限可能。作为企业协作平台,飞书从底层打通了 IM、日历、文档、邮件、视频会议等基础应用,用开放平台衔接业务应用,并在流程体验上做到无缝集成。

    在文档方面,飞书文档具有三大特点:“为创作添翼、为协作打造、以移动为先”。张楠表示,以前的文档里主要是文字、表格等静态的文本内容;现在,内容表达的形态更加丰富了。用户可以在飞书文档中“插入一切”,无论是音视频、文件、表格,还是流程图、投票、沟通群。同时,飞书文档不仅仅是多人协同编辑,更是能促进团队成员思维碰撞。此外,飞书文档设计初始就为移动而生,具有良好的跨设备体验。基于飞书的文档模块,飞书文档 App 作为一款独立应用也正式单独对外发布。

    飞书文档还发布了三个重要的新功能:思维笔记、多维表格、双向链接。用户可以在飞书思维笔记上直接评论、批注,邀请同事一起协作办公。不同于传统表格,多维表格可以把信息更加结构化地组织起来,并且有多种视图,能够更清晰地表达数据之间的关联关系,辅助各种场景。如果引用了多个其他文档,系统会自动建立文档间的双向链接关系,通过生成网状关系图,帮助用户更好地找到相关文档。

    视频会议方面,飞书会议人数上限提升到了 1000 人,并且支持 App、网页、电话等多种形式入会。飞书还上线了直播功能,可把飞书会议直播给内外部的用户,支持百万级在线观看,还能一键推流至抖音、西瓜等平台。

    张楠表示,与“π”版本一起,飞书会议重点推出了全新功能 —— “妙记”。“妙记”不仅能将语音转化成文字,还具有强大的语义分析能力,帮助用户短时间内即可了解会议的核心内容,并且生成结构化智能会议纪要。

    即时沟通方面,飞书将日历、文档、视频会议、审批等各种功能都与IM整合打通,用户不需要在各种工具之间来回切换,飞书的消息列表就是各类协作的一站式入口。除了内部沟通,飞书还上线了企业邮箱服务。无需另外安装App,用户在飞书上就能完成所有邮件的收发及管理,帮助用户连接起企业的内外沟通。

    据了解,自推出以来,飞书凭借强大的产品能力快速“破圈”,从互联网、高科技、新媒体领域三大核心领域,向金融、零售等更多行业渗透。飞书正在让先进的工作方式成为更多企业基因的一部分,并推动其业务不断发展。

    segmentfault 思否

    查看原文

    赞 3 收藏 0 评论 1

    徐九 发布了文章 · 11月18日

    传奇黑客 Mudge 加入 Twitter,曾为政府承包商进行机密工作

    mudge-twitter

    据路透社消息,在监管威胁加剧和严重安全漏洞的困扰下,社交媒体巨头 Twitter 正在任命世界上最知名的黑客之一 —— Peiter Zatko(因其黑客账号 Mudge 而广为人知)来解决从工程失误到错误信息的一切问题。

    据悉 Mudge 将担任新的安全主管一职,赋予他广泛的授权,对 Twitter 的网络安全结构和做法提出改革建议,并将直接向 Twitter 首席执行官杰克·多西负责,预计在经过 45 到 60 天的审查后,将接管关键安全职能的管理。

    Mudge 的故事

    Mudge 在 1990 年代以臭名昭著的黑客团体 Cult of the Dead Cow 和 L0pht Heavy Industries 的名字而闻名。它们都以创建和分发黑客工具而闻名,但他们同时也是黑客社区独特文化的推动者,他们分发音乐和杂志,举办会议以及从事网络恶作剧和激进主义活动。

    在 1990 年代后期,Mudge 在黑客社区中的核心作用,再加上互联网在商业上的重要性日益增强,导致与政治领导人之间的对话日益增多。1998 年,他和其他 L0pht 成员在美国国会作证,证明当时的信息安全质量标准很差。该小组在会议中告诉参会代表们,如果愿意,他们可以在短短 30 分钟内关闭互联网几天。

    两年后,发生了一系列影响了 CNN、eBay、雅虎和亚马逊的黑客攻击,为此 Mudge 也曾受邀为当时的总统比尔·克林顿(Bill Clinton)提供有关互联网安全的建议,

    为什么是 Twitter?

    clipboard.png

    这不是 Mudge 第一个入职的公司。他此前曾在电子支付独角兽 Stripe 负责安全工作,也曾在谷歌从事特殊项目的工作,并在五角大楼著名的国防高级研究与计划局(DARPA)监督发放网络安全项目的拨款。

    而这次入职 Twitter,其实也是一次双向的选择。

    “我不知道是否有人能解决 Twitter 的安全问题,但他会是我的首选。”Dan Kaufman 说,他曾在 DARPA 监督 Mudge,现在是谷歌高级产品组的负责人。

    近年来,Twitter 面临众多安全挑战。一年前,美国政府指控两名男子多年前在 Twitter 工作时为沙特从事间谍活动,称他们传递了有关沙特王国批评者的私人信息。今年 7 月,一群年轻的黑客欺骗了员工,并赢得了对内部工具的访问权,这让他们改变了账户设置,然后从当时的总统候选人乔·拜登,微软创始人比尔·盖茨和特斯拉首席执行官埃隆·马斯克的账户中发推文。

    “今年夏天的数据泄露事件是一个重要的提醒,提醒人们在建立一些必要的基本安全功能方面,Twitter 需要走多远,以运行一个被对手瞄准的服务,比因该事件被捕的青少年更熟练,”前 Facebook 首席安全官、现任斯坦福大学研究员 Alex Stamos 说,他曾帮助领导打击选举虚假信息的努力。

    曾经在 Mudge 的安全咨询公司工作过的 Stamos 称,对于 Twitter 来说,他是一个非常合适的人选。“他们将不得不为这些问题找到创造性的解决方案,如果说 Mudge 在安全领域有什么出名的地方,那就是有创造性。”

    而 Mudge 本人在接受专访时表示,他将致力于改善 Twitter 上的公共对话。他称赞了 Twitter 最近的一项举措,并赞赏了 Twitter 对非常规安全方法的开放态度,比如他提出的通过操纵从 Twitter 收到的关于人们如何与他们的帖子进行互动的数据来迷惑别有用心之人。

    “他们愿意承担一些风险,在算法和算法偏差的挑战下,他们不会袖手旁观,等待别人解决这个问题。”

    什么是真正的黑客文化?

    知名黑客转行的故事其实屡见不鲜,George Hotz、Hector Xavier Monsegur、Kevin David Mitnick,这些顶尖黑客在近几年纷纷上岸。随着黑客文化的传播,社会和企业也逐渐明白了黑客的存在意义,对黑客有着更积极的看法,而企业和政府也开始聘请黑客来帮助自己解决困难。

    成为一个黑客,是许多程序员心中暗藏多年的梦想。

    “在黑客的文化中,优雅、简洁的创新是被高度崇尚的,就像在纯科学的领域,"《波士顿环球报》的记者伦道夫赖安在 1993 年的一篇警车展览相关的文章中写道,“黑客与一般校园中的那些喜欢恶作剧的人不一样,他们在一些需要细致计划、工程化和使用手段的事件中的表现,更具有创造力。”赖安写道:“黑客的本质应该是好的,不能去搞破坏,应该是安全的,这是条不成文的规则。事实上,黑客们有时也参与破坏他们自己的作品。”

    当黑客们把天赋用对了地方,改变世界、创造美好可能也就是分分钟的事儿。

    segmentfault 思否

    查看原文

    赞 1 收藏 0 评论 0

    徐九 发布了文章 · 11月18日

    微软发布Pluton处理器,为Windows PC提供全新安全功能

    微软-Pluton

    近日,微软发布了 Pluton 安全处理器,旨在为未来的 Windows PC 带来安全方面的进步。据悉,微软与 AMD、英特尔和高通公司合作开发了这款新的 Pluton 安全处理器。

    这款新的安全处理器将使攻击者访问系统的难度大大增加,它还将提高微软防范物理攻击的能力,防止凭证和加密密钥被盗,并提供从软件漏洞中恢复的能力。


    Pluton 设计通过在 CPU 中直接建立安全机制,消除了该通信通道受到攻击的可能性。使用 Pluton 架构的 Windows PC 将首先模拟一个 TPM,与现有的 TPM 规范和 API 一起工作,这将使客户立即受益于依赖于 TPM 的 Windows 安全功能增强,如 BitLocker 和 System Guard。

    采用 Pluton 的 Windows 设备将使用 Pluton 安全处理器来保护凭证、用户身份、加密密钥和个人数据。即使攻击者安装了恶意软件或完全物理占有 PC,这些信息都无法从 Pluton 中删除。这是通过将敏感数据(如加密密钥)安全地存储在 Pluton 处理器内实现的,该处理器与系统的其他部分隔离,有助于确保新出现的攻击技术(如投机执行)无法访问密钥数据。

    Pluton 还提供了独特的安全硬件加密密钥(SHACK)技术,有助于确保密钥永远不会暴露在受保护的硬件之外,甚至是 Pluton 固件本身,为 Windows 客户提供了前所未有的安全级别。

    Pluton 为运行固件提供了一个灵活的、可更新的平台,实现了端到端的安全功能,这些功能由微软撰写、维护和更新。用于 Windows PC 的 Pulot 将与 Windows 更新过程集成,方式与 Azure Sphere 安全服务连接到物联网设备的方式相同。

    segmentfault 思否

    查看原文

    赞 0 收藏 0 评论 0

    徐九 发布了文章 · 11月18日

    LinkedIn 开源 Java 机器学习函数库Dagli,提供开发高效能且生产就绪的模型

    linkdeln - dagli

    虽然机器学习的发展每天都在增长,但是来自 Algorithmia 的一项调查显示,大多数企业花费 8 到 90 天的时间来部署 ML 模型。大多数人将责任归咎于无法扩展,其次是模型可重复性方面的挑战,例如缺乏官方认可和工具不足。

    而 LinkedIn 最近开源的 Dagli,是一种用于 Java 和其他 JVM 语言的机器学习库。该库使您可以轻松起草抗错误,可理解,可修改,可维护和可部署的模型管道,而不会招致技术负担。

    Dagli 环境具有大量的工作管线组件(pipeline components),包含神经网路、逻辑回归、梯度提升决策树、FastText、交叉验证、交叉训练、特征选择、数据读取器、评估、特征转换等。而Dagli 环境提供工作管线定义、静态类型、不变性等特性,从根本上避免大部分的逻辑错误。此外,Dagli 也提供高度可移植性,开发者能应用于伺服器、Hadoop、CLI、IDE,与其他典型的JVM 环境中工作。

    linkdeln - dagli

    对资深的机器学习工程师来说,Dagli 提供开发高效能且生产就绪的模型,能够长期维护,也能扩充,与现在基于JVM 技术的堆叠整合。对于机器学习新手工程师,Dagli 提供直观的API,能结合熟悉的JVM 工具使用,并避免常见的逻辑错误。

    LinkedIn 的自然语言处理研究科学家 Jeff Pasternack 表示,机器学习模型通常是集成管道的一部分。这使生产管道的建设,培训和部署更具挑战性。为了兼顾训练和推理,通常需要重复或外部工作来产生使模型的未来发展和维护变得复杂的无弹性胶粘代码。

    GitHub: https : //github.com/linkedin/dagli

    segmentfault

    查看原文

    赞 1 收藏 0 评论 0

    徐九 赞了文章 · 11月17日

    思否独立开发者丨@轩帅:开启技术变现之路,探索第三收入来源

    独立项目名称:倾城之链

    月收入:暂不到 1000

    思否社区ID:@jeffjade


    今天我们采访的是独立开发者是杨轩帅,他目前在国内一家做快应用相关的公司;目前,他的工作侧重管理、工具型产品,当然也仍会写写代码;出于对高效工作的追求,他比较热衷于创造一些好产品/工具。

    目前杨轩帅仍是一名业余独立开发者。

    工作内外,他都有很多想法,以及一些痛点;并且非常倾向将其抽象出来,加以设计,用代码实现出一个工具,或是一款产品,为自己和他人都能带来价值;即便只有自己用,也觉得很酷。

    在谈到对独立开发者定义时,他表示:『独立开发者』,一般指的是“从产品立项、设计、开发、推广、到盈利的闭环全部独立完成的人”。也想有更多志同道合朋友,组成一个团队,聚集起来完成一款产品,但这并不容易。

    在所有项目,包括倾城之链在内,全部工作都须自己去做,在不擅长的领域,难免捉襟见肘,比如 UI 设计、交互设计,推广等环节。

    倾城之链

    项目立项:这里主要介绍下倾城之链这个项目;从 17 年初,有开始立项,在业余时间策划、设计、编写以及部署等。主要部分功能,也是在 17 年就完成;这几年有陆续完善体验,塑造周边能力,以及发小程序、快应用等版本。

    项目背景:开发这款项目,每个阶段,主要出发点都有些不同;最初:诞生这些想法,是出自个人需要。

    立项动机:开发一款产品,为自己带盐;修炼技艺,创造挑战,追名逐利。时隔三年,仍在积极维护,主要是要靠其获取业余收入。在 17 、 18 年,分别写了关于「倾城之链」的文章,详细介绍了故事起源,名字由来,核心价值、如何访问、以及如何运作等。

    面向群体:“所有互联网用户,以及 Web 应用创造者”,这是原本设想。但在实际推广中发现,互联网从业者是主要用户,地域多分布在一、二线城市。比如,有向家乡的亲友(对 Web 应用没有认知)推荐,这跟教它们编程一样艰难(摊手???♂?)。

    对于这样的现状,现在也有所释怀,毕竟不是娱乐性质、而且不能立刻为用户带来可见“价值”的产品,在我们现在这个环境,很难快速推广开来;毕竟,我本人下了班,也经常会看看视频、玩儿下游戏,无脑的放松自我。何况倾城之链,又是偏向让用户主动发现、学习、探索的类型。

    1、如何做的第一版产品?

    17 年那会儿,年富力强,在大前端这块儿,尚不能融会贯通;有了这个想法后,就立马动手策划、技术选型、设计、编码、测试、买域名、购服务器、部署、验证等;很快就出品了第一版。当然,那时候感情上也正处于“空窗期”,使得有专心于此的业余时间和外部环境。

    2、独立开发过程中遇到过哪些困难?最难搞定的是什么?

    最难莫过于:“交互设计,UI 设计”,技术不懂可以学,时间不足可以挤,但在界面设计这块儿,实在是苦煞人也;自认为在审美这块儿,比起些专业设计师,也不遑多让;但真正自己去设计,总不尽如人意。各种参考、改版,就目前所呈现出来的,也不是个人所满意的。如果能有一优秀设计师携手,想必倾城之链现状,会比现在好很多。

    3、项目目前取得了哪些成就?项目为你带来了什么?

    就取得的成就而言,最大的是,目前已经收录全球优质网站 400 余个,且还在不断增长。

    给我带来的就很多:

    • 原本就为练技,开发维护倾城,在高效开发 Web 应用积累满多经验;
    • 因为上一条,为自己的工作,或有形或无形,也带来非常大的帮助和价值;
    • 收录的所有 Web 应用,都须亲自逐一审核(+写推荐语),使得眼界大开;
    • 也因为上一条,使得接触到很多有价值产品,对工作,生活、或者写文都产品很大影响;
    • 倾城之链小程序发布几个月后,现在慢慢有了自然流量,接入广告后,每天都能带来些收益小惊喜;这比赚取工资来的开心。

    4、你的商业模式是什么?是如何增长的?

    截止目前,还没非常认真考虑商业模式;原本设想是,服务好用户(探索发现者,Web 应用创造者),不断丰富内容,从而逐渐产生更多价值;就会形成优良循环??,当用户达到一定规模,采取接入广告来获取收益。

    但就目前而言,还未达到这一点;仍在积极收录优质 Web 应用、开发更多对用户有价值的功能。接下来,有计划投入一笔广告,从而提升产品知名度。

    5、近阶段项目有哪些更新,未来会做什么变动

    最近更新是,为审核通过的网站,自动发起首页截图,并压缩、上传至阿里云 OSS,从而展示给用户,能让用户在打开 Web 应用前,能够对其有一个初步了解。最近也是写了篇文章一键截图、压缩 & 上传至阿里 OSS,专门介绍了下具体实现和封装??。

    未来仍会持续维护、更新。功能路线图有在 Github Issues 记录。具体会投入多大力度,取决于后续广告投入后,所产生的收益高低。如果远高于预期,专职全勤投入也可以考虑。

    6、如果项目重来一次你会做哪些改变?

    我想会提早开发并重视小程序、快应用版本(得注册一个公司);从数据看,小程序所能带来的收益,要比 Google AdSense 多,且容易。

    个人相关问题

    1、推荐你最喜欢的一款产品 / 游戏 / App?并说明原因

    没有限制条件的话,当然是倾城之链啦。毕竟“亲儿子”;何况我也是「倾城」的重度 & 忠实用户,而且还给自己带来了非常多的好处,最喜欢「倾城」,实属实至名归。

    但就那样回答,颇有些符合咱传统习惯;如 Product Hunt(一个供用户分享和发现产品、专注于每日最佳新 APP 排行榜的社交新闻网站),Github 等,都是我非常喜欢的产品。尤其前者,倾城之链就需要向其多多学习;而且在这个阶段,Product Hunt,很多程度上,是我在互联网这块,视野拓展的主要源头之一。

    2、分享一下你的技术栈和你日常的工作流?

    在工作中,主要涉及开发快应用引擎、以及周边生态建设;使用的技术栈主要是:

    • 编程语言:JavaScript,TypeScript,Node.js、Css,Html 等;
    • 前端框架:Vue、React、Electron 等;
    • 构建工具:Webpack、Rollup、Gulp 等;
    • 应用类型:小程序、快应用、PWA 等;

    在进行些个人项目开发中,也会用到 MongoDB、Redis、Nginx、Docker、Python 等。

    日常工作流:多年来,都使用 Mac 作为开发工具;基于 VsCode、Sublime Text3 编写代码(写快应用、小程序,会用到对应 IDE);用 Git、Github、Gitlab 来控制项目版本;Jenkins 来持续集成;习惯使用 Markdown 写文档、博客;Xmind 绘制思维导图;使用各类 Terminal 命令行来提升效率(遇到没有诉求,会自己集成,如个人作品 Arya Jarvis).......

    3、对独立开发者或编程初学者有什么建议?

    对于独立开发者,鉴于每个人的初衷、身处环境、终极目标,都有所不同,暂没有更多建议。

    对于编程初学者,倒有满多想说的:

    1. 对于编程,要“战略上藐视它 战术上重视它”,要认识到这并不是很难学,但须要付出努力,切勿眼高手低。
    2. 方向上,先易后难(可以先学学 JavaScript 或 Python 等),多读文档,多敲代码,勤于思考,举一反三,善于总结,坚持写博文。
    3. 找准方向后,建议采取“学以致用”的方式,循序渐进:可以定制一个需求,想法设法去实现,修炼编程基本功的同时,也锻炼了综合能力(如学习、搜索、排查问题等)。
    4. 最后就是坚持(凡事贵在坚持);坚持学习、总结、跟同行交流反馈、持续输出心得。须知:“念念不忘、必有回响”。

    4、生活中有什么爱好?有什么个人的特别的工作习惯么?

    生活中爱好,可谓非常广泛;譬如游戏、读书、听歌、看电影(动漫)、写东西、跟朋友聊天...... 但在业余时间,真正做的比较多是:编程和游戏;前者是为了追逐名利;后者则是为了减压,或者偶尔的放纵(周末安装,玩儿完删掉,循环往复)。

    特别的工作习惯:个人崇尚效率(工欲善其事,必先利其器),每当遇到需求,总会先将需要的工具或者环境,快速准备妥帖,从而使得后续工作,尽可能顺畅、高效、省心。

    5、聊聊你的思否的看法或对国内技术社区的看法

    早在 2015 年 3 月,就有加入思否社区。那时候入还比较年轻,精力充沛,成长欲也很强;有空就会扫一扫“问答”,挑些感兴趣的问题来回答下。慢慢地,空闲时间不在那么多,偶尔在博客产出些文章,会借助「发头条」功能,分享给用户,也能给自己的站带来些流量,时至如今,也是喜之不已。如今,思否又发起「独立开发者计划」,这简直是我辈福音。即便时间不是很充盈,也抽空来接受采访。坦白说,「思否」我心中,国内最友好的技术社区。

    国内其他技术社区,就用过了,也谈下个人看法:

    • 博客园:个人最初写博客的阵地;它在艰难的环境中成长、发展、壮大,博客园用户中成长出了一批又一批技术专家,在 IT 行业中大展身手!任互联网浪潮的此起彼伏,尽管时光流转岁月变迁,它依旧坚守初心,真的很棒。
    • CSDN:很早就知道它,但用的很少;因为它的权重很高,检索问题,经常会出现在搜索结果中;但总体来看,它质量低劣,且抄袭遍地,很多时候不能解决所遇问题,早已借助 Chrome 扩展,将其从搜索结果中屏蔽。
    • V2EX:独具匠心的发布、回复话题奖励机制,让这里的内容多了一层更趋于优质的可能;但内容更多不是技术,而是技术圈人的感慨;有时候在 v2ex 推广些个人产品,确实能短时间内带来不少流量;同时,也要具备一定内心成熟能力。
    • 掘金:一个帮助开发者成长的社区、面向互联网技术人的内容分享平台。倒是作为创作者,用过一段时间,但它那短时间内崛起的超大权重,远高于个人主博客,就不再用了。对于既得利益者,掘金是蛮好的存在。就个人使用感受,远不如「思否」友好。

    独立开发者寄语

    「倾城之链」作为一个开放平台,旨在云集全球优秀网站,探索互联网中更广阔的世界;在这里,你可以轻松发现、学习、分享更多有用或有趣的事物。如果您感兴趣想进一步了解,可以参见关于倾城;之前也有对「倾城之链」的来龙去脉,在博客中做了分享,具体可以参见以下文章:

    除了「倾城」这款作品,利用闲暇也写了些工具,感兴趣的朋友,可以移步轩帅个人作品集查阅。

    独立开发者支持计划-1.png

    该内容栏目为「SFIDSP - 思否独立开发者支持计划」。为助力独立开发者营造更好的行业环境, SegmentFault 思否社区作为服务于开发者的技术社区,正式推出「思否独立开发者支持计划」,我们希望借助社区的资源为独立开发者提供相应的个人品牌、独立项目的曝光推介。

    有意向的独立开发者或者独立项目负责人,可通过邮箱提供相应的信息(个人简介、独立项目简介、联系方式等),以便提升交流的效率。

    联系邮箱:pr@www.wgoodp.icu


    image

    二维码过期添加思否小姐姐拉你入群
    image.png
    查看原文

    赞 8 收藏 2 评论 0

    认证与成就

    • 认证信息 SegmentFault 编辑
    • 获得 2495 次点赞
    • 获得 22 枚徽章 获得 0 枚金徽章, 获得 1 枚银徽章, 获得 21 枚铜徽章

    擅长技能
    编辑

    开源项目 & 著作
    编辑

    • 「SFIDSP - 思否独立开发者支持计划」

      为助力独立开发者营造更好的行业环境, SegmentFault 思否社区作为服务于开发者的技术社区,正式推出「思否独立开发者支持计划」,我们希望借助社区的资源为独立开发者提供相应的个人品牌、独立项目的曝光推介。

    • 「SFOSSP - 思否开源项目支持计划」

      为助力优质开源项目成长, SegmentFault 思否社区作为服务于开发者的技术社区,正式推出「SFOSSP - 思否开源项目支持计划」,我们希望借助社区的资源对开源项目进行相关的宣传推广,并作为一个长期项目助力开源事业的发展,与广大开发者共建开源新生态。

    • 「SFKP ? 计算机百科」

      《SFKP ? 计算机百科》是 SegmentFault 思否编辑部策划的专题内容,面向在 21 世纪冲浪的每一位网友,进行计算机相关知识点的科普与开放讨论。

    注册于 2019-07-21
    个人主页被 137.6k 人浏览

    bt365体育投注