当前位置: 首页 > news >正文

(2023)用AIGC写iOS项目单元总结

尝试开发的项目

项目功能

用 ChatGPT 开发了一个视频播放器。需要它编写的功能包括:

☆ 本地文件,在线 URL 播放,暂停
☆ 点击空白区域弹出操作菜单,再点击消失
☆ 手动横竖屏切换
☆ 播放速度调整,限定 0.5, 1.0, 2.0 倍速
☆ 进度条拖动
☆ 其它一些下载,缓冲区管理等功能

最后由 ChatGPT 帮我完成多个类代码的编写,其中最主要的对外接口类是 VideoPlayerView

目标平台和语言

☆ 系统 iOS 环境 Xcode

没别的,选熟悉的来。

另一方面,刚好需要写一个播放器嵌入到开发的产品中,正好拿 ChatGPT 练手。

☆ 语言 Objective C

这么做是想给 ChatGPT 降降难度,也是给我自己降降难度,Swift 的语言版本兼容性是个灾难。如果出现大量因为不兼容导致的编译错误,到时候负责打扫的还是我。

而 OC 这样一门成熟的语言,我相信 AI 能很好胜任。

但是,因为有时候会用到 iOS 的 C SDK,所以 ChatGPT 也需要写一些调用 C API 的代码。

以下就是我通过测试这个项目,实践出来的对 ChatGPT 的看法。

开发中遇到的问题

沟通问题

☆ 需求陈述是一个大问题

和 ChatGPT 描述清楚自己的需求是比较费神的,在部分场合很容易让人产生“干脆自己写了算了”的想法。

例如如下的需求,需要仔细跟 AI 说明白。

  • 播放器不依赖手机的方向感应,它应该是固定竖屏为基准。
  • 播放器可以手动旋转方向,但是这个旋转不是“真旋转”,也就是说,旋转的是视图本身,而手机屏幕的显示方向事实上不变。

假设我是产品经理,我搭档是个程序员,一般来说对于说起来费劲的事,我们会通过给图片,或者现场展示一些实体来交流。

这也是为什么人和人“当面沟通”对于解决复杂问题更高效。

然而面对 ChatGPT 这一点是做不到的。

AI 不懂装懂

☆ ChatGPT 会撒谎

ChatGPT 会撒谎,而且因为它不是人,所以脸不红心不跳,你甚至不知道它在撒谎(可能它自己也不知道)。

例如,有时候我让 ChatGPT 写一段代码出来,它会写出来,大部分时候都能正常工作,但是偶尔会编造根本不存在的 API 。

☆ AI 无法正视错误

如果 AI 的代码里有 bug,我尝试向它指出来,它一般会这么回答。

抱歉,我犯了错误。以下是我的修改方案……

然而,很多时候 AI 给出的修改方案并不能解决问题,但是它会“装得”好像已经解决了一样。

例如,我尝试让 ChatGPT 来写播放器的进度条控件,并且该控件要带一个进度条显示球来展示播放进度,并能方便用户拖拽进度。

为了测试它的能力,我不自己写,尽量反复和它沟通让它完成。然而,它写的进度条确实存在显示上的问题,以下是我和它的沟通简略过程。


我:UIProgressView 的 duration 小于 0.1 时进度条没有显示。
它:为了修复这个 bug,你可以通过设置 minTimeInterval 属性。

progressView.minTimeInterval = 0.1

……此处省略……
我:我:UIProgressView 并没有 minTimeInterval 这个属性。
它:抱歉,我犯了个错误。………此处省略………


以上这类会话我已经见怪不怪,这只是无数次例子中的小小一个,从以上会话可以看出,AI 遇到自己不太理解的问题时,会尝试编造一个解决方案来,而且听起来像模像样。

这对于很多容错率很低,或者出错就酿成大祸的工业级产品来说,很可能会产生灾难。

AI 的知识是死的

AI 知识是死的,而开发遇到的问题是活生生的,脱离了文档知识的。

例如,如果 iOS 某个 SDK 现阶段有 bug,以至于用标准代码不能解决时,那么程序员就需要另辟蹊径,重新开创解法。

而 ChatGPT 只能依赖于已经知道的知识去创造代码(当然了,除非它提前吃了stackoverflow的帖子,这也是为什么stackoverflow在控诉内容隐私的原因),它不但没有能力调试,而且也没有能力去理解更细碎的现实问题(除非你去告诉他)。

当然了,现在还有 AutoGPT 这些更厉害的 AI 出来了,可以自动查资料,调试编译代码,但是我还没尝试过,不发表看法。

AI 代码的安全隐患

ChatGPT 写出来的代码非常规整,但是如果是写 C/C++ 语言的代码,那么就要小心了。

因为它真的会写出很多漏洞来。

例如,ChatGPT 会在某些缓冲区偏移量计算时犯错,导致内存写入时的溢出。

AI 没有感知能力

没有感知能力的 AI,是无法胜任大量任务的,例如对于音视频的播放,人用“耳朵”去听,“眼睛”去看。通过这种方式来察觉播放器是否存在跳帧、卡顿、破音等现象。

而 ChapGPT 无法帮助你,而且即使你发现了问题,将问题告诉它,由于它无法感知问题的细节(因为它不会陪你“看”和“听”)所以设计不出解决方案来。

这也是为什么,这个测试项目虽然最后跑起来了,但是耗费的心力(指的是完全让AI写代码)让我觉得不太值得的缘故。

项目结束后的总结

ChatGPT 是 API 活字典

ChatGPT 对所有公开的技术文档都非常熟悉,可以说是手到拈来。对于 iOS SDK 自然是不在话下。

所以,对于“某个实现用什么系统 API 来完成”,ChatGPT 可以完成的非常漂亮。

如果不让它写代码,而是把它当成 SDK 顾问,然后让它提供示例代码,对开发者来说等于多了一个高级帮工。

模版大师

ChatGPT 太擅长写模板了。所以开发者完全可以在设计一个类的时候,让 AI 帮忙写模板,自己去填细节。这比纯粹让 AI 写全部代码要靠谱的多。

要让 AI 独立解决问题,除非它变成“人”

如果 AI 没有作为人的行动能力,那么它就注定只能是个吃数据,吐结果的终端。

它无法通过声音判断音频数据播放出来的效果,也无法通过眼睛判断画面是否符合预期,更无法主动去外界测试设备,调试每一个设备上产生的问题。

当然了,你大可以说未来 AI 外接了各种设备被赋能之后如何如何厉害。但我仅就目前最成熟的 AI 产品的体验得出结论。

☆ “喜欢撒谎”的AI永远靠不住

ChatGPT 会胡编乱造,这早就不是新闻了,它会在不了解情况的前提下试图整合出一个像模像样的解决方案来。

从职业伦理角度讲,这几乎是不可容忍的。

所以,我认为只要 AI “喜欢撒谎”,那么就要尽量避免让它独立完成任务(何况现在让它独立完成也确实够呛)

AIGC 用的效果好不好,取决于你强不强

AIGC 要求使用者自身有更高维度的水平。

技术人要求能辨别 AIGC 产生的错误。

画师要求能辨别和修复 AIGC 画作中的错误。

更关键的,AIGC 需要提问者提出问题,更优秀的人才能提出更优秀的问题,就这么简单。

请拉黑身边贩卖焦虑的号贩子

不是说 AIGC 不强,也不是说开设 AIGC 课程有问题。

就现在来说,AIGC 真的很好用。

☆ 另外,ChatGPT 独立完成成熟的代码框架,尤其是安全性要求低的小模型能力还是很强的。

主要是想说,现在 “AI 黄牛”太泛滥了。一个个到处贩卖焦虑,大肆鼓吹 AI 未来会让什么什么行业消失。

就算 AI 未来会让这么多行业消失,我相信解决方案也不是去找人买号,或者买什么midjourney课程。这种行为和房地产泡沫时期鼓吹房价的中介没有区别。

未来的变数很多,AI 会发展成什么样谁也没有数,如果它会对行业造成威胁,焦虑也没用,如果它不会造成威胁,焦虑也依然没用。所以停止焦虑,也应该立刻屏蔽贪财短视的焦虑贩卖者。

如果想体验 AIGC,用一些免费的国内镜像即可,然后亲自体验,逐渐领会,大可不必求新求大。

记住上一条结论:“AIGC 用的效果好不好,取决于你强不强”。

更多阅读

ChatGPT 能帮开发者上架做什么

生成式人工智能服务管理办法(征求意见稿)

移动开发者联盟加入指引

相关文章:

(2023)用AIGC写iOS项目单元总结

尝试开发的项目 项目功能 用 ChatGPT 开发了一个视频播放器。需要它编写的功能包括: ☆ 本地文件,在线 URL 播放,暂停 ☆ 点击空白区域弹出操作菜单,再点击消失 ☆ 手动横竖屏切换 ☆ 播放速度调整,限定 0.5, 1.0, …...

k8s扩容node节点会影响上面已存在的pod吗?

理论上不影响 扩容 Kubernetes 集群中的节点不会影响已经运行的 Pod,因为 Pod 是在节点上运行的,而不是在集群中运行的。当您添加新的节点时,Kubernetes 调度器会在新节点上启动新的 Pod,而已经运行的 Pod 会继续在它们当前的节点…...

深度学习 -- pytorch 计算图与动态图机制 autograd与逻辑回归模型

前言 pytorch中的动态图机制是pytorch这门框架的优势所在,阅读本篇博客可以使我们对动态图机制以及静态图机制有更直观的理解,同时在博客的后半部分有关于逻辑回归的知识点,并且使用pytorch中张量以及张量的自动求导进行构建逻辑回归模型。 …...

计算机网络学习03(OSI、TCP/IP网络分层模型详解))

1、OSI 七层模型 OSI 七层模型 是国际标准化组织提出一个网络分层模型,其大体结构以及每一层提供的功能如下图所示: 每一层都专注做一件事情,并且每一层都需要使用下一层提供的功能比如传输层需要使用网络层提供的路由和寻址功能&#xff0…...

ChatGPT是什么?ChatGPT里的G、P、T分别指什么

文章目录 ChatGPT是什么GTP中的 生成式 是什么意思GTP中的 预训练 是什么意思GTP中的 变换模型 是什么意思 什么是Transformer什么是注意力机制 监督学Xi、无监督学Xi、强化学Xi ChatGPT是什么 GPT: Generative Pre-trained Transformer 生成式预训练变换模型 ChatGPT是由Ope…...

Linux服务使用宝塔面板搭建网站,并发布公网访问 - 内网穿透

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 转载自远程内网穿透的文章:Linux使用宝塔面板搭建网站,并内网穿透实现公网访问 前言 宝塔面板作为简单好用的服务器运维管理面板&#…...

TDA4VH j784s4 使用

// sdk https://www.ti.com/tool/PROCESSOR-SDK-J784S4 // Jacinto Processors TDA4AP-Q1/TDA4VP-Q1/TDA4AH-Q1/TDA4VH-Q1 EVM User’s Guide https://www.ti.com/lit/ug/spruj62/spruj62.pdf?ts1682337275236&ref_urlhttps%253A%252F%252Fwww.ti.com%252Fsitesearch%252…...

CSS布局基础(字体,文本,背景)

字体 常见字体设置 body {font-family: font-family: "Microsoft YaHei", Tahoma, Arial, Hiragino Sans GB,sans-serif; }浏览器从前到后匹配,找到可用字体结束,都没匹配上,使用浏览器默认字体 常用字号 不同浏览器默认字号可…...

Redis入门指南:深入了解这款高性能缓存数据库

本文将带您了解Redis的基本概念、数据类型、特性以及如何在实际项目中应用Redis。通过阅读本文,您将更好地理解如何利用Redis优化您的应用程序性能。 1. 什么是Redis?2. Redis的数据类型3. Redis的特性4. 如何使用Redis4.1 安装与启动4.2 基本命令4.3 应…...

# 数据结构和算法面试题系列-随机算法总结

0 概述 随机算法涉及大量概率论知识,有时候难得去仔细看推导过程,当然能够完全了解推导的过程自然是有好处的,如果不了解推导过程,至少记住结论也是必要的。本文总结最常见的一些随机算法的题目,是几年前找工作的时候…...

windows中vscode配置C/C++环境

首先要把MinGW的环境安装完,我一般是下载带有MinGW的codeblocks,这样省去自己安装MinGW。因为安装MinGW还挺麻烦的。 安装完codeblocks,找到其安装目录,把bin文件配置到环境变量去: 将bin添加到环境变量 然后打开vsco…...

shell编程之条件语句

shell编程之条件语句 一、条件测试操作1.test命令2.文件测试3.利用条件判断,创建文件4.整数值比较4.1 常用的测试操作符 5.字符串比较5.1 常用的测试操作符 6.逻辑测试6.1 常用的测试操作符 二、if语句的结构1.单分支结构2.双分支结构3.多分支结构4.if嵌套 三、case…...

【Python每日十题菜鸟版--第二天】

菜鸟实例 🍉前言1.判断奇偶性2.判断闰年3. 获取最大值最小值4. 质数(素数)的判断5.阶乘方法一方法二 6.九九乘法表7.斐波那契数列方法一 :循环计算法(一般方法)方法二: 递归 8.阿姆斯特朗数9. 十…...

拓扑排序模板及例题

概念 一个有向无环图必然存在一个拓扑序列与之对应。 流程: 先将所有入度为0的节点入队将队列中的节点出队,出队序列就是对应拓扑序。对于弹出的节点x,遍历x所有出度y,对y进行入读减一操作检查入度减一之后的节点y,…...

linux查看nginx安装路径

linux查看nginx安装路径 有几种方法可以查看nginx的安装路径: 使用which命令: which nginx这个命令会返回nginx的二进制文件路径,一般也是安装路径。 查看nginx的进程,得到安装路径: ps aux | grep nginx输出结果中有nginx的进程路径,这个也是安装路径。 在nginx的配置文…...

【生态环境保护】绿水青山就是金山银山——生态环保篇

环保是一个持续性的话题,不仅仅是在国内,整个世界都是一个命运共同体从城市垃圾分类,到农村/村镇污水治理,城乡一体化和因地制宜的实施方式,是我们一直在探索的。 从余村到全国,从中国到世界,“…...

配置Docker镜像加速器-Docker命令-Docker 容器的数据卷

Docker架构 docker进程(daemon) 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件…...

ARM开发调试方法

用户选用ARM处理器开发嵌入式系统时,选择合适的开发工具可以加快开发进度,节省开发成本。因此一套含有编辑软件、编译软件、汇编软件、链接软件、调试软件、工程管理及函数库的集成开发环境(IDE)一般来说是必不可少的,…...

【Spring篇】IOC/DI注解开发

🍓系列专栏:Spring系列专栏 🍉个人主页:个人主页 目录 一、IOC/DI注解开发 1.注解开发定义bean 2.纯注解开发模式 1.思路分析 2.实现步骤 3.注解开发bean作用范围与生命周期管理 1.环境准备 2.Bean的作用范围 3.Bean的生命周期 4.注解开发依赖…...

1 Unix基础知识

1.1 登录 1.1 登录名 登录Unix系统时,要先输入登录名,然后再输入口令。系统再其口令文件(/etc/password文件)查看登录名。口令文件中的登录项由7个以冒号分隔的字段组成:登录名,加密口令,数字用…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...