添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
CentOS 8.0 安装docker 报错:Problem: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3 Openstack Masakari task流程源码分析 后端云网站主题 NexT -> 3-hexo Openstack运维常见问题记录(4) Openstack Stein 部署遇到的问题 jetbrains windows版全家桶破解 xshell隧道转发的三种类型 任正非5月18日接受日本媒体采访的中文纪要 华为云可能也要被美国釜底抽薪 属于华为的荣耀时刻 sriov计算节点转ovs计算节点脚本 Openstack Placement POWER架构服务器作为计算节点 OpenStack实践SR-IOV计算节点 Openstack运维常见问题记录(3) ceph数据存储的几个概念 Openstack运维常见问题记录(2) Openstack运维常见问题记录(1) Openstack两组容易混淆的概念 自动化测试工具Serverwalker介绍 Openstack中的虚拟机的cpu绑定 华为的发展已越来越不需要运营商 OpenStack Pike dashboard noVNC 不能访问 JetBrains PyCharm 2018.1.1 x64专业版永久激活 vm被systemd删除 虚拟机无法启动 部署实时OpenStack实例 支持windows虚拟机和linux虚拟机分区调度 Openstack Pike本地yum源搭建 脚本安装Openstack Pike Kata Containers Raft算法和Gossip协议 Openstack Vitrage(根因分析) 实时操作系统 云主机的指令集配置 AI大环境下的运营商 cpu-pinning CPU绑定 NUMA 非一致性内存访问 内存虚拟化 resize失败原因调查 挂载云硬盘 Ocata nova evacuate bug gerrit触发jenkins执行脚本自动构建rpm包 gerrit install JIRA安装 compute node ha 主流开源实现 热迁移失败总结 Collectd 和 InfluxDB 的部署和使用 本地存储条件下的热迁移 Doctor framework 将快速疏散功能加入VM HA程序中 新增OpenStack NOVA API用于强制计算节点nova-compute服务down vm挂载卷,镜像,vm实例的共享存储架构 后端云网站全部url http -> https windows虚拟机激活失败问题 ansible简单使用 pci-api support cyborg agent 获取虚机内存 FPGA用户用例提案 云环境中GPU配置 华为和运营商们 访问google Openstack Ocata初体验 去QQ广告 openstack两个region分别用各自glance服务->共用glance服务 Openstack Cyborg 项目介绍 xshell工具在开发中的使用技巧 python,NFV项目开发--vim 网络不通的情况下,不通过dashboard,在未装图形化系统上查看openstack 创建的vm Load Balance(LVS实现方式) VNFD模板参数化 OPNFV Prediction openstack token管理 OPNFV项目生命周期 OPNFV的管理体制和会员制 OPNFV简介(4) - 对所有人开放 OPNFV简介(3) - 和上游关系 OPNFV简介(2) - overview OPNFV简介(1) - 背景

本篇用Github Copilot重写上篇 集成GPT-4的Cursor 的文章里的代码。

在写代码之前,先说下Github Copilot在写文档写文章上的使用体验。

Github Copilot不仅可以用来写代码,也可以用于写文档。实际上篇公众号关于 集成GPT-4的Cursor 的文章里的内容,我就是用Github Copilot辅助完成的。Github Copilot的使用体验非常好,我只需要输入一些关键词,比如“集成GPT-4的Cursor”,然后就会自动给我补全接下来的内容,很多时候正是我需要的内容,只要按下tab键就会自动补全到文章里,这个过程非常快,非常方便。不像ChatGPT,bing AI需要在另外的聊天窗口执行后复制到文章里,这个过程又慢又繁琐,Github Copilot可以将AI无缝接入到编辑的光标下,适合人和AI的无缝融合。

更神奇的是,我文章里用到了大量的图片,Github Copilot也能自动识别图片的信息和图片里的文字,因为在补全相关文字的时候,应该是扫描过插入的图片后,综合图片的信息后给出的文字。

下面开始用Github Copilot写代码:

Github Copilot的代码补全功能和Cursor不太一样的地方是,Cursor会给出完整的代码,而Github Copilot往往只给出一部分代码,或者一个完整的函数,且需要通过tab键决定是否采用Github Copilot的建议,整个过程往往还需要自己去写点代码。但这个过程也非常流畅,非常方便。Github Copilot更体现了Copilot,飞行副驾驶,重在辅助。

和Github Copilot一起完成的代码如下:

# 写一个python程序,要求实现图片转字符画并写入文件,要用到pillow 库的使用,araparse库的使用,以及文件的读写
# 1.导入库
from PIL import Image
import argparse
# 2.定义一个函数,用来处理图片
def convert(image_file):
    # 2.1打开图片
    image = Image.




    
open(image_file)
    # 2.2将图片转换为灰度图
    image = image.convert('L')
    # 2.3定义一个字符串,用来存储字符画
    chars = "@%#*+=-:. "
    # 2.4定义一个字符串,用来存储字符画
    result = ""
    # 2.5遍历图片的每一行
    for i in range(image.height):
        # 2.6遍历图片的每一列
        for j in range(image.width):
            # 2.7获取图片中每个像素点的灰度值
            gray = image.getpixel((j, i))
            # 2.8将灰度值转换为字符
            unit = (256.0 + 1) / len(chars)
            result += chars[int(gray / unit)]
        result += '\n'
    return result
# 3.定义一个主函数,用来处理命令行参数
def main():
    # 3.1创建一个解析器
    parser = argparse.ArgumentParser()
    # 3.2添加参数
    parser.add_argument('file')
    parser.add_argument('-o', '--output')
    parser.add_argument('--width', type=int, default=80)
    parser.add_argument('--height', type=int, default=80)
    # 3.3解析参数
    args = parser.parse_args()
    # 3.4获取参数
    image_file = args.file
    width = args.width
    height = args.height
    output = args.output
    # 3.5调用convert函数,将图片转换为字符画
    result = convert(image_file)
    # 3.6判断是否需要将字符画写入文件
    if output:
        with open(output, 'w') as f:
            f.write(result)
    else:
        with open('output.txt', 'w') as f:
            f.write(result)
# 4.调用主函数
if __name__ == '__main__':
    main()

运行代码:

PS C:\Users\hanwei\Documents\GitHub\backendcloud-3-hexo\themes> python main.py .\golang.png

发现生成的图片太大了,整个屏幕只能显示一小部分,比如上面的耳朵和眼睛。

对比下Cursor生成的代码,应该先将图像的像素压缩下。

# 2.定义一个函数,用来处理图片
def convert(image_file):
    # 2.1打开图片
    image = Image.open(image_file)

加一行改成

# 2.定义一个函数,用来处理图片
def convert(image_file):
    # 2.1打开图片
    image = Image.open(image_file)
    image = image.resize((80, 80), Image.NEAREST)

再运行一次:

比例不对,后加的代码里的参数,用了80,80,原来的横图压缩成了正方形的图,压缩的太廋了,不调整了,意思一下就行。

下面使用Github Copilot Lab。Github Copilot Lab可以让AI解释代码,将代码翻译成其他编程语言,让AI写注释,写文档,让AI增加debug代码,让AI写单元测试,让AI修改程序让程序更健壮。

虽然笔者第一时间加入了等待列表,现在还在github copilot X等待列表,没有体验过X,但是感觉Github Copilot和Github Copilot Lab的结合已经有了github copilot X的宣传的主要功能。

下面,先删除所有注释,让Github Copilot Lab重新写注释:

让AI解释下这段代码:

让AI将这段Python代码翻译成Golang代码:

import argparse
import image
import os
func main() {
    parser := argparse.NewParser("image", "Converts a image to ASCII art")
    parser.String("1", "file", &argparse.Options{Required: true, Help: "Image file"})
    parser.String("o", "output", &argparse.Options{Required: false, Help: "Output file", Default: ""})
    parser.Int("W", "width", &argparse.Options{Required: false, Help: "Width of the output image", Default: 80})
    parser.Int("H", "height", &argparse.Options{Required: false, Help: "Height of the output image", Default: 80})
    err := parser.Parse(os.Args)
    if err != nil {
        fmt.Println(err)
        return
    imageFile := parser.String("file")
    width := parser.Int("width")
    height := parser.Int("height")
    output := parser.String("output")
    result := convert(imageFile, width, height)
    if output != "" {
        err := ioutil.WriteFile(output, []byte(result), 0644)
        if err != nil {
            fmt.Println(err)
            return
    } else {
        err := ioutil.WriteFile("output.txt", []byte(result), 0644)
        if err != nil {
            fmt.Println(err)
            return
func convert(imageFile string, width int, height int) string {
    img, err := image.Open(imageFile)
    if err != nil {
        fmt.Println(err)
        return ""
    img = img.Resize(width, height, image.NearestNeighbor)
    img = img.Convert(image.L)
    chars := "@%#*+=-:. "
    result := ""
    for i := 0; i < img.Height(); i++ {
        for j := 0; j < img.Width(); j++ {
            gray := img.At(j, i)
            unit := (256.0 + 1) / len(chars)
            result += string(chars[int(gray/unit)])
        result += "
    return result
       
转载请注明来源,欢迎指出任何有错误或不够清晰的表达。可以邮件至 backendcloud@gmail.com