颠覆传统编程,用ChatGPT十倍提升生产力
我们即将见证一个新的时代!这是最好的时代,也是最坏的时代!
需求背景
背景:
平时会编写博客,并且会把这个博客上传到github上,然后自己买一个域名挂到github上。
我平时编写的博客会有一些图片来辅助说明的,写完之后如果我把图片和文字全部都上传到博客网站,后期图片很多时就会导致网站加载特别慢
所以想把图片存储在一个公共的对象存储平台(腾讯云的cos服务),这样只要上传一个公共访问链接即可,极大的减少存储空间。
需求:
每次写完博客都要手动上传图片,然后把得到的链接在复制到本地的markdown文件中,如果一篇文章的图片特别多,这简直就是灾难!所以我想
给一个文件路径,自动把markdown文件中本地的图片上传到腾讯云的cos平台,并获取公共链接
把本地的文章的链接自动替换为公共链接
调研和设计
腾讯云cos服务是提供这样的接口的,但是接口需要鉴权,所以我把上诉的需求拆解为三部分
- 生成鉴权sign_key
- 调用腾讯云的接口上传图片,并获取链接
- 输入markdown文件,找到本地图片链接,上传并替换为公共链接
错误示范
我阅读腾讯云的cos文档,需要提供签名,一共需要八个步骤才能生成
我把这八个过程每一个过程都复制给chatgpt,让他帮我写
总结
后面太多我就不演示了,我直接说总结:
- 在这个过程中给我的代码基本都是可以运行的,我只需要微调一下就可以用,报错直接扔给他也基本都可以解决
- 但是整个过程还是需要我理解每一步,并且把这八个步骤进行汇总和调整
- 比Google搜索要好用一点,但是还没有那么好用,总感觉差点意思
正确示范
生成上面的签名之后,我就让他去写上传接口
仔细阅读一下上面的第二张图片,我要求【把其中的url的uri替换为文件名】,然后它给我代码并解释这是做什么,它说这是上传到【腾讯云的cos服务】,要知道我在这之前是完全没有提到过【腾讯云】、【cos服务】等字眼的,也就是它只依赖我提供的host【coder-xieshijie-img-1253784930.cos.ap-beijing.myqcloud.com】这个域名,就判断出我这是腾讯云的cos服务,这就有点厉害了,更厉害的是,当然要求他写一个测试用例:
它直接把我之前费力八个步骤生成的签名直接生成了!这太离谱了!
- 我以为:chatgpt不知道腾讯云cos签名的生成过程,然后我阅读文档,把八个步骤重组并依次喂给chatgpt,让他帮我写
- 实际上:chatgpt不仅知道腾讯云cos,在我要求他上传时,就自动把官方推荐的生成签名的方式给我生成了!
这意味着以后大部分网络开源的内容,你甚至不用阅读啃文档,你只要知道一个概念,剩下的就交给他就可以!
后面的上传和替换markdown的内容我就不截图,后面对于chatgpt就非常简单了,最后附上完整的代码(95%是chatgpt写的)
# -*- coding=utf-8
import hmac
import hashlib
import os
import re
import requests
# 定义 SecretKey 和 KeyTime
# 替换为自己的key和id
secret_key = "xieshijie_key"
key_time = "1680947045;2980950645"
secret_id = "xieshijie_id"
http_method = 'put'
def generate_url_param_list():return ""
def generate_header_list():return ""
def generate_sign_key_val(uri_pathname):# 生成 SignKey
sign_key = hmac.new(
secret_key.encode(),
key_time.encode(),
hashlib.sha1
).hexdigest()
# 生成 HttpString
http_string = f"{http_method.lower()}\n{uri_pathname}\n"
http_string += "\n"
http_string += "\n"
# 生成 StringToSign
string_to_sign = f"sha1\n{key_time}\n{hashlib.sha1(http_string.encode()).hexdigest()}\n"
# 生成 Signature
signature = hmac.new(
sign_key.encode(),
string_to_sign.encode(),
hashlib.sha1
).hexdigest()
# 生成签名
sign_key_val = f"q-sign-algorithm=sha1" \
f"&q-ak={secret_id}" \
f"&q-sign-time={key_time}" \
f"&q-key-time={key_time}" \
f"&q-header-list={generate_header_list()}" \
f"&q-url-param-list={generate_url_param_list()}" \
f"&q-signature={signature}"
return sign_key_val
def generate_file_name(file_path):# 获取文件名return file_path.split('/')[-1]
def put_request(file_path, sign_key):# 设置请求头
headers = {
'host': 'coder-xieshijie-img-1253784930.cos.ap-beijing.myqcloud.com',
'Authorization': sign_key
}
# 设置请求体with open(file_path, 'rb') as f:
data = f.read()
uri = generate_file_name(file_path)
# 发送 PUT 请求
url = f'https://coder-xieshijie-img-1253784930.cos.ap-beijing.myqcloud.com/{uri}'
response = requests.put(url, headers=headers, data=data)
# 判断响应状态码并返回结果if response.status_code == 200:
print('本地图片上传成功')
return url
else:
print('本地图片上传失败')
return 'fail'
def replace_local_image_links(file_path):"""
读取Markdown文件,提取其中的本地图片链接并替换为基于图片名称计算的新链接。
Args:
file_path (str): Markdown文件路径。
"""# 判断文件是否是Markdown格式if not file_path.endswith('.md'):
print('该文件不是Markdown格式。')
return
# 读取Markdown文件内容with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# 匹配所有本地图片链接 匹配形式为:![...](...)
regex = r"!\[\S+\]\((\S+)\)"
matches = re.findall(regex, content)
# 替换本地图片链接为新链接for match in matches:# 判断链接是否是本地路径if not match.startswith('http'):# 获取图片名称和路径if os.path.isabs(match):
image_name = os.path.basename(match)
image_path = match
else:
image_name = os.path.basename(match)
image_path = os.path.abspath(os.path.join(os.path.dirname(file_path), match))
sign_key = generate_sign_key_val('/' + image_name)
# 上传图片到COS并计算新链接
new_link = put_request(image_path, sign_key)
# 替换Markdown文件中的链接
content = content.replace(match, new_link)
# 将替换后的Markdown内容写回文件with open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
print('本地图片链接替换完成。')
if __name__ == '__main__':
# 测试替换
replace_local_image_links("/Users/xieshijie/Desktop/test.md")
升级plus
整个过程让我对ChatGPT的潜力有了更深的认识。起初,我花费了半天的时间,主要用于阅读腾讯云COS服务的文档以及分步骤生成签名的过程。然而,正确利用ChatGPT实际上可以将这个过程缩短到一个小时,甚至更少。
ChatGPT不仅能高效地生成代码,还能在一些复杂的任务中表现出强大的理解和推理能力。这次体验让我更加坚定地认为,ChatGPT正在以一种前所未有的方式颠覆传统的编程和开发流程,真正实现了十倍的生产力提升。
于是,我果断充了一个GPT-4
更多惊喜
我们的公众号还将定期分享:
最新互联网资讯:让你时刻掌握行业动态。
AI前沿新闻:紧跟技术潮流,不断提升自我。
技术分享与职业发展:助你在职业生涯中走得更远、更稳。
程序员生活趣事:让你在忙碌的工作之余找到共鸣与乐趣。
关注回复【1024】惊喜等你来拿!
敬请关注【程序员世杰】
颠覆传统编程,用ChatGPT十倍提升生产力的更多相关文章
- 百万级高并发mongodb集群性能数十倍提升优化实践
背景 线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性.该集群采 ...
- HashMap高阶用法,十倍提升开发效率
HashMap在工作中使用非常频繁,其实在JDK1.8的时候新增一些更高阶的用法,熟练使用这些方法可以大大提升开发效率,写出更简洁优美的代码. 1. get方法指定返回默认值(getOrDefault ...
- 十倍效能提升——Web 基础研发体系的建立
1 导读 web 基础研发体系指的是, web 研发中一线工程师所直接操作的技术.工具,以及所属组织架构的总和.在过去提升企业研发效能的讨论中,围绕的主题基本都是——”通过云计算.云存储等方式将底层核 ...
- 如何将 iOS 工程打包速度提升十倍以上
如何将 iOS 工程打包速度提升十倍以上 过慢的编译速度有非常明显的副作用.一方面,程序员在等待打包的过程中可能会分心,比如刷刷朋友圈,看条新闻等等.这种认知上下文的切换会带来很多隐形的时间浪费. ...
- 一种Flash页游前端3D转2D显示技术——PV2D, 颠覆传统吧!
stage3D很强大,但是客户端硬件加速支持有限. 出来的图形锯齿严重,看上去和果冻一样. Stage3d不兼容2d模式. 总的来说,3D很美好,现实很残酷.但是3D有无可比拟的优势:那就是节省90% ...
- IPython,让Python显得友好十倍的外套——windows XP/Win7安装详解
前言 学习python,官方版本其实足够了.但是如果追求更好的开发体验,耐得住不厌其烦地折腾.那么我可以负责任的告诉你:IPython是我认为的唯一显著好于原版python的工具. 整理了 ...
- AIOps 一场颠覆传统运维的盛筵
"颠覆传统运维."是 OneAPM CEO 陈旭经常挂在嘴边的一句话.为什么说 AIOps 将颠覆传统运维?如何才能把人工智能和运维管理相结合并落地? 2018年5月,OneAPM ...
- [No0000D0] 让你效率“猛增十倍”,沉浸工作法到底是什么?
一位编剧在三天内完成两万字的剧本,而在此之前,他曾拖延了足足半年.一名大四学生用一天半写了8000多字,一鼓作气拿下毕业论文. 有人说:“用了这个方法,我的效率猛增十倍.只用短短两小时,就摧枯拉朽地完 ...
- 通过非聚集索引让select count(*) from 的查询速度提高几十倍、甚至千倍
通过非聚集索引,可以显著提升count(*)查询的性能. 有的人可能会说,这个count(*)能用上索引吗,这个count(*)应该是通过表扫描来一个一个的统计,索引有用吗? 不错,一般的查询,如果用 ...
- fasthttp:比net/http快十倍的Go框架(server 篇)
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/574 我们在上一篇文章中讲解了 Go HTTP 标准库的实现原理,这 ...
随机推荐
- dotnet 在国产 UOS 系统利用 dotnet tool 工具做文件传输
我在一台设备上安装了 UOS 系统,但是我如何在我的主开发设备上和 UOS 系统传输文件?通过 dotnet tool 工具可以完成大部分的工作,当然,使用 dotnet tool 不仅做文件传输,还 ...
- UCenter 1.6 数据字典
uc_admins 管理员权限表 字段名 数据类型 默认值 允许非空 自动递增 备注 uid mediumint(8) unsigned NO 是 用户ID username char(15) ...
- 他又来了,.net开源智能家居之小米米家的c#原生sdk【MiHome.Net】1.0.0发布,快来打造你的私人智能家居吧
背景介绍 hi 大家好,我是三合,作为一个非著名懒人,智能家居简直刚需,在上一篇文章他来了他来了,.net开源智能家居之苹果HomeKit的c#原生sdk[Homekit.Net]1.0.0发布,快来 ...
- Mybatis学习三(动态sql语句)
动态sql语句主要为以下语句 1.动态SQL:if 语句2.动态SQL:if+where 语句3.动态SQL:if+set 语句4.动态SQL:choose(when,otherwise) 语句5.动 ...
- 01 go-zero入门--单体服务demo
目录 官方文档: 视频地址: 系统环境: 配置环境: 1. golang安装 2. go module配置 3. goctl安装 4.protoc,protoc-gen-go,protoc-gen-g ...
- element Tree 树形控件
文档地址 https://element.eleme.cn/#/zh-CN/component/tree 代码地址 https://gitee.com/wBekvam/vue-shop-admin/b ...
- Protues的串口工具Virtual Terminal
用Protues来验证ARM的串口发送,有两种办法,一种是用Protues的串口工具VirtualTerminal 第二种是用串口助手(此种方法,需要下载并安装虚拟串口软件,然后用虚拟串口连接虚拟硬件 ...
- Gradle常用功能拾掇
介绍 Gradle 是一个基于groovy动态语言的java项目管理工具,灵活性和速度好于java,他的build脚本完全可以以写groovy代码的方式来实现,所以灵活性很高,当然也就比maven的x ...
- 记一次ThreadLocal中的用户信息混乱问题
前言 记录一次开发中遇到的关于 ThreadLocal 问题,场景是数据库表中的操作人总是无缘无故的被更改,排查了几遍代码才发现是 ThreadLocal 没有及时清理导致的. 一.为什么使用 Thr ...
- dpkg和rpm对比及常用命令
dpkg(Debian Package)和rpm(RPM Package Manager)是两种不同的Linux包管理工具,它们各自在特定的Linux发行版中占据核心地位.两者之间对比如下: 所属发行 ...