Resumo deste problema
- Tópico desta edição: Principais mecanismos de busca começam a acessar funções semelhantes ao ChatGPT
- Aprenda esta semana: Funções anônimas e fechamentos em Python
- Conteúdo recomendado: detecção de jailbreak do iOS, obtenção do status da memória virtual, uso do KeyChain para persistência, etc.
- Toque no peixe: primeiros usuários das funções de difusão estável; pensamentos sobre planejamento técnico; revisão de documentos dos principais fabricantes
Tópicos desta edição
Edição e edição: zhangferry
O vento do ChatGPT está de volta
Recentemente, o ChatGPT tornou-se popular novamente. Não apenas os mecanismos de pesquisa introduziram recursos semelhantes ao ChatGPT, mas até mesmo os preços das ações de várias empresas relacionadas ao ChatGPT aumentaram. Com o fluxo contínuo de novos usuários, o site oficial interrompeu o login do usuário várias vezes.
É natural que os motores de busca se concentrem no ChatGPT.Desde o início do desenvolvimento do ChatGPT, havia uma discussão sobre se ele poderia substituir o Google, porque a maioria de seus cenários de uso tem uma alta sobreposição com a pesquisa. Se ele pode substituir o Google ainda não foi verificado, mas o impacto no StackOverflow foi muito óbvio.De acordo com relatórios, o número de visitas ao StackOverflow caiu 32 milhões em um mês. Isso levou a maioria dos produtos a considerar o impacto do ChatGPT e como fazer seus próprios produtos aproveitarem recursos semelhantes.
1. O Google anunciou o Bard, um concorrente do ChatGPT , um serviço de diálogo inteligente baseado no treinamento do modelo LaMDA. O serviço está em fase final de testes e estará mais disponível nas próximas semanas.
2. A capacidade do "novo Bing" da Microsoft de integrar o ChatGPT já pode ser testada, mas não foi totalmente lançada. Visite: www.bing.com/new, faça login e você poderá... novo Bing.
OpenAI 对外开放的 ChatGPT 是基于 GPT 3.5 的,这个能力已经非常惊艳,Bing 则是使用训练量更大的 GPT-4 模型。根据训练模型评估,GPT 3.5 就已经超过了 Google 的 LaMDA,所以就回答准确性 new Bing 应该稳稳强于Bard 的。微软能否抢占一些搜索引擎的份额就看这次发挥了。
3、百度也宣称推出类 ChatGPT 服务,即将上线聊天机器人「文心一言」,3 月完成内测。未说明使用的技术,因为百度在人工智能方面布局还比较多,应该是使用自己的训练模型,具体效果如何要等上线之后来看了。
本周学习
整理编辑:zhangferry
Python 中的匿名函数与闭包
Python 中正常的函数是这样的:
# 函数名是 add
def add(x, y):
return x + y
复制代码
匿名函数是没有函数名的函数,但可以做一些函数做的事情,对应就指 Lambda 表达式。
func = lambda x, y: x + y
print(func(1, 2)) # 3
复制代码
关于闭包可以先看一个计算平均数的例子:
def make_averager():
# 以下整体属于闭包
series = [] # 自由变量
def averager(new_value):
series.append(new_value)
total = sum(series)
return total / len(series)
return averager
avg = make_averager() # 可调用对象
print(avg(10)) # 10.0
print(avg(11)) # 10.5
print(avg(12)) # 11.0
复制代码
make_averager()
创建了一个 avg
,它表示内部函数averager
。正常来说一个函数调用完之后就返回了,本地作用域数据也就释放了,为什么它还可以存储数据呢?数据是存在哪里了呢?
关键点就在于那个自由变量 series
。Python 里的函数有几个内部属性,avg.__code__
表示编译后的定义体:
# 局部变量
avg.__code__.co_varnames
('new_value', 'total')
# 自由变量
avg.__code__.co_freevars
('series',)
复制代码
再看闭包的内容avg.__closure__
:
我们传入的值都存放到了闭包里。再说回闭包,闭包也是一种函数,它会保留定义函数时存在的自由变量的绑定,这样调用函数时,虽然定义作用域不可用了,但是仍能使用那些绑定。自由变量的生命周期是跟着闭包走的。
再稍微改下代码:
def make_averager():
count = 0
total = 0
def averager(new_value):
count+= 1
total+= new_value
return total / count
return averager
复制代码
这个代码在 PyCharm 里会直接报编译错误,用命令行执行报 UnboundLocalError: local variable 'count' referenced before assignment
,提示变量未定义,但实际问题是这里变量类型有冲突。默认闭包内部函数外的变量为自由变量,但内部函数里包含赋值语句,这样count 和 total 就应该是局部变量了,两者冲突引发问题。
修改方式是引入 nolocal
字段,告诉编译器它不是局部变量,而是自由变量,就可以正常赋值了。
def make_averager():
count = 0
total = 0
def averager(new_value):
nonlocal count, total
count+= 1
total+= new_value
return total / count
return averager
复制代码
内容推荐
本期将推荐近期的一些优秀博文,涵盖 iOS 越狱检测、获取虚拟内存状态、使用 KeyChain 进行持久化 以及 SwiftGG 但新项目等方面的内容
整理编辑:东坡肘子
1、iOS 数据持久化 —— KeyChain -- 来自:庄周晓梦
@东坡肘子: 为了安全的在本地存储敏感数据,不少开发者都会采用系统提供的 KeyChain 框架。在本文中,作者将为你展示如何创建一个通用的同时适用于 iOS、 MacOS 的 keyChain 辅助类,以提高数据增删改查操作的便利性。
2、2023 年 iOS 越狱检测 -- 来自:Marco Eidinger
@东坡肘子: 在这篇博文中,作者将展示现有的检测越狱的方法并分享代码示例。但更重要的是,通过讨论越狱检测的动机、分享相关实现并提供信息,方便开发者评估越狱检测在 2023 年(或总体上)是否仍是一个好主意。
3、SwiftUI Layout -- 来自:东吴贾诩
@东坡肘子: 本文作者对 SwiftUI 4 中提供的 Layout 协议做了比较详尽的说明。即使你目前仍使用老版本的 SwiftUI ,通过本文可以了解更多有关 SwiftUI 布局的内部逻辑。
4、好久不见,SwiftGG -- 来自:SwiftGG
@东坡肘子: SwiftGG 是国内知名的苹果生态开发社区,尽管它的公众号处于歇业状态已经很久了,但 SwiftGG 翻译组在这几年并没有处于停滞状态。在本文中,SwiftGG 对近两年的工作进行了总结,并介绍了接下来一些新的计划和打算。同时,也回答了一些网友提出的问题。
5、iOS APP虚拟内存用量初探 -- 来自:呦呦君
@东坡肘子: 在作者当前的项目中有用于 APP 物理内存、系统物理内存等内存状态的获取 API,但是一直缺少获取虚拟内存的 API。由于之前业务上出现过因为虚拟内存耗尽所导致的 Crash,因此本文将基于以上的背景对虚拟内存进行一些调研与探讨。
摸一下鱼
整理编辑:zhangferry
1、diffusionbee-stable:Stable Diffusion 是一个开源的人工智能模型,它可以根据文字描述生成一张图像。现在已经有不少图像类项目基于这个模型进行产品设计。如果你想本地跑这个模型的话,还需要租用 GPU,配置也比较麻烦。因为 PyTorch 对苹果的 ARM 芯片进行了完善的支持,已经完全可以用手头的 M1/M2 设备去运行 Stable Diffusion 了。Github 有一个开源项目 diffusionbee,把整个配置流程封装到了一个 Mac Applicaiton 上,我们可以更快速的体验这项功能。项目依赖模型将近 8 个 G,下载体验需要准备好足够的磁盘空间。
2、技术三板斧:关于技术规划、管理、架构的思考:最近关于技术规划写了不少,参考了团队内部其他人的技术规划文档,也查了一些技术规划相关的文章,对如何做技术规划有这些总结。
第一步:问题分析。如果是从零开始的项目,分析的是痛点,如果是已有项目分析的是现状。这里要结合数据指标,客户反馈,历史事件,并对未来有一定畅想。
第二步:目标制定。目标选择要结合上一步的问题分析,用于解决实际痛点。目标制定要具体明确可量化,对每个目标进行拆解,确定实现路径。
第三步:以终为始。以最终结果溯源开始,明确时间节点,设置可验收的 Milestone。项目结果从业务、平台、效能视角等视角审视结果。
3、大厂项目复盘:UED 方向的各大厂项目复盘文档汇总。
关于我们
iOS Fishing Weekly, principalmente compartilhando experiências e lições encontradas no processo de desenvolvimento, blogs de alta qualidade, materiais de aprendizado de alta qualidade, ferramentas práticas de desenvolvimento, etc. O depósito semanal está aqui: github.com/zhangferry/… , se você tiver boas recomendações de conteúdo, pode enviá-las por meio de edição. Além disso, você também pode se inscrever para se tornar nosso editor residente e manter este jornal semanal juntos. Você também pode prestar atenção à conta oficial: iOS Growth Road, clique no fundo para entrar na comunicação do grupo, entre em contato conosco e obtenha mais conteúdo.
Recomendação anterior
iOS Moyu Weekly #82 | Software social descentralizado Damus
iOS Fishing Weekly #81 | Apple lança o Apple Business Connect
iOS Moyu Weekly #80 | Gerenciar modelos de dados no acelerador de desenvolvimento SwiftUI
iOS Moyu Weekly Report #79 | Freeform está online e D2 começa esta semana