(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 七层模型 是国际标准化组织提出一个网络分层模型,其大体结构以及每一层提供的功能如下图所示: 每一层都专注做一件事情,并且每一层都需要使用下一层提供的功能比如传输层需要使用网络层提供的路由和寻址功能࿰…...
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个以冒号分隔的字段组成:登录名,加密口令,数字用…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
