效率工具
未读有时候会想,如果 chatGPT 是人,它会是一个怎样的人呢?下面是我的推测过程。
首先,她应该是女人会推测而不会计算你问它: 3457 * 43216 = ,它回答 149261912 (这是错的。正确结果是 149397712)。
之所以结果的 2 是对的,仅仅因为它读了太多的文字资料以后,隐约感觉到 7 结尾的文字,乘号,6 结尾的文字,和 2 结尾的文字比较「押韵」从语感上比较像一首诗。
所以它就学会了这样的文字,而不是学会了计算。
感性不理性有没有觉得,当自己跟老婆吵架时,你讲什么正确的道理都是徒劳,她不在乎对错而在于你有没有顾及她的感受。这印证《男人来自火星,女人来自金星》中说到的一个观点:男人和女人在思维理解上有本质的不同,男人注重理性,女人注重感性。
没错,chatGPT 不擅长理性计算,在背诵了一堆堆文字资料后,她觉得”顺口”就认为是对的答案,就是这么任性就是这么感性。
所以,ChatGPT 肯定是记忆力超强,天生对数字逻辑一窍不通的女人。
其次,她有工作经验且善解人意预训练:增加工作经验举个栗子:家里请阿姨,来你家之前阿姨会接受家政公司的岗前培训,怎么拖 ...
前言写作如说话,想说与说明白中间隔着沟壑!
下面用 Notion AI 作诗来作为本文开头吧。
想说与说明白(作者:Notion AI)
想说千言万语,说明白却难如登天。
言语之间,沟壑重重,思想与表达,有时天壤之别。
有时候,我们沉默不语,
缺乏表达能力,难以抒发内心的情感。
这时候,Notion AI 来帮忙,
让语言更通俗易懂,让思想更清晰明了。
在说话和写作中,Notion AI 是你的好帮手,
让你的思想更易传达,让你的话更好理解。
或许,想要表达的真谛,
并非言语所能尽述的,
但有了 Notion AI,
我们的表达将更加清晰明了。
如果你话少就像读书时不擅长写作一样,写一篇规定字数的文章时,即使绞尽脑汁已经表达完毕,却还是凑不够字数。
以如下文字为例,展示 Notion AI 如何帮你解决字数不够问题:
欢迎关注公众号:编程黑板报,一起探索和讨论遇到的技术和生活问题,希望可以帮到你。 稀土掘金主页: https://juejin.cn/user/272334612863431/posts
1. 使用 Notion AI 选中上面文本,点击 Make longer ...
highlight: a11y-dark前言本文是关于使用flutter_download_manager下载功能的实践和探索。我们将基于flutter_download_manager的功能扩展,改造成自己想要的样子。在阅读本文之前,建议先了解前两篇文章:
Flutter 下载篇 - 壹 | flutter_download_manager源码解析
Flutter 下载篇 - 贰 | 当下载器遇上网络库切换
本文将基于第二篇中的扩展框架,将网络库从dio切换为httpclient,并结合改造过程中发现的问题提出自己的想法。
优化点:dynamic的告警问题
在第2和20行中,黄色标记表明,如果第2行中的每个网络库下载的返回值可能不同,则考虑将其设置为“dynamic”,这可能导致第20行中出现响应状态码的告警,因为该属性可能不存在。
为了确保 download 接口的返回值具有 statusCode 属性,在这里定义了一个专门的返回类以进行限制。具体定义如下:
这样就解决了statusCode告警问题,其中extra可以存放原始download response对象。
Htt ...
需求背景继上篇《Flutter 下载篇 - 壹 | flutter_download_manager源码解析》中详细介绍了flutter_download_manager用法和原理。在优缺点中提到,该库纯Dart实现,支持下载管理,暂停,恢复,取消和断点续传。其中有个缺点是网络库与dio强耦合,不支持自定义网络库扩展。
有人会说: dio这么牛逼,直接用不就好了,为啥还要支持别的网络库,没事别瞎折腾。
我想说:
世界不只有一种声音,那不然多无趣。
第三方库对应用本身来说是黑盒,开发者一般疏于关注其功能改动对应用影响除非产生重大事故,这种不可控的情况应谨慎。
设计上遵循DIP原则,抽象不要依赖具体实现细节,具体细节依赖抽象,我们需要抽象网络层来给项目依赖而非直接依赖dio。
快速切换到其他网路库。
本文将从现状出发,一步步带你解耦flutter_download_manager中的网络库。
现状说明从类图上整体了解flutter_download_manager类设计过程中对dio强耦合概括,然后通过代码具体讲解。
类图体现
代码体现耦合点一:dio.CancelToken
每个下载 ...
前言内容类应用中图片或文件下载,一般应用中应用更新和升级,这些都是经典的下载场景。下载是项目中基础且重要的模块。
从代码逻辑复用性和人力成本考虑,一直想实现一个纯Dart实现的下载库,作为技术储备。
最近发现了一个纯Dart实现的下载库flutter_download_manager,相对来说各方面还算满足需求,支持断点续传,暂停,取消等我比较看重的功能。但是有些地方还需要改进。
话不多说,首先简单介绍下这个库吧。
flutter_download_manager 简介地址: flutter_download_manager
版本: 0.5.4
特点:
纯 Dart 实现
通过 url 管理下载任务
能够通知状态和进度更改
部分下载功能
队列下载
暂停、取消或恢复下载
并行文件下载(2 个或可以更改)
支持批量下载
支持平台: Linux | MacOS | Windows | Android | iOS
使用方法简单下载一个文件123456789101112131415var dl = DownloadManager();var url = "adasdad.com/a ...
Flutter
未读本文内容主要翻译自issue 中国外大佬对防抖与节流的解释, 后面补充了自己的理解和总结。
什么是防抖与节流防抖和节流是处理“过于频繁”发生的事情的常用技术。想象一下,你和朋友见面,朋友正在给你讲一个故事,但他们说话时很难停下来。假设您想在可能的情况下不打断他们满足他们讲故事的兴致,同时还要回应他们所说的话。 (我知道这可能有点做作,但请耐心等待!)
假设你们永远不能同时说话。你有几个策略:
同步你可以在他们说完每句话时做出回应:
如果您的回复很短,这可能没问题。但是,如果您的回答较长,这可能会使他们很难讲完这个故事。所以这个策略不是很好。
防抖(Debounced)你可以等他们停止说话。例如,如果他们停顿的时间足够长,您就可以开始回应:
如果你的朋友偶尔会停下来,这个策略会很有效。但是,如果他们不停地说了几分钟,这根本不会让你回应:
节流(Throttled)您可以决定最多每分钟响应一次。在这里,您可以计算自己有多久没有说话了。一旦你一分钟没有说话,你就在朋友的下一句话之后插入你的回应:
如果您的朋友希望您在他们讲故事时做出回应,但他们不会为您做这件事而制造停顿,则此策略会很 ...
Flutter
未读本文翻译自: Composition in Flutter & Dart
在 Flutter & Dart 中使用组合创建模块化应用程序。
什么是组合?在dictionary.com 中 composition 的定义为:将部分或者元素组合成一个整体的行为。简单说,组合就像堆乐高积木,我们可以将积木组合成一个结构。
在 FP 中,我们定义了一个简单的通用函数,该函数可以通过组合构成一个复杂的函数,一个函数的输出是另外一个函数的输入,依此类推。输入从一个函数传递到另外一个函数最后返回结果。因此,组合可以认为是数据流动的管道。
组合的数字符号是 f.g。 f(g(x))它从里向外执行。
首先 x 初始化。
将 x 作为参数传递给 g,g(x)被初始化。
g(x)被计算并将结果传递给 f 函数,最后 f(g(x))被计算。
在 Dart 中,组合函数可以表示如下:
Compose 是个高阶函数,它接收两个函数并返回一个可接收输入的函数。 组合的执行顺序是从右到左,因此g先执行,然后再执行f。
如上图创建了函数shout,它由两个较小的功能函数toUpper和excl ...
Flutter 3.7 发布,本人对其中后台isolate通道比较感兴趣,迫不及待翻译了下Aaron Clarke的文章,第一次翻译,有不足地方欢迎各位大佬们评论区指正,我将持续更新到本文,谢谢。
原文地址:Introducing background isolate channels | by Aaron Clarke | Flutter | Jan, 2023 | Medium
此时此刻,我很高兴地宣布从 Flutter 3.7 开始开发人员可以在任意 isolate 中使用插件和平台通道了。 这是自 2018 年以来一直存在并且也是我们排名最高的问题之一。它被降低了优先级,因为实现并不容易且已存在解决方案,尽管很麻烦:始终在 root isolate(Flutter 提供的 isolate)中使用插件 . 然而,随着 Flutter 的日益成熟,越来越关注性能,俗话说“让它工作,让它正确,让它快速”。 选择实现这一特征有利于提高性能和易用性。 因此,考虑带来的收益我们决定实现这一特性。
如果您想了解如何使用此特性,请查看 GitHub 上的示例代码(PS: 原文示例代码不可用 ...
Flutter
未读前言最近群里遇到获取Route名为空的问题,当时没在意。。。
直到自己在监控页面启动耗时,需要确定当前页面是哪个从而方便标记它加载的耗时时,遇到同样 route.settings.name 为空问题,模拟场景如下:
在 main.dart 页面中点击 + 按钮跳转到 TestPage2 页面。
MaterialApp 中设置路由守卫并在路由守卫中打印 route 名。
main.dart
launch_observer.dart
TestPage2.dart
路由守卫中打印结果如下:
可以看出
应用启动进入 main 打印是正确的,之前没有页面,进入时候打印 route = /
进入 TestPage2 时,previewousRoute 的 name = / 正确,但是当前 route 的 settings.name 却为 null ,这就比较奇怪了。
我试着复现文章开头的例子,代码如下:
main.dart 不变,点击 + 跳转到 TestPage2
在 TestPage2 中获取路由参数和路由名字
结果发现:name 的值仍 ...
前言做线上帧率监控上报时,少不了需要弄明白如何通过代码获取实时帧率的需求,这篇文章通过图解配合Flutter性能调试工具的方式一步步通俗易懂地让你明白获取帧率的基础知识,以后再也不愁看不懂调试工具上指标了。
说说 List<FrameTiming>Flutter 中通过如下方式监听帧率,addTimingsCallback 涉及到帧调度知识,感兴趣可以看看这篇Flutter 帧调度过程。
这里重点说说 List<FrameTiming>。
List<FrameTiming>从哪里来addTimingsCallback 定义:
List<FrameTiming>可简单理解成:引擎层到框架层的帧数据流。
List<FrameTiming>何时有值List<FrameTiming>则表示一系列实时帧信息。
如点击屏幕按钮,引擎将传递系列帧信息到框架层:“框架层,屏幕发送了变化,准备回调数据更新了!”。如果用户未操作,addTimesCallback 则不会回调。
因此 ,addTimesCallback(Lis ...