Rust探秘
未读
highlight: a11y-lighttheme: condensed-night-purple问题详述为什么 Rust 里的变量被设计成默认不可变,要加mut关键词才可变?为什么不设计成默认可变,加关键词变成不可变? 或者两者同等地位,比如像某语言一样let不可变,var可变?
观点一:默认设计成不可变没啥特别原因,但是可以聚焦到 rust 的基本特性:安全性。从这个方面考虑。如果忘记设置 mut,编译器会捕捉到错误,并让你知道你已经改变了一些你可能不打算改变的东西。如果默认情况下绑定是可变的,编译器将无法告诉你这一点。若你确实打算改变,那么解决方案很简单:添加mut。
通常情况下,你可以经常避免显示可变,在 Rust 中这是更可取的,话虽然如此,有时候可变是必要的,所以并不禁止。
Shadowing 不同于将变量标记为 mut,因为如果我们在不使用 let 关键字的情况下不小心尝试重新分配给该变量,则会出现编译时错误。通过使用 let,我们可以对一个值执行一些转换,但在这些转换完成后变量是不可变的。
观点二:鉴于一种语言具有可变和不可变变量,对我来说默认情况下不可变似乎更好。 ...
Flutter
未读原文地址: Flutter Background Tasks
Flutter 是一个非常好用的使用 Dart 编程语言构建漂亮移动应用程序的框架,可以让 Android 和 IOS 上共用同一套代码。
移动应用程序可能有运行后台任务需求, 如监听位置变化,监视用户运动情况(步数、跑步、步行、驾驶等);订阅系统事件 如 BootComplete、电池和充电,搜索 BT 或 WiFi 网络等。
在 Android 中,我们可以在应用程序实际关闭时运行一些后台任务!
首先定义一个 BootComplete 广播接收器,当手机启动后立即执行,然后使用 WorkManager 或 AlarmManager 调度后台任务,使用 Service 在后台执行代码。
当然,后台任务中有些需要用户权限,可能会在通知栏显示一个通知表明此应用程序在后台运行。只要用户知道并同意,这些任务就可以在后台运行。
在 iOS 中,后台任务有更严格的限制,但仍然有一些方法可以运行一些后台任务。
说到 Flutter 应用程序及后台任务需要澄清的是他们的执行是在对端平台!负责注册和管理后台任务(Worker,Alarm, ...
Flutter
未读本文内容主要翻译自Keys in Flutter, 最初翻译动机是原作者写的比较通俗,其次 key 知识点在 Flutter 中比较重要,但在翻译过程中发现不配合相关源码很难理解作者意思而且看完容易忘,所以加了些注释和理解(详见引述),有什么不对的地方欢迎各位大佬交流指正,多谢!
在使用 Flutter 时,我们经常会遇到一个叫做 Key 的东西。Key 是 Flutter 中几乎所有 widget 都具有的属性。但它并不常用而容易被忽视。为什么 widget 具有 Key 呢?它对我们有什么意义呢?让我们找出答案。
什么是 KeyFlutter 将 Key 描述为 Widget、Element 和 SemanticNodes 的标识符。这是什么意思呢?这意味着 Key 是分配给 Widget 的唯一标识,通过 key 可以与其他 Widget 区分开来。对于 Widget 在 Widget 树中改变位置的情况,Key 帮助保留它们的状态。说明 Key 大多数情况下对于有状态的 Widget 而言更有用,而对于无状态的 Widget 则不太需要。
何时使用 KeyKey 可以放在代码 ...
效率工具
未读有时候会想,如果 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 ...

.webp)

.jpeg)
.jpg)
.jpg)
.jpg)

.jpg)
