作者: AI最严厉的父亲

  • 从进程池到线程池:实现高效图片下载

    在数字时代,我们每天都能够轻松访问到各种各样的图片,不论是美景、艺术品还是有趣的表情包。然而,有时候我们需要大量的图片数据,例如用于机器学习的训练集或者简单的个人收藏。在这种情况下,如何高效地获取和保存这些图片就成了一个挑战。今天,我将向大家介绍一种使用进程池和线程池相结合的方法,以实现高效的图片下载。

    准备工作

    首先,让我们明确一下需要的准备工作。我们将使用Python来完成这个任务,所以确保你已经安装了Python环境。此外,我们还需要以下库:

    • requests:用于发送HTTP请求和获取网页内容。
    • lxml:用于解析HTML文档。
    • multiprocessing:用于创建进程池和进程共享变量。
    • concurrent.futures:用于创建线程池。

    确保你已经安装了这些库,如果没有,可以使用pip来安装。

    获取图片地址

    首先,我们需要获取要下载的图片的地址。在这个例子中,我们将从一个网站上抓取动漫壁纸的图片地址。我们使用了requests库来发送GET请求,然后使用lxml来解析HTML文档,提取出图片的地址。这些地址将被放入一个进程队列中,以便后续的下载。

    # 获取图片地址
    def get_url(url, que):
        resp = requests.get(url, headers=headers)
        resp.encoding = resp.apparent_encoding
        date = resp.text
        tree = etree.HTML(date)
        list_url = tree.xpath('//ul[@class="clearfix"]/li/a')
        for i in list_url:
            url_img = i.xpath('./img/@src')
            que.put('https://pic.netbian.com' + str(*url_img))  # put写入进程变量队列中
        resp.close()

    下载并保存图片

    接下来,我们需要编写函数来下载并保存图片。我们使用requests库发送GET请求,然后将图片保存到本地。为了避免文件名冲突,我们可以使用一个共享的数值型变量来为每张图片分配一个唯一的文件名。这个变量会在多个进程之间共享,确保每张图片的文件名都不同。

    # 下载并保存图片
    def download_ove(url, name):
        try:
            resp = requests.get(url, headers=headers)
            path_img = os.path.join(path, f'{name.value}.jpg')
            with open(path_img, 'wb') as f:
                f.write(resp.content)
            print(f'保存成功{name.value}.jpg')
            name.value += 1  # 数值型进程变量自增
        except Exception as ex:
            print('下载出错', ex)

    下载图片的主函数

    现在,让我们来编写下载图片的主函数。我们使用了线程池来并发下载图片,这样可以提高下载速度。通过创建一个ThreadPoolExecutor对象,我们可以指定同时运行的线程数量,这里设置为20。然后,我们从进程队列中获取图片地址,并将下载任务提交给线程池处理。

    # 获取进程队列中的url并启用线程池下载保存图片
    def download_img(que, name):
        # 创建线程池,指定20个线程处理数据
        with ThreadPoolExecutor(20) as t:
            while True:
                try:
                    s = que.get(timeout=3)  # 获取进程队列中的数据,等待3秒若是还没获取到数据抛出异常
                    t.submit(download_ove, s, name)  # 添加进线程池
                except Exception as ec:
                    print(ec)
                    break

    异常处理

    在我们的代码中,我们还加入了异常处理机制。如果下载出现错误,我们会捕获异常并打印出错信息。这有助于我们及时发现问题并进行处理。

    # 接收进程池与线程池异常的回调函数
    def err_call_back(err):
        print(f'出错啦~ error:{str(err)}')

    执行主程序

    最后,我们在主程序中执行上述函数。我们首先创建了一个进程共享的队列变量和一个数值型的共享变量,用于存储图片地址和文件名计数。然后,我们根据需要获取多个页面的图片地址,将下载任务提交给进程池,并等待任务完成。这样,我们就能够高效地下载大量图片了。

    if __name__ == '__main__':
        if not os.path.exists(path):
            os.mkdir(path)
        que = multiprocessing.Manager().Queue()  # 创建一个进程之间共享的队列变量
        name = multiprocessing.Manager().Value('i', 0)  # 创建一个进程之间共享的数值型变量,'i'表示整型数字,0表示从0开始
        for i in range(1, 4):
            if i != 1:
                url = f'https://pic.netbian.com/4kdongman/index_{i}.html'
            else:
                url = 'https://pic.netbian.com/4kdongman/'
            get_url(url, que)
            #  创建进程池,并将函数添加到进程池内,指定最多开辟1个进程处理数据(开多了怕把网址玩崩)
            with multiprocessing.Pool(1) as pool:
                pool.apply(download_img, args=(que, name))  # 将函数以同步的方式添加进进程池
        pool.close()  # 结束进程池,不在往内添加数据
        pool.join()  # 等待进程池运行结束
        print('结束')

    结束语

    通过使用进程池和线程池的组合,我们能够高效地下载大量图片,提高了任务的并发性和效率。这种方法对于需要大规模获取图片数据的任务非常有用,例如构建图像数据集或爬取网站上的图片资源。

    希望这个教程对你有所帮助,如果你有任何问题或建议,欢迎在评论中留言。祝愿你在图片下载任务中取得成功!

  • 争议背后的AI伦理问题:GitHub Copilot与开源许可证

    在数字时代,人工智能(AI)的迅猛发展已经深刻地影响了软件开发和编程领域。GitHub Copilot作为一款由微软开发的机器学习驱动的代码助手,为程序员提供了强大的功能,然而,它也引发了一系列关于AI伦理的争议。在本文中,我们将深入探讨GitHub Copilot的争议,特别是与开源软件许可证相关的问题。

    GitHub Copilot:AI革命的一部分

    GitHub Copilot的出现被许多人视为编程领域的一项巨大突破。它是一款与Visual Studio等集成开发环境(IDE)合作的插件,通过为开发者提供代码建议来提高编程效率。Copilot的背后动力源是名为Codex的AI系统,它可以分析代码上下文,生成代码片段,并提供实时建议。

    然而,正是这个看似神奇的工具引发了一场关于AI伦理的争议。其中一个争议焦点是,Copilot从何处学习并生成代码。

    开源代码与许可证问题

    GitHub Copilot的AI引擎Codex声称是通过在数以千万计的公开代码仓库中进行训练而得来的。这包括了GitHub上的开源项目,其中包含了众多开发者自愿贡献的代码。然而,这也引发了一个重要的问题:这些代码是否受到适当的许可证保护,以及Copilot是否遵守了这些许可证?

    开源软件通常会根据特定的许可证发布,这些许可证规定了在何种情况下可以使用、修改和分发代码。常见的开源许可证包括MIT许可证、GNU通用公共许可证(GPL)和Apache许可证等。这些许可证通常要求在使用或分发代码时保留原始许可证和版权信息。

    然而,GitHub Copilot不仅提供了代码建议,还能够生成逐字逐句的代码部分。这就引发了一个关键问题:当Copilot生成代码时,它是否遵循了原始代码的许可证要求?

    争议的核心问题

    在GitHub Copilot的争议中,有几个核心问题值得深入探讨:

    1. AI学习的道德责任

    Copilot的AI引擎Codex是通过在大量开源代码仓库中进行训练而得来的。这些代码很可能包含多种不同的许可证,包括MIT、GPL和Apache等。由于AI并不具备道德判断能力,它可能无意中生成侵犯许可证规定的代码。这引发了一个重要问题:AI是否应该对许可证规定负有道德责任?

    2. 许可证的遵守

    开发者使用GitHub Copilot生成的代码时,通常会忽略原始代码的许可证信息,因为他们可能认为这是AI生成的内容。然而,这是否合法?如果AI生成的代码侵犯了原始代码的许可证规定,那么开发者可能会面临法律责任。因此,确保Copilot生成的代码符合许可证要求至关重要。

    3. 微软的立场

    微软作为GitHub的母公司,对GitHub Copilot的争议问题采取了什么样的立场?微软是否认为Copilot生成的代码符合合理使用原则,还是认为开发者应该对生成的代码负有更多的法律责任?

    4. 开源社区的看法

    开源社区一直是开发者和创新的摇篮,许多项目依赖于社区的共享和合作。GitHub Copilot的出现是否会改变开源社区的动态?会不会有更多的开发者对开源项目采取保守态度,担心其代码会被AI滥用?

    结论

    GitHub Copilot无疑是一项令人印象深刻的技术创新,它为开发者提供了强大的工具,提高了编程效率。然而,与许多新技术一样,它也引发了一系列复杂的伦理问题,特别是与开源软件许可证相关的问题。

    解决这些争议并不容易,需要深入的讨论和合作。开发者、法律专家、AI研究者以及企业需要共同努力,找到平衡点,确保AI技术的发展与伦理原则的遵守相互协调。

    在未来,我们可以期待看到更多关于AI伦理的讨论,以及更多关于GitHub Copilot如何与开源许可证保持一致的解决方案的出现。

  • 为什么计算机使用8位字节?探索字节大小的历史和原因

    在当今数字世界中,我们习以为常地使用计算机,但很少有人深究它们的工作原理。在计算机的构建中,一个重要的概念是字节(byte),它是信息存储的基本单位。然而,为什么计算机选择了8位字节,而不是其他尺寸,如4位或16位呢?这个问题引发了人们的好奇,我们将在本文中探讨这个问题。

    字节与字的区别

    在深入讨论8位字节的原因之前,我们需要明确字节与字的区别。字节是计算机中可以寻址的最小单位,通常由8个二进制位组成。字(word)则是字节的倍数,通常为字节大小的两倍或四倍,具体取决于计算机体系结构。例如,在x86架构上,一个字通常是16位的,但在某些情况下也可以表示为64位。

    原因1:历史决策

    首先,我们需要了解8位字节的历史根源。IBM System/360于1964年引入了8位字节,这是一个重要的历史里程碑。Fred Brooks,负责管理该项目的人,提到了一些决策原因。他表示8位字节在商业计算中更为适用,因为每个字节可以针对另一个字节进行调整,以实现文本处理。这个决策被认为是他的职业生涯中最重要的技术决策之一。

    原因2:处理文本

    使用8位字节处理文本是有道理的。英语字母、符号和数字总共有128个字符,而8位字节可以表示256个不同的值。这为处理文本提供了足够的空间,并允许每个字符都有一个唯一的二进制表示。这对于处理多种语言和字符集非常重要。

    原因3:与二进制编码的十进制一起工作

    在20世纪60年代,二进制编码的十进制(BCD)变得流行,它将每个十进制数字编码为4位。这种编码方式的字节大小必须是4位的倍数,因此8位字节非常适合与BCD一起工作。BCD的流行原因可能是早期计算机没有像今天这样的显示器,因此8位字节的设计使得从二进制表示中读取十进制数更容易。

    原因4:2的幂次方

    8位字节的字节大小是2的幂次方,这在计算机设计中具有一定的重要性。这使得设计时钟分频器变得更容易,允许分频器通过减半操作来测量位的数量。此外,2的幂次方的字节大小使得电路逻辑更容易处理,同时也便于位级索引和地址寻址。

    原因5:兼容性

    早期的计算机公司都是美国的,而美国英语是最广泛使用的语言之一。8位字节在处理英语文本时表现出色,因此当8位计算机获得成功时,保持相同的设计以实现兼容性成为了一个合理的选择。此外,一些重要的计算机如英特尔8080和8086都采用了8位字节的设计。

    结论

    为什么计算机使用8位字节?这个问题的答案涉及历史、文本处理、二进制编码的十进制、2的幂次方和兼容性等多个方面。尽管历史原因在其中起到了关键作用,但8位字节的设计在多个方面都表现出色,使得它成为计算机领域的标准之一。

    通过深入了解8位字节的背后原因,我们可以更好地理解计算机体系结构的演变,并欣赏到这个小小的存储单位为计算机世界的发展所做出的重要贡献。

  • 如何理解英伟达的CUDA技术:计算领域的革命者

    在密尔沃基工学院的演讲中,英伟达的CEO黄仁勋分享了一段令人振奋的话语,他讲述了英伟达的发展史以及一项技术的贡献,这项技术便是CUDA。这个技术已经改变了计算领域的格局,让GPU在大数据计算中崭露头角。那么,CUDA究竟有何魔力,为什么它如此重要呢?

    如何理解英伟达的CUDA技术:计算领域的革命者
    如何理解英伟达的CUDA技术:计算领域的革命者

    CUDA:并行计算的魔法

    CPU和GPU都是计算机处理器,它们能够执行各种计算任务,但它们在计算方式上存在差异。CPU擅长线性计算,就像一位大学教授,能够独立解决复杂问题,但步骤逐一进行。而GPU则更像一群小学生,单核计算能力不如CPU,但核心数量众多,能够同时进行计算。

    CUDA技术就是那个调动小学生群体的指挥棒。通过CUDA,研究员和编程人员可以使用编程语言与硬件设备进行交互,将复杂的数学问题分解为多个简单的子问题,并将这些子问题分发给GPU的多个计算核心。正如黄仁勋所言,CUDA成为了科学向前发展的最佳解法,其强大的计算能力使其成为超级计算机的首选。

    CUDA的广泛应用

    自从英伟达于2006年推出CUDA以来,它已经渗透到几乎所有与计算有关的领域。航空航天、生物科学研究、机械和流体模拟、能源探索等各个领域的研究都在CUDA的基础上进行。事实上,80%的计算领域已经被英伟达的CUDA技术所影响。

    而CUDA的生态合作伙伴也在不断壮大。根据英伟达2023财年年报,目前有400万名开发者正在与CUDA合作。在过去的两年半里,这一数字翻了一番,CUDA的下载量已经超过了4000万次。此外,英伟达还推出了CUDA-X AI,这是一组建立在CUDA之上的软件加速库,提供了深度学习、机器学习和高性能计算所需的优化功能,成为了数据科学加速的端到端平台。

    竞争与挑战

    尽管CUDA在计算领域取得了巨大成功,但竞争对手也不甘示弱。AMD推出了生态平台ROCm,同样兼容不少计算框架。OpenAI的Triton被认为是CUDA的有力挑战者。苹果设计的开源构架OpenCL借鉴了CUDA的成功经验,并支持多核CPU、GPU或其他加速器。谷歌通过TPU、TensorFlow和云吸引开发者和客户。

    然而,在实际工作中,这些竞争者面临各种问题。一些开发者表示,虽然理论上支持这些竞争技术,但在实际使用中经常遇到错误和崩溃。

    结语

    CUDA技术的崛起改变了计算领域的格局,使GPU成为了大数据计算的基石。它在科学研究、工程模拟、机器学习等领域发挥着不可替代的作用。尽管竞争者不断涌现,但CUDA的生态系统仍然如日中天,英伟达在这个领域占据着主导地位。

    在未来,我们可以期待CUDA技术继续演化,为计算领域带来更多的创新和进步。

  • 电子游戏发展史:从早期探索到现代娱乐的演变

    想象一下,回到20世纪中叶的那个时代,电子游戏还没有像今天这样普及,计算机技术还在蓬勃发展的初期阶段。屏幕上的小点点、简单的图形,正是电子游戏的萌芽期。本文将带你穿越时光,探索早期电子游戏的历史,了解它们是如何从技术演示和学术研究中崭露头角,成为现代文化中不可或缺的一部分的。

    电子游戏发展史:从早期探索到现代娱乐的演变
    电子游戏发展史:从早期探索到现代娱乐的演变

    早期电子游戏的踪迹

    早期的电子游戏历史可以追溯到1947年,那时诞生了第一款结合屏幕的交互电子类游戏。这个时期的游戏主要是为了技术演示和学术研究而存在的,比如1950年的《大脑伯蒂》和1951年的Nimrod。研究机构开始开发一系列模拟现实世界棋盘游戏的游戏,以探索编程、人机交互、电脑算法等领域。其中包括了1952年的《OXO》(首款结合阴极射线管显示器的游戏程序),以及数款国际象棋和西洋跳棋程序。这些早期游戏奠定了电子游戏领域的基础,尽管它们在当时仅为少数计算机专家所熟知。

    电子游戏的初露锋芒

    随着计算机技术的不断进步,电脑体积变得越来越小,运算速度亦越来越快。到了20世纪50年代末,大学学生和员工都可以使用电脑进行工作。这一时期,一群热衷于编程的程序员开始利用电脑编写与学术无直接关系的程序,其中包括了一款里程碑式的游戏,《太空战争!》,它于1962年推出。这款游戏成为了首款可以在单一机构以外接触到的电子游戏,标志着电子游戏的娱乐时代的开启。

    电子游戏发展史:从早期探索到现代娱乐的演变
    电子游戏发展史:从早期探索到现代娱乐的演变

    电子游戏的蓬勃发展

    随着60年代的到来,越来越多的程序员开始开发数字电脑游戏,它们有时甚至出现在程序目录内,供商品销售。电脑成本逐渐下降,电子游戏的受众扩大至数十个研究机构,同时不同编程语言的出现有利于开发更多种类的游戏。70年代初,伴随着投币式街机游戏《银河游戏》原型机的亮相,以及《电脑太空战》和《乓》等游戏的登场,商业电子游戏产业正式成形。与此同时,1972年家用电子游戏机米罗华奥德赛的推出,为第一世代游戏机的诞生打开了序幕,为家庭娱乐带来了全新的可能性。

    电子游戏的技术定义

    早期的电子游戏是如何定义的呢?从技术上讲,一个产品只有向显示器发送视频信号,才能被称为电子游戏。这个显示器可以是阴极射线管、示波器、液晶显示器等。然而,这个定义并不包括早期的电脑游戏,因为它们通常将结果输出到打印机或电传打字机,而不是显示器上。这个术语的演变反映了技术的发展,从最初的硬件依赖性到更广泛的娱乐概念。

    电子游戏的更广泛定义

    随着时间的推移,电子游戏的定义已经变得更加广泛。现在,电子游戏不再仅仅依赖于硬件,它们包括任何在具有电子逻辑电路的硬件上进行的游戏,具有交互元素,并将玩家行动的结果输出到显示器上。这个更广泛的定义使得电子游戏可以涵盖多种形式,从早期的实验项目到今天的主流娱乐。

    电子游戏的早期探索

    早期的电子游戏起源于20世纪50年代初,它们通常与大学和大公司的研究项目相关。这些早期游戏往往是为了设备宣传或学术研究而存在的,而不是娱乐用途。然而,它们为电子游戏的未来奠定了基础,尤其是那些使用阴极射线管屏幕的设备。

    阴极射线管娱乐设备的诞生

    最早的交互电子类游戏之一是阴极射线管娱乐设备。它是已知最早的电子游戏,于1947年注册专利。该设备包括一个连接到示波器的阴极射线管,以及一组旋钮和开关,玩家需要利用旋钮来调整投射点的运动轨道,尝试击中覆盖在显示器上的塑胶目标。尽管这个设备仅基于模拟电路,没有使用数字计算机或程序,但它被认为是电子游戏的先驱之一。

    电子游戏的不断发展

    随着时间的推移,电子游戏不断发展壮大。从早期的实验项目到今天的全球文化现象,电子游戏已经成为了娱乐的主要形式之一。它们的演变不仅受到技术的推动,还受到玩家社区的贡献和创新。

    电脑游戏的技术诞生

    电脑游戏的故事始于第二次世界大战后,当时世界各国投入巨大的资源来开发计算机技术,以协助战争努力。随着战争的结束,这些庞大的电子机器没有闲下来,而是成为了电脑游戏的诞生地。曼彻斯特大学、剑桥大学、宾夕法尼亚大学、普林斯顿大学等学术机构率先颁布了首个存储程序架构,为电脑重新编程提供了可能性。这一技术进步推动了雷明顿兰德公司、费兰提公司、IBM等机构在20世纪50年代初将电脑商业化,也促使大学、政府组织和大型公司开始采用电脑。正是在这种技术和学术氛围下,电脑游戏开始崭露头角。

    20世纪50年代的电脑游戏

    20世纪50年代的电脑游戏可以分为三类:培训和指导程序,人工智能领域的研究程序,以及旨在娱乐公众的示范程序。然而,这些游戏面临着独特的挑战,因为它们是为特定的硬件开发的,难以在不同系统之间移植。而且,由于当时的硬件资源有限,许多游戏在达到其目的后就被拆除或丢弃,因此它们并没有对整个游戏行业的发展产生直接影响。

    电脑游戏的早期亮点

    尽管电脑游戏的早期历史充满了挑战,但也有一些亮点。据已知,最早公开展示的电脑游戏之一是在1950年诞生的《大脑伯蒂》。这款游戏是井字棋的街机版本,由约瑟夫·凯特为加拿大博览会制作。他设计了一台专用电脑,用于展示自己设计的新型真空管。这台机器吸引了众多参观者,成为博览会的亮点之一。然而,这台电脑在博览会结束后就被拆除,成为了历史的一部分。

    Nimrod电脑和尼姆游戏

    在电脑游戏的发展中,英国的费兰提公司也有一席之地。他们制作了Nimrod电脑,这台电脑专门用于玩尼姆游戏。Nimrod电脑拥有巨大的尺寸,专门为游戏玩家设计,展示了电脑在娱乐方面的潜力。虽然最初的目的是展示电脑的设计和编程能力,但大多数参与者更感兴趣的是玩游戏。这台电脑在不列颠节和柏林工业展上展出后也被拆除,但它为电脑游戏的未来奠定了基础。

    电脑游戏的早期成就

    在电脑游戏的早期历史中,还有一些非视觉游戏的探索。克里斯托弗·斯特雷奇开发了模拟西洋跳棋的程序,成为已知首款为通用电脑创建的电脑游戏。此外,亚瑟·李·塞谬尔在IBM 701上开发了自己的西洋跳棋游戏,具备初步的人工智能能力。这些早期的努力为电脑游戏领域的未来打下了坚实的基础。

    井字棋的诞生

    在电子游戏的早期,计算机的用途主要分为三类:培训和指导程序、人工智能研究、以及娱乐示范程序。由于当时的计算机硬件各不相同,系统之间的移植极为困难,因此这些早期游戏主要是为了展示计算机的功能而制作,并没有影响到后来的游戏产业。

    电子游戏发展史:从早期探索到现代娱乐的演变
    电子游戏发展史:从早期探索到现代娱乐的演变

    然而,已知最早的公开展示电子游戏可以追溯到1950年。这款游戏名为《大脑伯蒂》,是一款井字棋街机游戏,由约瑟夫·凯特为1950年加拿大博览会而制作。为了展示他设计的新型真空管,凯特制作了一台专用电脑,玩家可以在这台机器上与电脑对弈井字棋。这款游戏在博览会上大获成功,吸引了众多参观者。

    然而,这款游戏并没有长久存在,因为当时的电脑是为特定目的而制作的,游戏只是一个短暂的展示项目。不过,《大脑伯蒂》的诞生标志着电子游戏的开端,为后来的发展奠定了基础。

    井字棋到交互视觉游戏

    随着时间的推移,电子游戏逐渐发展壮大。在1952年,亚历山大·S·道格拉斯在延迟存储电子自动计算器上创建了井字棋游戏《OXO》。这台计算机是最早的存储程序电脑之一,具有可读写的内存,占据了整个房间。玩家可以使用拨号盘控制器输入他们的选择,然后电脑会进行回应,双方的走法都会在屏幕上显示出来。尽管这款游戏并没有对公众开放,只有获得剑桥大学特别许可的人才能够亲身体验,但它标志着电子游戏进一步的发展。

    在1950年代末,电子游戏逐渐演变成了交互视觉游戏。1958年,威廉·希金伯泰创建了一款网球模拟游戏《双人网球》。这是一款纯粹为了娱乐而设计的游戏,目的是在公众开放日为参观者提供更有趣的娱乐体验。玩家可以使用控制器控制击球角度,游戏会计算并模拟球的轨迹。这款游戏取得了巨大的成功,让更多人认识了电子游戏的娱乐价值。

    电子游戏发展史:从早期探索到现代娱乐的演变
    电子游戏发展史:从早期探索到现代娱乐的演变

    此外,在1950年代末,各种电脑游戏继续在大学电脑和编程研究的背景下诞生。这些游戏不仅展示了电脑的运算能力,还为当时的计算机科学家和学生提供了娱乐方式。其中一些游戏包括井字棋和老鼠迷宫,它们是由本科生开发的,并在大学的电脑上运行。这些早期的尝试为电子游戏产业的崛起铺平了道路。

    早期大型计算机游戏的诞生

    电子游戏的历史可以追溯到20世纪50年代末和60年代初,当时大型计算机刚刚问世,它们的体积庞大、价格昂贵,只能在大学和研究机构中找到。这些庞大的机器往往被用于科学研究和数据处理,但一些创造性的程序员开始将它们用于娱乐目的。

    《太空战争!》:首款跨机构传播的游戏

    在1961年,麻省理工学院获得了数字设备公司生产的PDP-1小型计算机,这一机器在当时被认为是小型计算机的巅峰之作。PDP-1使用矢量显示系统,其处理速度和性能超越了之前的大型计算机,使其成为创新的平台。

    电子游戏发展史:从早期探索到现代娱乐的演变
    电子游戏发展史:从早期探索到现代娱乐的演变

    在PDP-1上,员工史帝芬·罗素与马丁·格雷茨、韦恩·维塔宁等人合作开发了《太空战争!》,这是一款双人游戏,玩家在随机生成的星空背景下,操控宇宙飞船进行战斗。这款游戏的开发理念包括展示计算机的性能、保持游戏的多样性以及使游戏具有娱乐性。它在PDP-1上取得了巨大成功,并在其他PDP-1电脑上得以散播,成为首款跨机构传播的电子游戏。

    电子游戏的早期探索

    除了《太空战争!》之外,20世纪60年代后半期,高级编程语言(如BASIC)的出现进一步扩大了游戏的传播范围。这些游戏包括了棒球模拟、宾果、篮球模拟、棒球模拟和更多。其中,《星际旅行》因其在Multics操作系统上的开发,成为UNIX操作系统的催化剂,开启了新的计算机时代。

    电子游戏的崛起

    在早期大型计算机游戏的基础上,电子游戏开始迎来真正的崛起。20世纪70年代初,出现了第一批商业电子游戏,标志着游戏行业的诞生。

    第一批商业电子游戏

    1971年,Atari公司发布了第一款商业街机游戏《Pong》,这是一款模拟乒乓球比赛的游戏,引发了电子游戏行业的爆发。随着《Pong》的成功,电子游戏开始进入娱乐场所,成为人们娱乐的一部分。

    家用游戏机的兴起

    20世纪70年代末和80年代初,家用游戏机开始兴起。Atari的2600系列和任天堂的家用游戏机带给家庭娱乐一个全新的维度。这些游戏机推出了许多经典游戏,如《超级马里奥》和《坦克大战》,让更多人能够在家中享受电子游戏的乐趣。

    电子游戏发展史:从早期探索到现代娱乐的演变
    电子游戏发展史:从早期探索到现代娱乐的演变

    电子游戏的普及

    随着个人计算机的普及,电子游戏的传播范围继续扩大。20世纪90年代,电子游戏开始进入个人计算机、游戏机和移动设备,玩家可以在各种平台上畅玩游戏。

    互联网时代的游戏

    随着互联网的发展,多人在线游戏(MMO)开始崭露头角。游戏如《魔兽世界》和《星际争霸》引领了互联网游戏的潮流,让玩家可以在全球范围内互相竞技和合作。

    电子游戏发展史:从早期探索到现代娱乐的演变
    电子游戏发展史:从早期探索到现代娱乐的演变

    移动游戏的崛起

    21世纪初,智能手机的普及催生了移动游戏的热潮。游戏如《愤怒的小鸟》和《糖果粉碎传奇》成为全球范围内的现象级游戏,将电子游戏带入了数以亿计的手机用户的生活中。

    电子游戏发展史:从早期探索到现代娱乐的演变
    电子游戏发展史:从早期探索到现代娱乐的演变

    街机电子游戏的崛起

    街机电子游戏的崛起源于之前由机电游戏机主导的街机游戏行业。1966年,世嘉推出了一款名为《潜望镜》的机电游戏机,它引领了一场由具备"视听"效果的新机电游戏机所推动的"技术复兴"。这一复兴为商业电子游戏的引入奠定了基础。

    而第一款商业街机电子游戏便是在1971年亮相的《电脑太空战》。这款游戏由诺兰·布什内尔和泰德·达布尼共同开发,灵感源自于1962年的游戏《太空战争!》。布什内尔曾在电子游戏厅工作,当他看到《太空战争!》后深信这款游戏的街机版本将会非常受欢迎。于是,他和达布尼着手开发这个游戏,并将它推向市场。

    然而,游戏开发并不是一帆风顺的。最初,他们计划使用诺瓦电脑作为游戏的基础,但很快遇到了技术上的困难。电脑的性能不够强大,无法同时运行多个游戏,而且刷新显示器的速度也无法满足游戏的要求。但他们并没有气馁,而是决定自行制作游戏机柜,并成功地推出了游戏原型。1971年8月,游戏原型在斯坦福大学附近的一家酒吧亮相,并获得了巨大成功。游戏备受欢迎,促使布什内尔与纳廷联合合作生产游戏机柜,正式推向市场,这标志着商业电子游戏的诞生。

    另一款早期街机电子游戏:《银河游戏》

    除了《电脑太空战》,另一款早期投币式街机电子游戏是1971年的《银河游戏》。这款游戏由比尔·皮茨和休·塔克开发,利用具备矢量显示器的PDP-11小型计算机。他们受到1962年的游戏《太空战争!》启发,认为投币版本将会取得成功。然而,游戏的成本很高,无法投入生产,最终未能实现商业化。

    电子游戏发展史:从早期探索到现代娱乐的演变
    电子游戏发展史:从早期探索到现代娱乐的演变

    家用电子游戏机的崛起

    1972年,电子游戏行业迎来了另一个重要事件:首款可以连接至电视机的家用电子游戏机——米罗华奥德赛的发行。这个家用游戏机由工程师拉夫·亨利·贝尔发明,他早在1951年就萌生了在电视机上制作交互游戏的想法,但当时的技术无法实现。经过多年的努力,他终于在1972年将奥德赛推向市场,它成为了首款面向家庭消费者的电子游戏设备。

    奥德赛的成功在一定程度上归功于流行的乒乓球运动,因为游戏中包括了乒乓球游戏。这款游戏机定价合理,销量迅速突破十万台,为家用电子游戏机的兴起打下了基础。

    结语

    20世纪70年代初,电子游戏行业经历了巨大的变革,商业电子游戏开始崭露头角。街机电子游戏和家用电子游戏机的崛起为电子游戏产业的发展开辟了新的道路,成为电子游戏史上的重要里程碑。

    这个时代的重要事件和创新为电子游戏的未来奠定了坚实的基础,也启示我们,不论是技术的进步还是创意的迸发,都能够推动一个行业的蓬勃发展。

  • 搬瓦工服务器测速与选购指南

    在当今数字化时代,互联网已经成为我们日常生活的一部分,而虚拟专用服务器(VPS)则是托管网站、应用程序和数据的理想选择。然而,在选择和购买VPS时,服务器的性能、网络速度和稳定性是至关重要的考虑因素。本文将向你介绍如何在搬瓦工(BandwagonHost)上测速不同机房的服务器,并提供服务器选购建议。

    搬瓦工官网

    首先,让我们从访问搬瓦工的官方网站开始。你可以点击以下链接访问:

    搬瓦工各节点服务器官方测速地址

    现在,让我们来了解如何测速不同机房的搬瓦工服务器。以下是各个机房的官方测速地址和相关信息:

    香港机房(HKHK_8)

    • 测试IP:93.179.124.235
    • 全国延迟测试:hk.bwg.wiki
    • 测速文件:暂无

    日本大阪机房(JPOS_1)

    • 测试IP:185.212.58.133
    • 全国延迟测试:jp.bwg.wiki
    • 测速文件:25MB

    洛杉矶机房(USCA_6,DC6 CN2 GIA)

    • 测试IP:173.242.113.114
    • 全国延迟测试:dc6.bwg.wiki
    • 测速文件:25MB

    洛杉矶机房(USCA_9,DC9 CN2 GIA)

    • 测试IP:89.208.246.192
    • 全国延迟测试:dc9.bwg.wiki
    • 测速文件:25MB

    洛杉矶机房(USCA_2,DC2 QNET KVM)

    • 测试IP:104.225.153.186
    • 全国延迟测试:dc2.bwg.wiki
    • 测速文件:25MB

    洛杉矶机房(USCA_3,DC3 CN2 KVM)

    • 测试IP:104.243.21.212
    • 全国延迟测试:dc3.bwg.wiki
    • 测速文件:25MB

    洛杉矶机房(USCA_4,DC4 MCOM)

    • 测试IP:104.245.188.20
    • 全国延迟测试:dc4.bwg.wiki
    • 测速文件:25MB

    洛杉矶机房(USCA_8,DC8 ZNET KVM)

    • 测试IP:198.181.42.121
    • 全国延迟测试:dc8.bwg.wiki
    • 测速文件:25MB

    弗里蒙特机房(USCA_FMT)

    • 测试IP:174.137.48.242
    • 全国延迟测试:暂无
    • 测速文件:100MB

    新泽西机房(USNJ)

    • 测试IP:23.29.138.5
    • 全国延迟测试:暂无
    • 测速文件:暂无

    纽约机房(USNY_2)

    • 测试IP:208.167.227.122
    • 全国延迟测试:暂无
    • 测速文件:100MB

    荷兰机房(EUNL_3)

    • 测试IP:45.62.120.202
    • 全国延迟测试:暂无
    • 测速文件:100MB

    荷兰联通高级线路(EUNL_3)

    • 测试IP:104.255.64.1
    • 全国延迟测试:暂无
    • 测速文件:暂无

    以上是各个机房的官方测速地址和相关信息。你可以通过这些地址测试不同机房服务器的Ping延迟和文件下载速度,以便选择最适合你需求的服务器。

    搬瓦工服务器选购建议

    在选择搬瓦工的服务器时,以下是一些建议:

    • 如果预算充足,且对网络稳定性要求较高,香港机房是一个不错的选择,但价格较高。
    • 电信、移动和联通用户可以考虑搬瓦工的CN2 GIA-E套餐,这是一种性价比较高的选择,适用于各种需求。
    • 预算有限的用户可以选择搬瓦工的CN2 GT便宜套餐,年付费用较低。
    • 无论选择哪种套餐,都要根据自己的需求和预算进行权衡。

    结语

    希望这篇文章能帮助你更好地了解搬瓦工服务器测速和选购的相关信息。

    网络性能和稳定性对于在线活动至关重要,所以选择合适的服务器非常重要。如果你有任何问题或疑问,可以前往搬瓦工的官方网站或咨询他们的客户支持,他们将竭诚为你提供帮助。祝你在网络世界中一切顺利!

  • 搬瓦工IP更换教程:如何顺利更换你的VPS IP地址

    在数字时代,网络是我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐,我们都依赖于互联网。而虚拟专用服务器(VPS)则成为了许多人在网络上托管网站、应用程序和数据的理想选择。搬瓦工(BandwagonHost)作为一家知名的VPS提供商,为用户提供了高性能的VPS服务。然而,有时你可能需要更换你的VPS的IP地址。本文将详细介绍如何在搬瓦工上进行IP地址更换。

    步骤一:登陆搬瓦工官网

    首先,打开你的浏览器,前往搬瓦工的官方网站。如果你已经有账户,请登录。如果没有账户,你需要先注册一个。

    步骤二:进入IP更换申请页面

    一旦你成功登录,进入搬瓦工的用户控制面板。在控制面板中,你可以找到一个名为“IP更换申请”的选项。点击它,进入IP更换的申请页面。

    步骤三:选择需要更换IP的VPS实例

    在IP更换申请页面上,你将看到列出了你拥有的所有VPS实例。选择你想要更换IP的实例,然后点击相应实例后面的“请求更换IP”按钮。

    步骤四:生成工单

    点击“请求更换IP”后,系统将自动生成一个工单(Ticket)。这个工单是你IP更换请求的记录,包括付费信息和IP更换进度。在工单中,你需要支付IP更换的费用。

    步骤五:等待IP更换完成

    一旦你支付了IP更换的费用,搬瓦工将在24小时内为你更换一个新的IP地址。通常情况下,新IP会在30分钟内自动更换成功,你可以在工单中查看进度。

    步骤六:完成IP更换

    在新IP更换成功后,你可以回到搬瓦工的首页,在“Home”下方确认付款已完成。现在,你已成功完成了IP更换。

    结语

    无论你是因为安全问题还是其他原因需要更换IP,搬瓦工为你提供了便捷的解决方案。记住,网络安全和稳定性非常重要,所以在更换IP时,务必确保你的VPS在全球范围内可以正常访问。现在,你已经学会了如何在搬瓦工上更换IP地址,希望这个教程对你有所帮助。

  • 放下花里胡哨,用音乐点亮工作日常 – Musicfox(网易云音乐终端版)

    工作时听歌已成为我的习惯,一边工作一边将歌曲作为背景音乐,仿佛它们是我工作的伴奏。这个习惯早在我高中时就养成了,但为什么要选择在命令行终端中听歌呢?这其实有个故事:

    我的工作笔记本相对老旧,如果同时运行太多应用程序,它会像一辆老拖拉机一样嗡嗡作响,影响工作效率;
    桌面上的网页云音乐应用虽然好用,但它总是让我分心。或许因为它让查找歌曲变得太容易,我总是不知不觉地花费太多时间在上面,无法集中精力工作;
    那么,有没有一款既包含了常见音乐应用的功能,又不会占用系统资源的工具,能够让我专注地享受音乐呢?答案是有的:Go-Musicfox,这是我日常听歌的终端界面。

    放下花里胡哨,用音乐点亮工作日常 - Musicfox(网易云音乐终端版)
    放下花里胡哨,用音乐点亮工作日常 – Musicfox(网易云音乐终端版)

    Go-Musicfox是一个用Go语言编写的网易云音乐命令行客户端,它支持各种音质级别、UnblockNeteaseMusic、Last.fm、MPRIS和macOS交互响应(如睡眠暂停、蓝牙耳机连接断开响应以及菜单栏控制等)。如果你对音乐有着同样的热爱,那么Go-Musicfox可能会成为你的新选择。项目链接

    安装步骤

    如果你想在本地安装Musicfox,首先确保你已经安装了Go语言。如果你还没有安装Go语言,可以参考以下步骤:

    1. 下载Musicfox的源代码:

      git clone [email protected]:go-musicfox/go-musicfox.git
    2. 下载必要的依赖:

      cd go-musicfox
      go mod download
    3. 编译和安装:

      make
      make install
    4. 进入到Musicfox的安装目录:

      cd bin

    你会在这里找到刚刚安装的Musicfox可执行文件。

    快捷键

    Musicfox的魅力之一在于它提供了丰富的快捷键,让你可以通过命令行轻松控制音乐的播放和操作。以下是一些常用的快捷键:

    • h/H/←:左移
    • l/L/→:右移
    • k/K/↑:上移
    • j/J/↓:下移
    • g:移到顶部
    • G:移到底部
    • q/Q:退出
    • Space (空格):暂停/播放
    • [:上一曲
    • ]:下一曲
    • -/滚轮下:减小音量
    • =/滚轮上:增大音量
    • n/N/Enter (回车):进入选中的菜单
    • b/B/Escape (退出):返回上级菜单
    • w/W:退出并退出登录
    • p:切换播放方式
    • P:心动模式(仅在歌单中时有效)
    • r/R:重新渲染UI(如果UI界面出现问题)
    • c/C:当前播放列表
    • v/V:快进 5s / 10s
    • x/X:快退 1s / 5s
    • ,:喜欢当前播放歌曲
    • <:喜欢当前选中歌曲
    • .:移除当前播放歌曲出喜欢
    • >:移除当前选中歌曲出喜欢
    • “:当前播放歌曲加入歌单
    • ~:当前播放歌曲移出歌单
    • Tab:当前选中歌曲加入歌单
    • Shift+Tab:当前选中歌曲移出歌单
    • >:当前选中歌曲移除出喜欢
    • >:当前选中歌曲移除出喜欢
    • t:标记当前播放歌曲为不喜欢
    • T:标记当前选中歌曲为不喜欢
    • d:下载当前播放歌曲
    • D:下载当前选中歌曲
    • /:搜索当前列表
    • ?:帮助信息
    • a:播放中歌曲的所属专辑
    • A:选中歌曲的所属专辑
    • s:播放中歌曲的所属歌手
    • S:选中歌曲的所属歌手
    • o:网页打开播放中歌曲
    • O:网页打开选中歌曲/专辑
    • e:添加为下一曲播放
    • E:添加到播放列表末尾
    • \:从播放列表删除选中歌曲
    • ;/:

    :收藏选中歌单

    • '/''":取消收藏选中歌单
    • u/U:清除音乐缓存

    结束语

    Musicfox为那些热爱音乐的人提供了一个极简而高效的方式来欣赏自己喜爱的歌曲,同时又不会占用过多的系统资源。无论是在工作时需要一点背景音乐,还是在休闲时间想要享受音乐,Musicfox都能满足你的需求。不妨尝试一下,让音乐点亮你的日常工作和生活。

    这就是关于Musicfox的介绍,我希望你会喜欢这个简洁而功能强大的终端音乐客户端。如果你也是音乐爱好者,那么不妨尝试一下Musicfox,让音乐成为你生活中的一部分。

  • 改变你的Windows启动画面 – HackBGRT

    每当在一台基于UEFI的计算机上启动时,Windows会显示一个由厂商定义的标志,这个标志通常存储在UEFI固件的一个名为Boot Graphics Resource Table(BGRT)的部分。通常情况下,要永久更改这个图像非常困难,但可以使用自定义的UEFI应用程序在启动时覆盖它。HackBGRT正是这么做的。

    使用方法

    重要提示: 如果你在安装过程中出错,可能导致系统无法启动!在使用前,请创建一个救援磁盘。本软件不提供任何保修。请自行承担风险。

    • 确保你的计算机启动时使用UEFI。
    • 确保禁用了安全启动(Secure Boot),除非你知道如何签名EFI应用程序。
    • 确保BitLocker已禁用,或者找到你的恢复密钥。

    Windows安装

    • 从发布页面获取最新版本。
    • 启动setup.exe并按照说明操作。
      • 你可能需要手动禁用安全启动,然后重试。
      • 安装程序将启动Paint来编辑图像。
      • 如果Windows稍后还原了原始的引导加载程序,请重新安装。
      • 如果你想要更改图像或其他配置,只需重新安装。
      • 对于高级设置,在安装之前编辑config.txt。不提供额外的支持!

    静默(批处理)安装

    • 根据你的需要编辑config.txtsplash.bmp(或任何其他图像)。
    • 以管理员身份运行setup.exe batch COMMANDS,其中包含以下一些命令:
      • install – 复制文件但不启用。
      • enable-entry – 创建一个新的EFI引导项。
      • disable-entry – 禁用EFI引导项。
      • enable-bcdedit – 使用bcdedit创建新的EFI引导项。
      • disable-bootmgr – 使用bcdedit禁用EFI引导项。
      • enable-overwrite – 覆盖MS引导加载程序。
      • disable-overwrite – 恢复MS引导加载程序。
      • allow-secure-boot – 忽略后续命令中的安全启动。
      • allow-bitlocker – 忽略后续命令中的BitLocker。
      • allow-bad-loader – 忽略后续命令中的不良引导加载程序配置。
      • disable – 运行所有相关的disable-*命令。
      • uninstall – 完全禁用并删除。
    • 例如,运行setup.exe batch install allow-secure-boot enable-overwrite以复制文件并覆盖MS引导加载程序,而不考虑安全启动状态。

    多重引导配置

    如果你只需要HackBGRT用于Windows:

    • 运行setup.exe,安装文件但不启用。
    • 配置你的引导加载程序以启动\EFI\HackBGRT\loader.efi

    如果你需要它用于其他系统:

    • 配置HackBGRT以启动你的引导加载程序(例如systemd-boot):boot=\EFI\systemd\systemd-bootx64.efi
    • 运行setup.exe,安装为新的EFI引导项。

    要纯粹在Linux上安装,你可以使用setup.exe dry-run安装,然后手动将文件从dry-run/EFI复制到你的[EFI系统分区]/EFI。有关进一步的说明,请查阅你自己Linux系统的文档。

    配置

    配置选项在config.txt中描述,安装程序将其复制到[EFI系统分区]\EFI\HackBGRT\config.txt。

    图像

    图像路径可以在配置文件中更改。默认路径是[EFI系统分区]\EFI\HackBGRT\splash.bmp。

    安装程序会复制并转换那些路径以\EFI\HackBGRT\开头的文件。例如,要使用名为my.jpg的文件,将其复制到安装程序文件夹(与setup.exe相同的文件夹)中,并在config.txt中设置图像路径为path=\EFI\HackBGFT\my.jpg

    如果你手动将图像文件复制到ESP,请注意图像必须是一个带有54字节标头的24位BMP文件。这是Imagemagick中的TrueColor BMP3,或Microsoft Paint中的24位BMP/DIB。

    高级用户可以编辑config.txt以定义多个图像,此时会随机选择一个。

    恢复

    如果出现问题导致你无法启动Windows,你需要使用Windows安装光盘(或恢复光盘)来修复引导问题。

    构建

    • 编译器:GCC,目标为w64-mingw32
    • 编译器标志:参见Makefile
    • 库:gnu-efi

    以上就是关于HackBGRT的一些基本信息,它可以让你改变Windows启动时显示的标志,尽管需要谨慎使用,但对于那些希望个性化自己计算机的人来说,这是一个有趣的工具。

  • 提前续费京东 Plus 会员:权益变动与应对策略

    有一天,小明在京东上看到了一个心仪已久的电子产品,但他犹豫不决,因为他知道京东 Plus 会员的权益发生了变化。他在朋友圈里发起了一个关于续费还是不续费的投票,结果各不相同,让他陷入了纠结。于是,他决定深入了解京东 Plus 会员的最新情况,以便做出明智的选择。


    了解京东 Plus 会员权益的最新变动

    京东 Plus 会员一直以来都是京东购物爱好者的福利,但最近发生的权益变动引起了广泛的关注。最大的变化之一是每月的100元优惠券被取消,取而代之的是无限免邮服务。这对于经常在京东购物的用户来说,无疑是一个重大的改变。

    在变动前,京东 Plus 会员每月享有6次免邮的机会,而且每月还有价值100元的优惠券可以使用。这些优惠券可以在购物时抵扣一定金额,对于购买高价值商品的用户来说,相当实惠。

    然而,现在的情况是,无限免邮服务取代了100元优惠券。这意味着,会员在京东购物时可以享受无限次的免邮服务,但失去了原本每月的100元优惠券。

    影响提前续费用户的权益变动

    对于已经是京东 Plus 会员并且提前续费的用户来说,这次权益变动可能会让他们感到不满和困惑。因为他们提前续费的权益是按照首次开通一年一年核算的,所以他们的权益也会被改变。

    这意味着,即使他们提前续费了,也会失去每月的100元优惠券,取而代之的是无限免邮服务。这对于已经习惯了100元优惠券带来的实惠的用户来说,无疑是一个不小的打击。

    虽然用户们可以理解京东在提供新的福利,但权益的变动对于已经提前续费的用户来说,显然是一个令人不满的情况。

    如何应对权益变动

    对于已经提前续费的用户,面对权益的变动,有一些应对策略可以考虑:

    1. 与客服沟通:首先,你可以尝试与京东客服联系,询问是否有任何解决方案或权益调整的可能性。虽然结果不一定会如你所愿,但至少可以尝试。

    2. 权益比较:仔细权衡无限免邮与100元优惠券的价值。如果你更加依赖免邮服务,那么权益变动可能对你来说并不是太大的问题。但如果你更看重优惠券的价值,那么可能需要重新评估续费的意义。

    3. 考虑其他选择:除了京东 Plus 会员,你还可以考虑其他购物平台或会员服务。不同平台提供不同的权益和优惠,可能有些平台更符合你的购物习惯和需求。

    4. 等待观察:你也可以选择等待一段时间,观察权益变动是否会对你的购物体验产生实质性的影响。如果你发现无限免邮服务确实对你有利,那么可以考虑继续续费。

    5. 分享经验:如果你已经经历了这次权益变动,不妨与其他用户分享你的经验和看法,帮助他们更好地理解并应对这一变化。


    结语

    提前续费京东 Plus 会员是一个需要谨慎考虑的决定,尤其是在权益发生变动的情况下。每个用户的购物需求和价值观都不同,所以应对策略也会因人而异。

    无论你是继续续费还是考虑其他选择,都希望你能在购物过程中享受到更多的便利和优惠。最终,购物应该是一种愉快的体验,而不是让你感到困惑和不满。

    如果你是京东 Plus 会员,不妨分享一下你的看法和决策,帮助其他用户更好地应对这一权益变动。