引言去年 6 月份,我写了一篇文章讲的是 AI 怎么帮我们做 PPT 的,文章名字叫Gamma:强大的 AI 制作 PPT 神器,用完再也回不去了!,大家反响挺好的。然后我就一直收到大家的私信,他们遇到的问题我都记在了Gamma 注册不许说不会里。大家觉得挺头疼的一个问题就是 Gamma 是个外国网站,注册的时候得用魔法才能拿到邮箱里的验证码。到现在还有好多人在问我怎么解决这个问题呢。
今年,中国 DeepSeek 的出现让全世界都震惊了。
多亏了国家的繁荣和科技的快速发展,我们现在可以轻轻松松用国内的 AI 技术来做 PPT 了,再也不用费劲使用魔法了。
构思流程在用 AI 技术做 PPT 的时候,我觉得有两个步骤特别重要:
首先,AI 得做出符合特定需求的提纲和内容素材。
然后,把这些提纲和内容素材巧妙地变成 PPT 演示文稿。
举个例子,如果让 AI 写一篇关于“编程黑板报”公众号主题的文章,这样的指令对 AI 来说太模糊了。得用更精确、更专业的术语——也就是我们说的“专业提示语”,这样才能让 AI 更好地帮你。这种专业提示语就像是和 AI 沟通的桥梁。
专业提示语得精准,这 ...
在并发的世界中,最常见的并发安全问题就是数据竞争,也就是两个线程同时对一个变量进行读写操作。但当你在 Safe Rust 中写出有数据竞争的代码时,编译器会直接拒绝编译。那么它是靠什么魔法做到的呢?
这就不得不谈 Send 和 Sync 这两个标记 trait 了,实现 Send 的类型可以在多线程间转移所有权,实现 Sync 的类型可以在多线程间共享引用。但它们内部都是没有任何方法声明以及方法体的,二者仅仅是作为一个类型约束的标记信息提供给编译器,帮助编译器拒绝线程不安全的代码。
定义:
1234pub unsafe auto trait Send { }pub unsafe auto trait Sync { }
本文将深入探讨 Sync 和 Send traits,了解为什么某些类型实现这些 traits,而另一些则没有,并讨论 Rust 中并发编程的最佳实践。
The Sync TraitSync trait 表示一个类型可以安全地被多个线程同时访问。这里的访问指的是只读共享安全。Rust 中几乎所有的原始类型都实现了 Sync tra ...
AutoGPT 是什么Auto-GPT 是一个实验性开源应用程序,展示了 GPT-4 语言模型的功能。该程序由 GPT-4 驱动,将 LLM 的“思想”链接在一起,以自主实现您设定的任何目标。作为 GPT-4 完全自主运行的首批示例之一,Auto-GPT 突破了 AI 的可能性界限。
AutoGPT 是 github 上最火的 GPT 项目,目前已有 124k 的 star 数目。
AutoGPT与ChatGPT区别AutoGPT 旨在自动生成文本,可以用于生成文章、摘要、翻译等。它的训练数据来自多个领域的文本,能够适应不同的任务。而 ChatGPT 则是针对聊天场景开发的,旨在生成自然、流畅的对话。它的训练数据来自大量的对话语料,能够生成与人类对话相似的回复。
AutoGPT 效果展示
本文将教你用最简单的方法安装和体验一把 AutoGPT。
安装物料
google 账号
梯子
安装步骤第一步. 确认梯子是否开启全局模式梯子各不相同,可根据实际情况自行设置。
第二步. 登陆谷歌账号,点击菜单栏选择云端硬盘
第三步. 安装 Colab
若更多里没有 Colab 选项而已点击关联更多 ...
前言平时开发中遇到这样那样的命令需要记下来,一般做法是这样。
新建记事本
将需要记下的关键命令保存。
每次需要使用时,粘贴复制即可。
好像没什么毛病!直到遇到了 Cmder。。。
当看到同事分析问题时在 Cmder 里命令快捷键刷刷一顿操作,觉得挺厉害滴。感觉这同事技术好牛,快捷键用这么好。后来才知道是 Cmder 用的溜,给人感觉很厉害。从某种意义上说,Cmder 简直是技术人装逼必备神器。
本文不打算讲解 Cmder 的安装和配置过程。可自行查阅,不清楚也可留言。这里重点说说 Cmder 最吸引功能: 自定义命令别名
讲解自定义命令别名之前,先简单介绍下 Cmder。
什么是 Cmder一句话概括:作者出于 windows 上好的命令行终端太少而创建的 Cmder。
Cmder 是 windows 上一款命令行终端工具。
Cmder 特色:
可设置命令别名
丰富的颜色主题(Solarized、Twilight、Ubuntu、xterm、Monokai,甚至接受自定)、可定制字体
支持 tab 分页、同屏多端口(支持水平分割、垂直分割)
支持自定 terminal,无论是 ...
Flutter
未读图片列表类网络应用非常普遍,例如 B 站、小红书等。这类应用的主要特点是:
多标签页切换
标签页中包含列表 GridView 或者 ListView
列表中包含大量网络图片资源加载
下图是 B 站的切换效果,其中热门页中包含 ListView,追番页中包含 GridView,它们都包含大量网络图片资源。
在多标签页切换过程中,如果应用处理不当,会造成严重的卡顿问题。
下面是一些减少列表卡顿问题的策略和示例代码。
一. 减少刷新次数在标签页中,经常存在频繁调用 setState 的情况。这里列举了两个常见场景和优化方法。
1. 不相关多请求合并通常,标签页中包含不同结构,需在多个不同类型请求情况下更新界面数据。
例如,标签页结构包含三个部分:头部轮播、中部分类和底部的列表。如下图所示,这三部分内容涉及到三个不同的协议请求。
如果每个协议请求完毕后都使用 setState 来更新当前界面数据,势必会增加刷新次数。此时可使用Future.wait处理,Future.wait 可以带来两个好处(详细原因见打赌你不知道的两个 await 使用细节):
请求合并减少耗时。
请求结果合并提 ...
三年前 python 大佬吉多·范罗苏姆(为 Python 程序设计语言的最初设计者及主要架构师)才知道 git worktree ,我现在才知道,我觉得没啥丢人的。
应用场景如果你正在 feature 的分支中开发新功能,线上版本紧急错误又需要你基于 master 做修复。
可能有如下几种办法解决:
解法 1
将本地修改文件通过 git add . && git commit 提交到当前分支,或者通过 git stash 暂存起来
12345678// feature branchgit add .git commitgit checkout master// orgit stashgit checkout master
分支切到 master,修复完问题后切回 feature
若之前是 commit 的可直接开发,若是 git stash 则 git stash pop 出来处理
解法 2clone 一份同样远程代码到本地,切换到 master 分支来解决错误。
存在问题解法 1 缺点:
若正在跑一个耗时较长的测试不能动工作区代码,则只能等了
用 g ...
Flutter
未读
highlight: androidstudiotheme: juejin生命不息折腾不止,不论是积极拥抱变化主动升级 Flutter 版本亦或是被逼无奈被动升级 Flutter 版本,你总逃不过在多 Flutter 版本间来回切换的场景。想逃的办法也有,弃坑 Flutter。 😁
身患重疾,又名懒癌。要我另辟蹊径折腾,我当然是一万个不愿意滴,
如果要在多个 Flutter 版本间切换,我的做法一般是这样的:直接下载,然后在 Android Studio 中手动切换,如:
偶尔切切,其实也还好,毕竟当前项目 Flutter 版本变化不大,需求不多。
今天编译https://github.com/AppFlowy-IO/AppFlowy 项目,刚好 VSCode 遇到 报错:
然后懒癌又发作,懒得切 Android Studio 了,想在 VSCode 上切换 flutter 版本。
搜了下,发现了这货‣。兴致一来,打算试试。
FVM 是个啥东西官方简介:Flutter Version Management: A simple CLI to manage Flutter SDK ...
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 可以放在代码 ...