首页 文章 精选 留言 我的

精选列表

搜索[高度可定制],共10000篇文章
优秀的个人博客,低调大师

Taro 3.1 版本正式发布:面向定制化的小程序开发

自 Taro 3.1 体验版推出后,我们不断地根据社区的反馈意见对 3.1 版本进行打磨。主要改进了开放式架构、引入了CustomWrapper组件以解决性能问题、提出了原生小程序渐进式混合使用 Taro的解决方案。 经历了 12 个 beta 版本后,终于迎来了 3.1 正式版🎉 一、Highlights 1. 开放式架构 近年来业界推出的小程序平台越来越多,但 Taro 核心维护的平台只有 6 个,因此常常有同学提出能不能支持某某平台的 Feature Request。 基于目前的架构,支持一个新的平台开发复杂度高,同时社区也难以参与贡献。 为此我们把 Taro 打造成为一个开放式框架,通过端平台插件能支持任意小程序平台: 插件开发者无需修改 Taro 项目源码,即可编写出一个端平台插件[1]。 插件使用者只需安装、配置端平台插件[2],即可把代码编译到指定平台。 基于开放式架构,我们新增了一些有趣的插件,也十分期待大家利用它施展创意。 新增的插件: 插件 功能 @tarojs/plugin-platform-weapp-qy[3] 编译企业微信小程序 @tarojs/plugin-platform-alipay-dd[4] 编译钉钉小程序 @tarojs/plugin-platform-alipay-iot[5] 编译支付宝 IOT 小程序 @tarojs/plugin-inject[6] 为所有小程序平台快速新增API、组件,调整组件属性等 2. 新增小程序性能优化组件 CustomWrapper Taro3 使用<template>进行渲染,所有的setData都由页面对象调用。如果页面结构比较复杂,应用更新的性能就会下降。 为此我们引入了一个基础组件CustomWrapper,它的作用是创建一个原生自定义组件。对后代节点的setData将由此自定义组件进行调用,达到局部更新的效果,从而提升更新性能。 开发者可以使用 CustomWrapper去包裹遇到更新性能问题的组件: <CustomWrapper> <GoodsList> <Item/> <Item/> //... </GoodsList> </CustomWrapper> 更详细的性能优化原理请见《Taro 助力京喜拼拼项目性能体验优化》[7] 3. 原生小程序渐进式混合使用 Taro 开发 过去我们对在 Taro 项目中混合使用原生的支持度较高。相反地,对在原生项目中混合使用 Taro 却没有太重视。但是市面上有着存量的原生开发小程序,他们接入 Taro 开发的改造成本往往非常大,最后只得放弃混合开发的想法。 经过与京喜拼拼项目的合作[8],也驱使了我们更加关注这部分需求。Taro 推出了一套完整的原生项目混合使用 Taro 的方案。 方案[9]主要支持了三种场景: 在原生项目中使用 Taro 开发的页面。 在原生项目的分包中运行完整的 Taro 项目。 在原生项目中使用 Taro 开发的自定义组件。 希望以上方案能满足打算逐步接入 Taro 开发的同学。更多意见也欢迎在Github[10]上给我们留言。 4. 拥抱 React 17、TypeScript 4 4.1. 使用方法 新项目: 模板默认依赖 React 17、TypeScript 4,可以直接使用。 旧项目: 手动升级项目依赖: react: ^17.0.0 react-dom: ^17.0.0 typescript: ^4.1.0 @typescript-eslint/parser: ^4.15.1 @typescript-eslint/eslint-plugin: ^4.15.1 设置 ESLint 配置: //.eslintrc module.exports={ "extends":["taro/react"], "rules":{ "react/jsx-uses-react":"off", "react/react-in-jsx-scope":"off" } } 4.2. React 默认支持New JSX Transform[11] New JSX Transform 让开发者不再需要在书写 JSX 前先引入 React。 如果不希望打开此功能,可以修改 Babel 配置的reactJsxRuntime选项为classes: //babel.config.js module.exports={ presets:[ ['taro',{ framework:'react', ts:true, reactJsxRuntime:'classes' }] ] } 4.3. React H5 端默认开启fast-refresh[12] 如果不希望打开此功能,可以修改 Taro 配置和 Babel 配置: //config/index.js constconfig={ h5:{ devServer:{ hot:false } } } //babel.config.js module.exports={ presets:[ ['taro',{ framework:'react', ts:true, hot:false }] ] } 二、Breakings 1. React 项目的 React 版本必须>= 16.14.0,或使用17.0.0+ 2. Vue2 修复 Vue2 入口组件生命周期多次触发的问题,#7179 用户编写的入口组件需要修改如下: //app.js //3.0中需要创建Vue对象 constApp=newVue({}) //3.1中只需要返回对象字面量 constApp={} 3. Linaria 使用Linaria时,需要修改linaria.config.js的内容。 module.exports={ rules:[ { action:require("linaria/evaluators").shaker, }, { //此处的正则有改变 test:/node_modules[\/\\](?!@tarojs"\/\\")/, action:"ignore" } ] } 三、特性 组件View增加catchMove属性,解决滚动穿透[13]问题。 同步所有内置小程序官方最新的 API、组件能力。 四、问题修复 1. 重要 修复百度小程序渲染问题,#7293。 修复、增强微信小程序转换为 Taro 的能力。 优化打包体积。 支付宝小程序支持引用自定义组件。 修复小程序分享 API 在使用 redux 时无法生效的问题,#7232。 2. 小程序 修复多端文件没按照 Webpackextension配置解析的问题,#6786,#7265 。 修复 style 属性设置失败的问题,#8678。 3. H5 修复 H5 端 HMR 失效的问题。 支持路由404时触发App.onPageNotFound,#7474。 修复表单组件slot兼容问题,#7363。 修复View和Text组件多行截断样式失败问题,#7472 #6741。 组件的style属性支持设置 CSS 变量,#7452。 五、升级指南 从 v2.x 升级的同学需要先按迁移指南[14]进行操作。 从 v3.x 升级的同学,首先需要安装 v3.1 的 CLI 工具: npmi-g@tarojs/cli 然后进入项目,删除node_modules、yarn.lock、package-lock.json。 最后把package.json文件中 Taro 相关依赖的版本修改为^3.1.0,再重新安装依赖。至此升级结束。 六、未来规划 得益于58 技术团队[15]的全力支持,Taro 3 即将支持React Native,现已推出 3.2.0 的 Beta 版本,3.2.0 正式版将于本月底推出。欢迎抢先体验:《增加 React Native 支持的 Taro 3.2.0 版本测试通告》[16] 七、感谢 开源不易,贵在坚持。Taro 团队衷心感谢各位参与过本项目开源建设的朋友,无论是为 Taro 提交过代码、建设周边生态,还是反馈过问题,甚至只是茶余饭后讨论、吐槽 Taro 的各位。 现诚挚邀请您与 Taro 官方团队交流您的使用情况,有你相伴,Taro更加精彩!问卷地址[17] 最后,特别感谢为 Taro 从 v3.0 走到 v3.1 贡献过代码的各位同学,不分先后: @wuchangming @SyMind @zhuxianguo @Songkeys @vdfor @ZeroTo0ne @zhaoguoweiLLHC @Spencer17x @wingsico @w91 @fjc0k @Leechael @southorange1228 @alexlees @cncolder @rottenpen @gcxfd @twocucao @pengtikui @kala888 @LengYXin @iugo @jin-yufeng @xuchengzone @csolin @xiaoyao96 @baranwang @fred8617 @huanz @Cslove @002huiguo @jazzqi @Jetsly @yuezk @lukezhange001 @k55k32 @Soul-Stone @hisanshao @gjc9620 @younthu @digiaries @GoodbyeNJN @Swordword @helsonxiao @Ininit @atzcl @taoqf @Aysnine @cjz9032 @z3rog @doublethinkio @Jackyzm @ywzou @koalaink @mosqlee @wangjuerong @kdxcxs @LiHDong @ryougifujino @GitaiQAQ @logix-o @CallMeXYZ 参考资料 [1] 编写出一个端平台插件:https://taro-docs.jd.com/taro/docs/next/platform-plugin-how [2] 安装、配置端平台插件:https://taro-docs.jd.com/taro/docs/next/platform-plugin#%E7%AB%AF%E5%B9%B3%E5%8F%B0%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%EF%BC%9A [3] @tarojs/plugin-platform-weapp-qy:https://github.com/NervJS/taro-plugin-platform-weapp-qy [4] @tarojs/plugin-platform-alipay-dd:https://github.com/NervJS/taro-plugin-platform-alipay-dd [5] @tarojs/plugin-platform-alipay-iot:https://github.com/NervJS/taro-plugin-platform-alipay-iot [6] @tarojs/plugin-inject:https://github.com/NervJS/taro-plugin-inject [7] 《Taro 助力京喜拼拼项目性能体验优化》:https://docs.taro.zone/blog/2021-02-08-taro-jxpp#2-%E6%B8%B2%E6%9F%93%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96 [8] 经过与京喜拼拼项目的合作:https://docs.taro.zone/blog/2021-02-08-taro-jxpp [9] 方案:https://docs.taro.zone/docs/taro-in-miniapp [10] Github:https://github.com/NervJS/taro [11] New JSX Transform:https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html [12] fast-refresh:https://github.com/facebook/react/issues/16604#issuecomment-528663101 [13] 滚动穿透:https://docs.taro.zone/docs/next/react#%E9%98%BB%E6%AD%A2%E6%BB%9A%E5%8A%A8%E7%A9%BF%E9%80%8F [14] 迁移指南:https://taro-docs.jd.com/taro/docs/next/migration [15] 58 技术团队:https://github.com/wuba [16] 《增加 React Native 支持的 Taro 3.2.0 版本测试通告》:https://taro-docs.jd.com/taro/blog/2020-12-02-taro-3-2-0-cannary-1 [17] 问卷地址:https://wj.qq.com/s2/6494361/09cf

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

npm 加入 TC39 委员会,参与定制 JavaScript 标准

在宣布将其 bug 反馈渠道从 GitHub 转移到自己的npm.community后,npm 昨日再次公布了一个大消息,他们已加入ECMA International并参与到TC39 中。 TC39是专门负责定义 JavaScript 标准的技术委员会,根据 ECMAScript 规范对 JavaScript 语言进行了标准化,包括(但不限于)语言的语法、语义、库和支持该语言的补充技术。 开发团队表示,npm 每天直接接触近 1100 万的 JavaScript 用户,加入 TC39 后,npm 将利用对 JavaScript 社区的了解来倡导和改进语言规范,给所有 JS 开发者提供帮助。

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

SOTON私人定制:利用Python进行数据分析(总结)

《利用Python进行数据分析》这本书在我目前看来是一本工具性质的书,没有具体讲如何进行数据分析,主要做着重于如果用Python做数据分析,目前你可以用到的哪些工具。因此,当我看这本的时候每天也就花了1个小时不到的时候,通过幕布整理了一些常用功能,而熟练掌握这些工具则是在下一周学习理论基础后,通过数据进行练手的时候进行。 以下内容是我认为比较重要的知识点, numpy的ndarray对象,将同质数据存放到内存的相近区域加速运算 pandas的DataFrame的索引操作,如何熟练选择自己需要的区域 pandas的层次索引 pandas的分组运算思想 matplotlib类似于R语言的grid基本库,为后续开发提供了API 时间序列部分,我就简单看了一下,比较重要的就是时间序列的划窗相关函数。 阅读的时候,我每章都在幕布上做了一些记录,帮助自己回忆知识点。 幕布地址: https://mubu.com/doc/3F9fCuHhs0 利用Python进行数据分析.png

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

安卓系统定制:android的充电图标的制作和显示

http://blog.csdn.net/lushengchu_luis/article/details/20382775 最近RK3026的项目需要修改开机充电,才分析了Android原生态的充电过程。 充电的代码和图标在system/core/charger中,会编译成名字为charger的可执行文件,打包进ramdisk中,在init.rc中脚本启动: [java] view plain copy oncharger setpropro.boot.charger.emmc0 exportPATH/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin exportLD_LIBRARY_PATH/vendor/lib:/system/lib setpropsys.usb.configadb servicecharger/charger disabled on charger会触发该服务执行,所以现在要分析的就是on charger是如被何触发的。 在system/core/init/init.c中: [java] view plain copy is_charger=!strcmp(bootmode,"charger"); 。。。。。。 if(is_charger){ action_for_each_trigger("charger",action_add_queue_tail); }else{ action_for_each_trigger("early-boot",action_add_queue_tail); action_for_each_trigger("boot",action_add_queue_tail); } 可见,要触发charger, is_charger为真即可,即bootmode为“charger”,所以继续跟踪代码: [java] view plain copy struct{ constchar*src_prop; constchar*dest_prop; constchar*def_val; }prop_map[]={ //{"ro.boot.serialno","ro.serialno","",}, {"ro.boot.mode","ro.bootmode","unknown",}, {"ro.boot.baseband","ro.baseband","unknown",}, {"ro.boot.bootloader","ro.bootloader","unknown",}, }; for(i=0;i<ARRAY_SIZE(prop_map);i++){ ret=property_get(prop_map[i].src_prop,tmp); if(ret>0) property_set(prop_map[i].dest_prop,tmp); else property_set(prop_map[i].dest_prop,prop_map[i].def_val); } ret=property_get("ro.boot.console",tmp); if(ret) strlcpy(console,tmp,sizeof(console)); /*saveacopyforinit'susageduringboot*/ property_get("ro.bootmode",tmp); strlcpy(bootmode,tmp,sizeof(bootmode)); 读取“ro.bootmode”得到的,但是“ro.bootmode”的属性又是通过"ro.boot.mode"来设置的。 而这个属性是读取/proc/cmdline参数,最终在import_kernel_nv函数中设置的: [java] view plain copy if(!strcmp(name,"qemu")){ strlcpy(qemu,value,sizeof(qemu)); }elseif(!strncmp(name,"androidboot.",12)&&name_len>12){ constchar*boot_prop_name=name+12; charprop[PROP_NAME_MAX]; intcnt; cnt=snprintf(prop,sizeof(prop),"ro.boot.%s",boot_prop_name); if(cnt<PROP_NAME_MAX) property_set(prop,value); } } 命令行是kernel传进来的,所以要进入驱动中去了。 在kernel/drivers/power/rk29_charger_display.c文件中: [java] view plain copy staticvoidadd_bootmode_charger_to_cmdline(void) { char*pmode="androidboot.mode=charger"; //intoff=strlen(saved_command_line); char*new_command_line=kzalloc(strlen(saved_command_line)+strlen(pmode)+1,GFP_KERNEL); sprintf(new_command_line,"%s%s",saved_command_line,pmode); saved_command_line=new_command_line; //strcpy(saved_command_line+off,pmode); //intoff=strlen(boot_command_line); //strcpy(boot_command_line+off,pmode); printk("Kernelcommandline:%s\n",saved_command_line); } 终于看到了,就是在这里设置了androidboot.mode=charger属性。 继续跟进什么条件下才设置该属性,发现关机充电情况下,设置该属性,机子运行charger执行文件;这时候如果电源键按下超过两秒,charger执行文件重启机子,把标记设置为BOOT_MODE_CHARGE;重启后在驱动中,判断电量如果小于5%(可以修改该值),继续进入charger模式;否则不再设置androidboot.mode=charger属性,系统不会再执行charger文件,系统进入正常启动。

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

时间可证明的API经济

2017年,我们鲁朗软件(北京)有限公司基于深度学习技术的植物花卉识别应用接口,在阿里的API大赛总决赛中非常荣幸的获得了一等奖,至今被提及时,仍是公司内外很让人骄傲的一件事。 (图:大赛获奖照) 该API(阿里云市场的网址)能通过花、果、叶等特征部位的图片,快速识别植物花卉,识别范围覆盖了中国野生及栽培植物3000属,近5000余种常见花草树木。API在2017年6月中旬上线至今的半年时间,已有1106位客户,用户评价也一直保持在较高的水准。其中知名用户包括花帮主,某运营商支付客户端,某销量排名国内前二的手机厂商。 (图:API购买页面) 植物识别API其实是我们公司花伴侣App(各大手机应用商店内搜索花伴侣可下载到)的延伸。我们在2016年下半年开始研发这款App时,也特别注意到随着世界互联程度的日益提升,应用编程接口 (API) 会日益成为开发者访问外部数据和功能的一个重要趋势。我们的App上线后不久,恰逢2017年阿里云推出API生态计划,我们也迅速投入到这一生态系统中,通过API的形式,得以将自己的AI能力有偿的让更多的应用和开发者来集成使用,有效的实现了互惠互利的共享经济模式。 (图:API经济) 就像花伴侣产品负责人赵继强先生说的:“我们非常看好API市场的未来发展,现阶段API市场还处在一个培育期,我们相信随着越来越多的API提供者的加入,开放API能够完成的工作会越来越多,也会越来越好,人们也会更加倾向于使用开放的API来构建自己的应用。” 参加完API大赛后,鲁朗软件仍然极富热情的在植物识别相关领域进行投入和合作。目前已完成和正在进行的工作主要有如下几个方面: (1)花伴侣产品目前已完成1万种植物的识别,并很快会更新现有API所用的5千种模型。植物品种越多,AI模型在相似区分上的图库建设和算法调优难度也越大,这也是为什么我们的几个竞争对手能识别的植物品种都一直不能超过3000种的一个重要原因。鲁朗软件的技术人员一直在优化这方面的工作,必要的地方辅以模式识别等技术,多手段持续提高识别的准确度。 (2)为服务农业,组织人员搜集和清洗了100余种杂草图库,基本囊括国内可见的所有杂草品种。并在算法层面用高阶网络,辅以模式识别技术和局部特征综合技术,实现了行业内其他人都不曾做到的,相似度很高的杂草识别,将在年底上线。比如常见的杂草蒲公英和荠菜,开花前两者叶片相似度就很高。 (图:蒲公英) (图:荠菜) (3)新产品方面,鲁朗软件近半年也在植物病虫害识别与防治上,植物表型识别与自动测量上投入了大量资源研发新产品,会在产品陆续发布和完善后,第一将能力API化,服务更多第三方伙伴,服务那些我们API能力能实现,应用形态我们顾及不到的领域,促进植物相关应用生态的发展与繁荣。 通过植物识别API这半年的实际线上运营,我们切身感受到API经济的的确确是一股大趋势,也是真真切切被时间证明了的。 感谢阿里,感谢我们的用户! 附:鲁朗软件(北京)有限公司介绍 鲁朗软件(北京)有限公司成立于2010年7月,注册资金1千万。公司现有员工70余人,硕士及以上学历占总人数的17%,研发人员占总人数的95%。公司致力于利用移动互联、云计算、大数据、人工智能等高新技术,为客户提供可信赖,高水准的软件研发技术服务。公司通过高新技术企业、软件企业,ISO9001等多项认证,拥有图像识别,移动办公,移动支付,电商,知识问答,气象云等多个软件产品及15个软件产品著作权。(官网:http://www.robusoft.com.cn/)

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

微软希望客户对近期频繁发生的国家级网络攻击事件保持高度警惕

针对近期涌现的疑似具有国家级技术和资源背景的黑客攻击,微软其实已经在 2020 版《数字防御报告》中有所预料。虽然截止目前,微软尚未在相关调查中发现自家产品或云服务有漏洞被利用,但该公司还是在一篇博客文章中发出了提醒,希望客户能够采取切实有效重要步骤,以防其成为此类网络攻击的受害者。 微软在文中列出了恶意代理开展复杂网络攻击的一些技术细节,比如通过 SolarWindsOrion 产品中的恶意代码实施入侵。若被攻击者得逞,后续黑客可能以此为跳板,在网络中获得更高的权限。 其次,攻击者或利用本地窃取的管理员权限,获得对机构内受信任 SAML 签名证书的访问权限。然后通过伪造 SAML 令牌,假扮组织内任何现有用户的账户,甚至染指特权较高的账户。 为应对此类异常登录,建议客户在网络系统上进行适当的安全配置,以区分访问本地或云端任何资源的可信证书。由于 SAML 令牌使用了自签名证书,组织内很可能会忽视掉这部分异常。 利用上述或其它技术获得了搞特权账户的访问权限之后,攻击者还可将自己的登录凭证添加到现有的应用程序服务主体中,从而使之获得相关应用程序的权限调用 API 。 至于 COVID-19 大流行期间的完整事件分析、以及社区对网络安全的态度等问题,微软将在完整版的 2020 数字防御报告中进行阐述。

资源下载

更多资源
Nacos

Nacos

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

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

用户登录
用户注册