周靖的博客 <_> https://bookzhou.com 2004-2026 Fri, 20 Mar 2026 04:34:28 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.9.4 https://i0.wp.com/bookzhou.com/wp-content/uploads/2018/07/cropped-bookzhou%E7%BD%91%E7%AB%99%E5%B0%8F%E5%9B%BE%E6%A0%87.gif?fit=32%2C32&ssl=1 周靖的博客 <_> https://bookzhou.com 32 32 149733647  LibVideo – 一款极简的开源免费影音库整理工具 https://bookzhou.com/2026/03/20/9602/ https://bookzhou.com/2026/03/20/9602/#respond Fri, 20 Mar 2026 04:34:28 +0000 https://bookzhou.com/?p=9602 阅读全文 “ LibVideo – 一款极简的开源免费影音库整理工具” »

]]>
家里好几台NAS,手搓加AI写了一个极简的影音库整理工具,开源并免费,解决多个来源的影音文件整理和刮削问题,支持搜索。因为是自己的爱好,所以没有使用现成的解决方案,例如Jellyfin和Kodi。需要完整功能的应移步那里,尤其是因为它们内建了播放功能。

源代码和release(一个Windows上运行的.exe):https://github.com/transbot/LibVideo2

不方便访问GitHub的请直接在这里下载:源码 可执行文件

注意:默认使用你安装的PotPlayer来播放,没有则使用系统默认插件软件,如果一种文件类型没有关联的播放软件,则打开所在目录。

欢迎fork、commit,随意修改和传播。要求使用VS2022编译。

LibVideo (我家视频)


🇺🇸 English Version

LibVideo is a modern, high-performance local video and music library management tool built on the WPF (MVVM) architecture. Combining a minimalist Material Design aesthetic with deep, intelligent metadata scraping, it offers a seamless, zero-latency, and immersive media selection experience.

🎯 Core Features

  1. Intelligent Metadata Scraping: Integrates with The Movie Database (TMDB) API. With a custom deep-regex filename sanitizer (which strips subtitle group tags, S01/E01 season marks, etc.), it achieves a 100% accurate match for official posters and plot summaries for movies and TV shows.
  2. Lightning-fast Offline Caching: All scraped data strictly lands in a lightweight serverless database (LiteDB). As long as a movie is matched online once, opening the app again results in a 0-millisecond display of images and text even offline, fully avoiding API rate-limit bans.
  3. Pure Audio Misidentification Prevention: Equipped with deep “nested folder scan detection,” pure music albums (.mp3, .flac, etc.) are perfectly identified as “Audio” and will never be mis-scraped as a movie of the same name.
  4. Immersive Glassmorphism UI: Movie cards automatically overlay the original poster with a frosted glass and dark-tint effect, delivering a premium, streaming-level poster wall visual experience.

🚀 Quick Start Guide

1. Software Setup & File Loading

  • Click the Gear (Settings) button in the top right corner of the main interface.
  • In the pop-up window, click “Add Directory” and select the root folders on your PC containing your movies, TV shows, or music albums. After adding, the system will instantly automatically scan the entire directory tree and save them into the underlying database.

2. Automatic Online Matching

  • Single-click any video directory or file row in the list, and a dedicated floating card will pop up immediately below.
  • If it’s your first time clicking, the system automatically sends a TMDB API request to intercept your media info. Subsequent clicks will be fully offline direct reads!

3. Custom Player

  • Once you decide what to watch, simply double-click the list row or click the Play triangle icon that floats on the list to seamlessly launch your PC media player.
  • By default, the system invokes the powerful 3rd-party player PotPlayer through the registry.
  • If you have specific needs (e.g., VLC or MPC-HC), you can manually specify the *.exe program by clicking “Browse” under Custom Player in the Settings interface.

4. Force Correction & Cache Clearing

  • If a newly downloaded movie fails to match due to messy symbols in its name, after you rename it in your PC folder, directly click the Refresh button (circular rewind icon) next to the gear icon.
  • This entirely wipes the incorrectly recorded historical metadata in the database, followed by a clean re-scan based on your new filename. (Don’t worry, your configured root directories will NOT be lost).

5. Smart History Search System

  • Type any keyword like Star Trek in the top-left search box, and the list will instantly filter your video items on the fly.
  • If you decide not to keep the search results, just click the X (Clear button) inside the right side of the search box.
  • The system features an exclusive “Keystroke Intent Detector”. As long as you don’t actively press Backspace or Delete, the keyword is judged as a valid hotword and is automatically collected straight to the top of your dropdown history box.
  • Use the “< Back, Forward >” buttons to seamlessly traverse your “search history snapshots”.

6. Automated Directory Monitoring (Seamless Sync)

  • The software embeds an ultra-low power system-level file detection net (FileSystemWatcher).
  • Whenever you download, add, delete, or rename media files in your mounted directories using external tools (like browsers or downloaders), the background nervous system detects it at the speed of light within 1 second, instantly triggering a smooth automatic list calibration. Truly unattended!

⚠ FAQ (Frequently Asked Questions)

Prompted with “Windows protected your PC” on the first run?

As this project is a free, open-source software released by an independent developer, an expensive enterprise code-signing EV certificate has not yet been purchased. Thus, Windows Defender SmartScreen may intercept it on Windows 10/11 on its first launch. This software is 100% open-source and safe to use.

How to bypass in one click:

  1. In the blue popup interception window, click the text “More info” on the left.
  2. Then click the “Run anyway” button that appears in the bottom right corner of the window.

🇨🇳 简体中文 (Chinese Version)

LibVideo 是一款基于 WPF (MVVM) 架构打造的现代化、高性能本地影视及音乐库管理工具。它结合了极简的 Material Design 设计语言与深度的智能元数据削刮,为您提供零延迟的沉浸式选片体验。

🎯 核心特性

  1. 智能化信息刮削:集成 The Movie Database (TMDB) API,通过自研的深度正则文件名净化器(支持破除内嵌字幕组标识与季集号 S01/E01 等),百分百精准命中电影与剧集的官方海报和带有关联的中文剧情简介。
  2. 极速离线强缓存:全站搜刮数据物理落地轻量级无服务器数据库(LiteDB)!只要联网命中过一次,再次打开软件即便断网也能保持 0 毫秒展示图文界面(拒绝 API 限流封杀)。
  3. 纯音频防误杀机制:具备深度的“文件夹嵌套扫描侦测”,纯音乐专辑库(.mp3, .flac 等)自动完美识别为“音频”,永远不会被瞎刮削成同名电影。
  4. 沉浸式 Glassmorphism UI:电影卡片会自动将原海报做毛玻璃和暗光重叠处理,提供流媒体级别的精致海报墙观感。

🚀 快速上手说明

1. 软件设置与文件载入

  • 点击主界面右上角的 齿轮(设置)按钮
  • 在弹出的窗口中点击 “添加视频目录”,选择您电脑中存放电影、剧集或音乐专辑的根文件夹。添加完毕后系统将自动进行全盘极速检索并将它们存入底层数据库。

2. 在线自动匹配

  • 在列表中 单击选中 任何一行视频目录或文件,下方立刻自动弹出专属悬浮卡片框。
  • 此时如果是首次点击,系统会自动发送 TMDB API 截取您的影像信息。以后再点击该项就是彻底的“免流离线直读”了!

3. 定制播放器

  • 剧集看中后,您只需 双击列表行,或是点击列表上自动浮现的 向右播放小三角按键,即可无缝拉起电脑播放器。
  • 系统默认在注册表层调用性能强悍的第三方神级播放器 PotPlayer
  • 如果您有特定的需求(例如 VLC 或 MPC-HC),同样在设置界面点击 “浏览” 手动指定 *.exe 程序即可全局覆盖。如需恢复默认,只需留空即可。

4. 强制纠错与缓存清盘

  • 有时候刚下载的一部新电影由于名字里多了一些怪符号匹配失败,您在电脑文件夹里将它改名之后,请直接点击界面 右上角齿轮边上的 刷新按钮(圆圈刷新图标)
  • 这将彻底抹除当前数据库中被错误记录的历史“元数据记忆”,随后按照您的新文件名进行干干净净的重新检索(请放心,之前配置好的管理目录均不会丢失)。

5. 极智历史搜索系统

  • 在左上角的搜索框中输入任何影片关键词如“星际迷航”,此时输入框下方会瞬间为您即刻筛选视频项目。
  • 若看毕不想保留该次搜索结果,直接点击搜索框右侧带圆圈的 X(清空按钮) 即可。
  • 系统为您独创了**“按键意图探测器”**,只要在这个过程中您没有按键盘上的退格或Delete主动删字,这个词就会被系统判定为您刚想使用的热门长词,并将它自动收录进您下拉历史框的“置顶第一位”。
  • 通过搜索框左侧的 “<前进、后退>”键 即可无缝穿梭您的“搜索历史快照”,再也不会为遗漏关键词而烦恼!

6. 自动化目录监控 (无缝同步)

  • 软件已在底层植入了超低功耗的系统级文件探测网(FileSystemWatcher)。
  • 任何时候当您在外部环境中(比如通过迅雷或者浏览器)向已挂载的目录中下载、新增、删除或者重命名了影视文件,软件的后台神经系统都能在 1 秒钟内光速察觉,并立刻引发一次平滑的自动列表校准。界面的数字与条目将瞬间刷新出您刚倒腾好的新影片,真正做到无人值守!

⚠ 常见问题 (FAQ)

首次运行提示“Windows 已保护你的电脑”?

由于本项目为独立开发者发行的免费开源软件,尚未购买昂贵的企业级代码签名证书(EV 证书),因此首次在 Windows 10/11 系统上运行时,可能会被 Windows Defender SmartScreen 拦截。本软件 100% 开源无毒,请放心使用。

一键放行方法:

  1. 在弹出的蓝色拦截窗口中,点击左侧的字样 「更多信息」 (More info)
  2. 随后点击窗口右下方出现的 「仍要运行」 (Run anyway) 按钮即可。

📸 软件截图 / Screenshots

Screenshot 1

Screenshot 2

Screenshot 3

Screenshot 4

Screenshot 5


📚 推荐C#开发图书 / Recommended C# Books

  1. 《Visual C# 从入门到精通,第10版》 Visual C#从入门到精通,第10版

  2. 《深入CLR,第4版 中文限量版》(原CLR via C#) 深入CLR,第4版 中文限量版

更多C#开发图书推荐

]]>
https://bookzhou.com/2026/03/20/9602/feed/ 0 9602
《AI高效应用:Java编程实践(第5版)》 https://bookzhou.com/2026/02/10/9488/ https://bookzhou.com/2026/02/10/9488/#respond Mon, 09 Feb 2026 21:41:38 +0000 https://bookzhou.com/?p=9488

下载试读PDF:本地 网盘
下载中英版配套资源:ysepan 百度网盘
本书中文版GitHub仓库(总是最新)

扫码购买:


译者序:AI赋能的Java学习之道

与戴特尔父子结缘,始于其2003年版的《Python编程金典》。犹记当年,我与他们通过电子邮件,就书中诸多问题进行了深入而坦诚的沟通。那时我便已深为其写作风格所折服,他们真正做到了手把手引领初学者步入编程之门。

当然,彼时的作品也并非完美,因其面向新手,行文稍显繁复。我当时便将主要精力投入语言的再组织,力求行文之凝练。

二十余载光阴流转,今朝幸得清华大学出版社之邀,翻译戴特尔最新版Java教材,心中既有忐忑,亦有期待,只因新书围绕AI这一前沿主题展开。待到样书在手,所有疑虑烟消云散。戴特尔的书如今已全面革新其叙述风格,不仅语言精炼,更经过了极为全面的技术审查。纵观全书,除却些许微不足道的笔误,我几乎未发现任何技术谬误。更重要的是,它已然成为一部革命性的教科书,彻底改变了一门主流编程语言的学习范式。

传统学习,我们按图索骥,沿书中路径由浅入深,依作者指引完成练习。而今,除却这些基本流程,AI辅助学习的引入,使得传授知识的不再仅仅是作者与书本,更有无数AI导师随时待命。书中任何未解之惑,心中些许未明之疑,皆可随时唤出AI探寻究竟。AI不仅能答疑解惑,更能积极扩展,助您深彻理解某一主题。

书本上的内容有穷尽之日,而与AI的对话却无止境。您可以沿一缕线索深挖不辍,直至对一个主题了然于心。AI亦可助您编写代码。面对任何可用Java程序解决的问题,都可以先行思索,构想自己的实现,再让AI挥毫一番。两相对照,高下立判,自己的差距(或优势)一目了然。例如,诚如第18章所述,以朴素递归法计算斐波那契数,其代价之高昂人尽皆知,故而至少应以迭代法代之。然则,尚有更迅捷之算法否?垂问AI,它便会贴心地告知您矩阵快速幂法与快速倍增法,甚至会为您奉上具体的Java代码实现。凡此种种,皆为书中未述之进阶知识,却与斐波那契算法紧密相连。在同一个知识点上进行这样的深度挖掘,正是构建“知识树”并实现高效学习的关键所在。

为了强调这一点,本书中文版的配套资源中,便在ch22\genAIexercises目录下提供了一个名为“快速斐波那契.java”的程序。该程序由DeepSeek根据以下提示生成,能够瞬间算出第20万个斐波那契数:“写一个Java程序,用最快的算法计算斐波那契数,要求在合理时间内,计算最多第20万个斐波那契数。用户输入一个值n,程序计算第n个斐波那契数。第0个是0,第1个是1,第2个是1,第3个是2,以此类推”。

不仅如此,译者还创建了一个算法演示网站(https://fm2gp-chinese.bookzhou.com),专门用于直观对比不同时间复杂度的斐波那契数列算法,此举正是为了再次强调在某个兴趣点上深度钻研的重要性。

本书的组织结构久经考验。二十多年前,戴特尔便从《Python编程金典》一书开始,不断探索教授编程语言的最佳方式。如今,这套方法已经成熟,形成了“对象自然”(Objects-Natural)与“实时代码”(Live-Code)两大核心教学理念。前者指在学习如何自定义类之前,先直接复用现有的类,避免一开始就陷入细节的泥潭;后者指所有代码示例都可以立即运行,是“鲜活”的代码,而非“死板”的陈列。关于这两大教学法的具体阐述,请参见本书的“前言”。

建议您先阅读“前言”,再根据后续“准备工作”部分的指引搭建好自己的Java开发环境。然后,通过第1章快速了解Java语言并亲手运行您的第一个Java程序。最后,从第2章开始,就可以正式进入系统的学习了。

第19章或许是本书的灵魂所在,它完全围绕调用API来开发AI应用展开。这些程序可实现文本摘要、情感分析、无障碍图像描述、语言检测与翻译、Java代码生成、命名实体识别与结构化输出、语音转文本、文本转语音、图像生成、为视频创建隐藏式字幕以及内容审核等诸多尖端功能。在章末的练习中,您甚至会得到用AI开发Java游戏的指导。这一切都妙趣横生,且与当今技术潮流完全契合。

英文版既已如此出众,中文版自当精益求精。本书中文版具有以下特色:

  • 全部代码均已中文化,包括屏幕/GUI界面和代码注释;
  • 不易访问的国外资源已替换为国内对应资源;
  • 不易访问的国外AI已替换为国内AI,后者在某些方面甚至更具优势;
  • 全书共三百余条“译注”,为您提供补充说明,助您规避诸多“陷阱”;
  • 新增了一些“生成式AI练习”;
  • 本书中文版主页(https://bookzhou.com)将与英文版主页(https://deitel.com/javafp5)同步更新,并提供独具特色的内容,例如如何顺畅地调用OpenAI API;
  • 本书中文版GitHub项目(https://github.com/transbot/JavaForProgrammers5e-Chinese)提供了全书源代码和补充资料,并将随时保持更新。

翻译本书的过程中,我不仅学到了许多新的知识(特别是Java 23和Java 24的新特性),也对Java编程有了更深入的理解。作者的语言简洁明了,逻辑严谨,每一个概念都讲解得非常透彻。此外,本书的实用性也给我留下了深刻的印象。作者不仅讲授理论知识,更注重实际应用,通过大量的案例和练习,帮助读者将所学内容应用于实际项目中。这种教学方法不仅提高了学习效果,也让读者在实践中不断成长。

作为一部经典的Java教材,本书不仅教会了我们如何编写代码,更让我们明白了编程的本质与意义。无论您是刚刚接触Java的新手,还是经验丰富的开发者,都能从本书中获得新的启发和收获。希望这本书能够成为广大读者编程生涯中的良师益友,帮助大家在Java的世界里不断探索,不断进步。

编程之路,道阻且长,但只要心中有光,便能一路前行。愿我们每一位读者都能借助于这本书的帮助,找到属于自己的编程之道。

最后,请允许我以本书“献辞”作为结语:

谨以此书,追思斯坦福先贤约翰·麦卡锡。

公首创“人工智能”之嘉名,更燃思想之炬,光照后人前行之路。

昔日畅想,今已成与我辈共事之智者。愿此书所授,能承公之遗泽,续写华章,是为纪念

——周靖,2025年,北京


中文版:《AI高效应用:Java编程实践(第5版)》,ISBN:9787302705178
英文版:Java for Programmers: with Generative AI (Deitel Developer Series) 5th Edition,ISBN:9780137574735

]]>
https://bookzhou.com/2026/02/10/9488/feed/ 0 9488
《Unity Cookbook中文版:从游戏开发到AI实时解决方案(第2版)》 https://bookzhou.com/2026/02/08/9480/ https://bookzhou.com/2026/02/08/9480/#respond Sun, 08 Feb 2026 13:47:03 +0000 https://bookzhou.com/?p=9480

下载试读PDF:本地 网盘 京东购买>>

欢迎阅读本书(第2 版)!在过去的20 年,实时3D 和游戏开发工具不断在进步,吸引了越来越多的人参与游戏开发,无论是大型3A 游戏还是个人利用业余时间开发的独立游戏。

我们很高兴有机会更新这本书,也为我们为这本书付出的心血感到自豪。希望在你使用Unity 引擎进行游戏开发时,这本书能成为一个你的得力助手。自从2007 年我们开始使用Unity 以来,Unity 已经取得了长足的进步,使用它的时间越长,我们越容易挖掘出它的新用法和新的优势!这一切非常令人兴奋。相信我们,这是我们的亲身体验。

我们Secret Lab 工作室开发的大部分电子游戏都是用Unity 开发的。Secret Lab 的主要作品包括与澳大利亚广播公司、航空公司、博物馆和学校合作开发的多款少儿游戏,曾获得BAFTA 和IGF 独立游戏大奖的《林中之夜》(Night in the Woods,由Finji 发行)以及广受欢迎的Yarn Spinner 插件。我们开始接触Unity 以来,它就一直是我们创作路上不可或缺的伙伴。

这本书汇集了一系列“配方”,旨在解决Unity 开发过程中经常遇到的问题。虽然本书可能无法解答你对Unity 的所有疑问,但涵盖了日常游戏开发中需要完成的大部分任务。第2 版增加了大量新的内容,反映了Unity 自本书第1 版发布以来的诸多变化,并全面更新了所有相关内容。尽管Unity 的更新速度并不快,但保持走在技术的前沿仍然十分重要。

我们把自己初次使用Unity 时遇到的难题和困惑整理到本书的配方中。真心希望它们能够为你提供帮助。现在正是使用Unity 的黄金时期。实时开发和游戏开发的世界日新月异,可以选择的工具和技术也达到了前所未有的水平。勇敢地迈出步伐,创造伟大的作品吧!

目标读者和写作风格

本书假设读者对C# 语言或其他类似语言(如C++ 语言、Java 语言、Go 语言、Swift 语言、Python 语言等)有一定的了解,但对Unity 一无所知。本书旨在成为读者的得力助手,帮助读者更快地掌握Unity 并开发出自己的游戏。

如果欣赏我们的写作风格,并希望深入学习更多与Unity 相关的知识,推荐阅读《Unity 手机游戏开发》(Mobile Game Development with Unity),这本书同样由O’Reilly 优秀的团队出版(https://oreil.ly/XO9Jf)。

本书的截图均来自Windows 系统,但书中讨论的内容普遍适用于Windows、macOS和Linux 等不同操作系统下的Unity 使用场景。

本书的结构

本书分为13 章。

  • 第 1 章“Unity 基础”,介绍使用 Unity 时需要了解的基本概念,包括游戏对象、
    组件、场景以及如何使用Unity 编辑器。
  • 第 2 章“编写脚本”,讲解 Unity 的脚本接口,我们通过这种方式来编写代码,
    实现项目功能。讲解了基础知识之后,本章接着介绍一系列实用示例,其中包
    括如何实现保存和加载系统、如何高效地处理对象以及如何以便于代码和Unity
    处理的方式存储数据。
  • 第 3 章“输入”,讲解如何获取用户的输入,如键盘输入、鼠标输入和游戏手
    柄输入。此外,本章还将探讨如何配置响应用户点击等输入事件的游戏对象。
  • 第 4 章“数学知识”,简要说明开发游戏时需要了解的一些数学概念,如向量、
    矩阵和四元数。本章还要介绍这些概念的一些实际应用,如检测一个游戏对象
    是否位于玩家前方。
  • 第 5 章“2D 图形”,探讨 Unity 内置的 2D 图形和物理系统。你将从中学习如
    何显示精灵(sprite),如何对它们进行排序以及如何实现它们之间的碰撞效果。
  • 第6章“3D图形”,讲解Unity的材质和着色系统,包括材质和着色器的工作原理、
    如何在Unity 中创建着色器以及如何在场景中实现最佳视觉效果。
  • 第 7 章“3D 物理与角色控制”,说明如何利用 Unity 的 3D 物理系统来满足常
    见的游戏玩法需求,如拾取和投掷对象,以及创建玩家可以乘坐的移动平台。
  • 第 8 章“动画与运动”,介绍 Unity 的动画系统,说明如何实现角色在不同动画
    状态之间的自然过渡以及如何将玩家的操作与角色动画结合起来。本章还要介
    绍Unity 的摄像机系统以及讲解如何使摄像机跟随目标移动。
  • 第 9 章“逻辑与游戏玩法”,专注于设计和创建游戏玩法。本章要涵盖许多常
    见的游戏玩法,如管理玩家的任务状态、监控赛车是否在违规抄近道以及管理
    游戏对象之间的伤害处理。
  • 第 10 章“行为、模拟和 AI”,讲解如何赋予游戏角色智能,使其能够检测到视
    野中的玩家、自动导航、规避障碍物以及寻找藏身处。本章还要简要探讨如何
    使用Unity 进行模拟以及使用机器学习技术实现真正的人工智能。
  • 第 11 章“音频与音乐”,介绍 Unity 中的音频系统。本章要从播放音频的基础
    知识讲起,然后逐步深入到更高级的功能,如将音频路由到不同的音频组以及
    在游戏角色说话时自动调整背景音乐的音量。
  • 第 12 章“Unity 的 UI 系统”,介绍用于构建 UI(用户界面)的工具。本章还
    要专门讲解如何通过扩展Unity 编辑器来创建自定义工具。
  • 第13章“文件、网络和截图”,作为本书的最后一章,要探讨如何进行网络通信、
    如何从网上获取数据以及如何通过代码保存截图。

中文版:《Unity Cookbook中文版:从游戏开发到AI实时解决方案(第2版)》ISBN:9787302684879
英文版:Unity Development Cookbook: Real-Time Solutions from Game Development to AI, 2nd Edition,ISBN:9781098113711

]]>
https://bookzhou.com/2026/02/08/9480/feed/ 0 9480
《学习Unity 和C# 游戏编程:第2版 》 https://bookzhou.com/2026/02/08/9472/ https://bookzhou.com/2026/02/08/9472/#respond Sun, 08 Feb 2026 13:00:40 +0000 https://bookzhou.com/?p=9472

下载试读PDF:本地 网盘
下载源代码:本地 网盘
京东购买>> 当当购买>>

译者序

作为知名的游戏开发引擎,Unity(又称“团结引擎”)自2005 年诞生以来,凭借其易用性、强大的功能以及广泛的平台支持,迅速获得了全球游戏开发者的青睐。

许多游戏的背后功臣都是Unity。这不仅包括小巧精致的独立游戏——比如以其精妙几何美学和梦幻般关卡设计闻名的《纪念碑谷》,还包括大型工作室开发的多人在线游戏——比如长盛不衰、玩家多达数亿人的《炉石传说》和《王者荣耀》等。基于Unity 开发的众多游戏作品中,这些只是冰山一角。Unity 引擎的广泛应用不仅体现了它的技术实力,还展示了它在游戏开发领域的影响力。

Unity 引擎的强大之处在于它集成了编辑器、渲染器、物理引擎、动画系统和音频处理等多个核心组件,使得开发者能够在单一环境中完成从创意构思到成品发布的整个过程。更重要的是,Unity 支持C# 编程语言,这意味着开发者可以借助丰富的API 和脚本来实现复杂的游戏逻辑和交互。另外,Unity 的跨平台特性更是让游戏能够无缝接入PC、移动设备、游戏主机乃至Web 端,从而极大地拓展了游戏的受众范围。

《学习Unity 和C# 游戏编程》(第2 版)不仅是一本面向初学者的全面参考和技术指南,更是一本聚焦于游戏开发的启蒙书籍。作者凯西·哈德曼凭借其丰富的编程和游戏开发经验,将复杂的技术概念以浅显易懂的方式呈现在读者面前。书中不仅详细介绍Unity 的基础知识,还通过一系列精心设计的项目实践逐步引导读者掌握Unity 的核心功能和C# 编程技巧。无论是游戏开发的新手,还是有一定基础的开发者,都能从本书中获得丰富的知识和灵感。

本书的特点在于其实用性和系统性。从Unity 的基础操作到复杂的脚本编程,从游戏对象的创建到用户界面的设计,每个环节都有详尽的讲解和示例。此外,本书还特别关注游戏开发的实战应用,通过分析和构建具体的游戏项目,使读者能够将所学知识应用到实际开发中,体验从0 到1 创造游戏的全过程。

本书中文版的截图均来自Unity 2023.2.20f1 版本。截至目前,该版本的汉化仍不完全,为了方便读者与Unity 界面对照,本书保留了未汉化的英文选项,同时在首次提到这些选项时标出对应的中文,例如Layout(布局)。值得一提的是,Unity 2020.3.0f1 或其他一些版本的汉化较为全面,读者可以根据自己的需要自由选择。

衷心希望本书能够成为大家游戏开发旅程中的踏脚石,引导大家成功走向彼岸。游戏开发是一场充满挑战和机遇的冒险,希望大家和我一样,能够保持好奇心,能够一直在路上。


第Ⅰ部分 Unity 基础

第1章 安装与设置

1.1 轻量级应用 Unity Hub

1.2 安装代码编辑器

1.3 安装 Unity

1.4 创建项目

1.5 小结

第2章 Unity 基础

2.1 窗口

2.2 “项目”窗口

2.3 “场景”窗口

2.4 “层级”窗口

2.5 “检查器”窗口

2.6 组件

2.7 添加游戏对象

2.8 小结

第3章 操作场景

3.1 变换工具

3.2 位置和轴

3.3 创建地板

3.4 缩放和单位测量

3.5 小结

第4章 父对象及其子对象

4.1 子游戏对象

4.2 世界坐标与局部坐标

4.3 构建简单的建筑物

4.4 枢轴点

4.5 小结

第5章 预制件

5.1 制作和放置预制件

5.2 编辑预制件

5.3 覆盖值

5.4 嵌套预制件

5.5 预制件变体

5.6 小结

第Ⅱ部分 编程基础

第6章 编程入门

6.1 编程语言和语法

6.2 代码的作用

6.3 强类型与弱类型

6.4 文件扩展名

6.5 脚本

6.6 小结

第7章 代码块与方法

7.1 语句和分号

7.2 代码块

7.3 注释

7.4 方法

7.5 调用方法

7.6 基本数据类型

7.7 通过方法返回值

7.8 操作符

7.9 小结

第8章 条件

8.1 if 语句块

8.2 重载

8.3 枚举

8.4 else 语句块

8.5 else if 语句块

8.6 条件操作符

8.6.1 等于操作符

8.6.2 大于和小于

8.6.3 逻辑或操作符

8.6.4 逻辑与操作符

8.7 小结

第9章 处理对象

9.1 类

9.2 变量

9.3 访问类成员

9.4 实例方法

9.5 声明构造函数

9.6 使用构造函数

9.7 静态成员

9.8 小结

第10章 使用脚本

10.1 using 声明语句和命名空间

10.2 脚本类

10.3 旋转变换

10.4 帧与秒

10.5 属性

10.6 小结

第11章 继承

11.1 继承机制的应用:RPG 游戏中的物品系统

11.2 声明类

11.3 构造函数链

11.4 子类型和类型转换

11.5 类型检查

11.6 虚方法

11.7 数字值类型

11.8 小结

第12章 调试

12.1 设置调试器

12.2 断点

12.3 善用 Unity 官方文档

12.4 小结

第13章 障碍赛游戏:设计与概述

13.1 游戏玩法概述

13.2 技术概览

13.2.1 玩家控制

13.2.2 死亡与重生

13.2.3 关卡

13.2.4 关卡选择界面

13.2.5 障碍物

13.3 项目设置

13.4 小结

第14章 玩家移动

14.1 创建 Player 游戏对象

14.2 材质和颜色

14.3 声明变量

14.4 属性

14.5 跟踪速度

14.6 应用移动

14.7 小结

第15章 死亡与重生

15.1 启用与禁用

15.2 Die 方法

15.3 Respawn 方法

15.4 小结

第16章 基本款危险物

16.1 碰撞检测

16.2 Projectile 脚本

16.3 Shooting 脚本

16.4 小结

第17章 墙壁和终点

17.1 墙壁

17.2 终点

17.3 场景的构建设置

17.4 小结

第18章 巡逻者

18.1 巡逻点

18.2 数组

18.3 设置巡逻点

18.4 检测巡逻点

18.5 巡逻点排序

18.6 Patroller 的移动

18.7 小结

第19章 漫游者

19.1 漫游区域

19.2 创建 Wanderer 游戏对象

19.3 Wanderer 脚本

19.4 处理状态

19.5 根据状态做出响应

19.6 小结

第20章 冲刺

20.1 定义变量

20.2 Dashing 方法

20.3 最后一步

20.4 小结

第21章 设计关卡

21.1 混用组件

21.1.1 四向射击装置

21.1.2 旋转刀片

21.1.3 旋转刀片木马

21.2 预制件和变体

21.3 创建关卡

21.4 添加墙壁

21.5 预览关卡的摄像机

21.6 小结

第22章 菜单和用户界面

22.1 UI 解决方案

22.1.1 IMGUI

22.1.2 Unity UI(uGUI)

22.1.3 UI Toolkit

22.2 场景流

22.3 LevelSelectUI 脚本

22.4 小结

第23章 游戏内暂停菜单

23.1 时间暂停

23.2 小结

第24章 尖刺陷阱

24.1 设计陷阱

24.2 Spike 的升降

24.3 编写脚本

24.4 添加碰撞体

24.5 小结

第25章 障碍赛游戏:总结

25.1 构建项目

25.2 玩家设置

25.3 回顾

25.4 额外特性

25.5 小结

第IV部分 游戏项目2:塔防游戏

第26章 塔防游戏:设计与概述

26.1 游戏玩法概述

26.2 技术概览

26.3 项目设置

26.4 小结

第27章 摄像机的移动控制

27.1 准备工作

27.2 箭头键移动

27.3 应用移动

27.4 拖动鼠标进行移动

27.5 缩放

27.6 小结

第28章 敌人与投射物

28.1 图层和物理效果

28.2 基本敌人

28.3 投射物

28.4 小结

第29章 防御塔和瞄准机制

29.1 Targeter

29.2 防御塔的继承

29.2.1 Tower 类

29.2.2 TargetingTower 类

29.2.3 FiringTower 类

29.3 基类

29.4 箭塔

29.5 小结

第30章 建造模式 UI

30.1 UI 基础知识

30.2 RectTransform 组件

30.3 构建 UI

30.4 小结

第31章 构建与出售

31.1 事件

31.2 准备工作

31.3 建造模式的逻辑

31.4 字典

31.5 鼠标单击事件方法

31.6 小结

第32章 游戏模式的逻辑

32.1 出生点和目标点

32.2 锁定 PLAY 按钮

32.3 为寻路做准备

32.4 寻找路径

32.5 小结

第33章 敌人的逻辑

33.1 游戏模式设置

33.2 生成敌人

33.3 敌人的移动

33.4 小结

第34章 更多类型的防御塔

34.1 抛物线弹道

34.2 炮塔

34.3 高温地板

34.4 路障

34.5 小结

第35章 塔防游戏:总结

35.1 继承

35.2 Unity 的 UI 系统

35.3 射线投射

35.4 寻路

35.5 附加功能

35.5.1 生命条

35.5.2 护甲和伤害类型

35.5.3 更复杂的路径

35.5.4 攻击范围指示器

35.5.5 升级防御塔

35.6 小结

第Ⅴ部分 游戏项目3:游乐场

第36章 游乐场:设计与概述

36.1 功能概述

36.1.1 摄像机

36.1.2 玩家移动

36.1.3 推动与拉动

36.1.4 移动平台

36.1.5 关节和摆动

36.1.6 力场和跳板

36.2 项目的准备工作

36.3 小结

第37章 鼠标瞄准摄像机

37.1 创建 Player 游戏对象

37.2 工作原理

37.3 脚本设置

37.4 快捷键

37.5 鼠标输入

37.6 第一人称模式

37.7 第三人称模式

37.8 测试

37.9 小结

第38章 进阶 3D 移动

38.1 工作原理

38.2 Player 脚本

38.3 移动速度

38.4 应用移动

38.5 速度衰减

38.6 重力和跳跃

38.7 小结

第39章 蹬墙跳

39.1 变量

39.2 检测墙壁

39.3 执行跳跃

39.4 小结

第40章 推和拉

40.1 脚本设置

40.2 FixedUpdate 方法

40.3 检测目标

40.4 拉动和推送

40.5 绘制光标

40.6 小结

第41章 移动的平台

41.1 平台的移动

41.2 平台的碰撞检测

41.3 小结

第42章 关节和秋千

42.1 创建摆动装置

42.2 连接关节

42.3 小结

第43章 力场和弹簧垫

43.1 编写脚本

43.2 为力场创建游戏对象

43.3 向 Player 游戏对象添加速度

43.4 施加力

43.5 小结

第44章 结语

44.1 物理游乐场:项目回顾

44.2 Unity 进阶

44.2.1 资源商店

44.2.2 协程

44.2.3 脚本执行顺序

44.3 C# 进阶

44.3.1 委托

44.3.2 文档注释

44.3.3 异常

44.4 C# 语言中的高级概念

44.4.1 操作符重载

44.4.2 类型转换

44.5 泛型类型

44.6 小结


中文版:《学习Unity和C#游戏编程(第2版)》ISBN:9787302688334
英文版:Game Programming with Unity and C#: A Complete Beginner’s Guide Second Edition,ISBN:9781484297193

]]>
https://bookzhou.com/2026/02/08/9472/feed/ 0 9472
《深入C#函数式编程》 https://bookzhou.com/2025/07/01/5708/ https://bookzhou.com/2025/07/01/5708/#respond Tue, 01 Jul 2025 07:17:18 +0000 https://bookzhou.com/?p=5708 本书封面动物是东部郊狼(Canis latrans var.),也被称为“coywolf”。东部郊狼是居住在美洲的19种郊狼亚种之一,实际上是东部狼(C. lycaon)、郊狼(Canis latrans)和家犬的杂交种,因此它的体型比西部郊狼更大,平均体重在45~55磅之间。东部郊狼的领地范围更为广阔,遍布美国东部和加拿大的大部分地区,从东海岸的纽芬兰和拉布拉多地区一直延伸到南部的乔治亚州。

京东购买>> 淘宝购买>> 当当购买>>
配套资源和试读PDF:ys168网盘>> 百度网盘>>  GitHub项目>> 本地下载(仅试读PDF)


本书已经成为了我探索C#函数式编程的首选资源,让我告别了对函数式编程的恐惧。——马特·伊兰德(Matt Eland),Microsoft MVP,Leading EDJE高级解决方案开发者

本书由父女联袂奉献:女儿担纲翻译,父亲负责校对与润色。 女儿文风委婉准确,对新技术充满好奇;父亲治学严谨,尤重技术细节的精准呈现。在合作过程中,父亲不仅严格把关,更主动增补了大量译注,对原著内容进行了深入扩展与阐释(特别是对其中涉及的英式幽默与文化背景,提供了必要的解读)。同时,全书确保了C#语言特性与函数式编程概念在技术阐述上的精确无误。——周靖,CHEF,Coder,Translator,Microsoft MVP

译者序

在翻开这本书之前,我本以为它会像大多数技术书籍一样,枯燥难懂,让人昏昏欲睡。然而,作者西蒙·J·佩恩特(Simon J. Painter)那风趣幽默的文风瞬间颠覆了我的刻板印象。阅读这本书的过程,宛如与一位经验丰富的老朋友促膝长谈,他以轻松幽默的语言,将复杂难懂的函数式编程概念娓娓道来,使原本晦涩难懂的技术知识变得亲切易懂,充满趣味。

西蒙不愧是一位资深的软件开发者,他不仅精通 C# 语言,更对函数式编程有着深刻的理解和丰富的实践经验。在书中,他巧妙地将理论与实际案例相结合,用生动的比喻和形象的示例,为我们详细解读了C#中的函数式编程特性。从基础的不变性、高阶函数,到模式匹配、递归等高级概念,他都讲解得深入浅出,让我们能够快速掌握函数式编程的精髓,并将其应用到实际的编程工作中。

更难能可贵的是,西蒙在书中始终保持着积极乐观的态度,他用幽默的语言和轻松的笔触,化解了技术学习过程中的枯燥与压力。无论是面对复杂的代码,还是难以理解的理论,他总能以一种轻松的方式引导我们去思考和探索,让学习变成一种享受。这种独特的写作风格,不仅让读者在获取知识的同时,也收获了愉悦的阅读体验。

西蒙的幽默贯穿全书,让人忍俊不禁。例如,他在谈到“递归”这个概念时写道:“如果不知道递归是什么,请查看‘递归’一节。”另外,作为一个老派的英国人,西蒙特别喜欢《007》和《神秘博士》系列,所以书中用到了它们的大量“段子”。译者也贴心地添加了注释,方便读者理解。

但是,别以为这本书只有玩笑和调侃。西蒙的专业能力十分深厚,他把技术知识用幽默的方式呈现出来,讲解得清晰又不失严谨。书中逐一讲解了函数式编程的核心理念——不变性、高阶函数、引用透明性等,并通过一个个贴近实际的例子,把它们的魅力展现得淋漓尽致。

那么,函数式编程到底有哪些优势呢?简单来说,它是一种强调“简洁、可靠和可预测性”的编程范式。比如,函数式编程的“不变性”要求变量一旦赋值便不能改变,从而减少了因为状态变动导致的潜在问题;“引用透明性”则保证了函数在相同输入下始终返回相同的输出,这大大提高了代码的可预测性和可测试性。这些特性让函数式编程在处理多线程任务时表现得尤为出色。

《深入C#函数式编程》最大的亮点在于,它非常贴近C#开发者的实际需求。书中没有空泛的理论堆砌,而是通过实用的代码示例展示了如何将函数式编程的思想融入日常工作中。当然,作者也没有回避函数式编程的学习曲线的问题。对于习惯了面向对象思维的开发者来说,函数式编程的确需要一点时间适应。但是,为它付出一些时间是值得的。

近年来,函数式编程呈现出迅猛的发展态势,在软件开发领域占据了愈发重要的地位。随着多核处理器的普及以及大数据和云计算的兴起,传统编程范式在应对并发和分布式系统时面临诸多挑战,而函数式编程凭借其独特的特性,如不可变数据、纯函数和高阶函数等,为这些难题提供了优雅的解决方案。这使得函数式编程在处理复杂业务逻辑和大规模数据处理时,展现出更高的效率和稳定性,吸引了许多开发者的目光。

总的来说,本书是一本“严谨而不失幽默”的技术指南。读者不仅可以在欢笑中理解函数式编程的核心思想,也可以学会如何在C#中灵活应用这些工具。希望读者在阅读这本书时,既收获技术的提升,也感受到学习编程的乐趣。 最后,当涉及到C#编程,不得不提一下清华大学出版社出版的“C#三剑客”。首先,《深入CLR》第4版(原《CLR via C#》)为您提供了一个高瞻远瞩的视角,深入解析了运行时和框架——C#语言的根基。语言的每一项设计都是基于这个核心架构构建的。其次,《C# 12.0本质论》,它如同一本全面且深入的语言百科全书,覆盖了C#语言的方方面面。最后,《Visual C#从入门到精通》第10版》虽然同样涵盖了语言的基础知识,但更多地是从GUI编程的角度帮助您理解C#编程。注意,包括本书在内,所有这些书的代码均通过了Visual Studio 2022的测试,读者可以访问https://bookzhou.com来获取。

——周子衿,2025


英文版书名:Functional Programming with C#: Create More Supportable, Robust, and Testable Code | Amazon详情页
ISBN:9781492097075
原著:Simon J. Painter

中文版书名:《深入C#函数式编程》 京东详情页
ISBN:9787302680154
翻译:周子衿
校对&润色:周靖

]]>
https://bookzhou.com/2025/07/01/5708/feed/ 0 5708
《高质量需求:聚焦于商业价值的20个核心实践》2025年出版 https://bookzhou.com/2025/04/15/3297/ https://bookzhou.com/2025/04/15/3297/#respond Mon, 14 Apr 2025 19:00:16 +0000 https://bookzhou.com/?p=3297

京东购买>> 淘宝购买>> 当当购买>>
配套资源:ys168网盘 百度网盘

本书是给软件需求领域的一些“大忙人”写的。是的,这些人主要都是业务/商业分析师(BA),或者临时需要担任BA的角色。他们可能没时间从头到尾读完像《软件需求》第三版和《需求可视化:22个需求模型及其应用场景》这样的“大部头”,只想知道针对当前的实际情况,应该采用软件需求领域的什么最佳实践。

全书结构非常精简,总共20个实践,分门别类地组织。只需“按图索骥”,从需求的征询、分析、记录和管理类别中,寻找自己想要的实践即可。当然,最开始会有几个帮你打好基础的实践(第2章)。

别看篇幅不长,但本书的信息量超大。引用User Stories Applied的作者和Scrum联盟的联合创始人Mike Cohn的话,“这本书提供了比我看的十本书加起来还要有用的信息”。确实如此,它荟萃了“软件需求”领域众多著作——尤其是《软件需求》第三版和《需求可视化:22个需求模型及其应用场景》这两本书——的精华,用通俗易懂、有时略带幽默的文风,提供了各种各样实用的信息。

非常高兴能获得清华大学出版社的邀请,用近一年的时间内完成了对《软件需求》第三版和《需求可视化:22个需求模型及其应用场景》这两本书的重新翻译。当然,还有这本2025年的新书《高质量需求:聚焦于商业价值的20个核心实践》

通过这个过程,我最大的体会就是知识体系的建立真的非常重要。大多数人其实都在凭自己的本能行事,没有一个成熟的知识体系作为指导,因此走了许多弯路,造成时间的浪费,投资的损失,以及客户的不满意。请问,在我们的人生中,有多少时间可供浪费?

读完这本书后,我承诺,以后即使开发最简单的软件,我也会做好它的需求工程。两相对比,我一下子就发现了差异。自己以前是多么的“不走心”!

通过阅读这几本书,至少在软件需求领域,你一定能“领先全国99%的同行”。整个过程很简单,先熟悉一下术语,试着读它们的前几章(奠定基础的部分)。有了感觉之后,就会有兴趣和动力继续往下读。在此期间,结合自己的实际来套用书中的知识。然后越来越有劲儿,最终变得越来越成功!

喔,对了,你肯定想到了“敏捷”。不用担心,关于敏捷开发的内容在这些书中占据了大量篇幅。你关心的所有问题都会能得到解答。请放轻松。

——方达,2025年于北京


英文版:Software Requirements Essentials: Core Practices for Successful Business Analysis
ISBN:978-0138190286

中文版:《高质量需求:聚焦于商业价值的20个核心实践》
ISBN:978-7302643715



]]>
https://bookzhou.com/2025/04/15/3297/feed/ 0 3297
番茄钟 https://bookzhou.com/2025/01/06/2200/ https://bookzhou.com/2025/01/06/2200/#respond Sun, 05 Jan 2025 20:02:08 +0000 https://bookzhou.com/?p=2200 阅读全文 “番茄钟” »

]]>
最近专注度有所下降,用Bolt写了一个番茄钟,帮助自己集中注意力。欢迎提出宝贵意见。

青青子衿番茄钟App

GitHub项目

]]>
https://bookzhou.com/2025/01/06/2200/feed/ 0 2200
《SRE规模化实践手册》 https://bookzhou.com/2024/12/30/2164/ https://bookzhou.com/2024/12/30/2164/#respond Mon, 30 Dec 2024 15:25:23 +0000 https://bookzhou.com/?p=2164

京东购买>> 当当网购买>> 本地下载试读PDF

由谷歌公司开创的站点可靠性工程(SRE)用于创建可扩展性和可靠性更佳的大型系统,它已成为当今最有价值的软件创新机会之一。本书是一本简明、实用和全面的指南,展示了如何在你自己的组织中推动SRE的成功采用。Vladyslav Ukis博士提出了一个循序渐进的方法来建立正确的文化、组织和技术流程基础,快速实现“最小可行SRE”,并在此基础上不断改进。

Ukis博士广泛地借鉴了他自己在一家大型医疗保健公司领导SRE转型的经验。贯穿全书,他解答了企业关于SRE的方方面面的问题,指出了各种可能存在的陷阱,并说明了如何避免或克服这些陷阱。无论你在软件开发、工程或运营中扮演什么角色,本书都将帮助你运用SRE来改善最重要的东西:用户和客户体验。

本书涵盖的内容包括:

  • 了解SRE如何工作,它在软件运营中的作用,以及SRE转型的挑战
  • 评估自己的组织当前的运作情况以及进行SRE转型的准备情况
  • 获得组织认同并启动基础活动,包括SLO定义、警报、轮流值班、事故响应和基于错误预算的决策
  • 调整组织结构以支持全面的SRE转型
  • 衡量SRE转型的进展和成功
  • 维持并推进SRE转型

对本书的誉美之辞:

“今天许多企业都面临着为其SaaS产品建立现代运营机制的挑战。本书提供了一个行之有效的、手把手的教程,说明如何使用谷歌的SRE方法从头到尾达成这个目标。从实现组织认可,到奠定基本的SRE基础,再到建立事故响应机制,并实现一个恰当的组织结构——本书为开发、运营和领导团队提供了丰富的建议!”

——Peter Schardt博士,“西门子医疗”首席技术官

“这是一本很好的入门指南,适合任何刚刚了解并在其组织中实现站点可靠性工程(SRE)的人。Vlad为任何希望了解SRE方法的人打造了一个坚实的平台,目的是在软件服务中建立可靠性。除了关于实现SLI和SLO等技术的实用建议外,Vlad还根据自己在大型组织中的工作经验,详细介绍了如何实现组织对SRE的认可,以及如何修改组织的配置。这些经验是当前各种SRE文献中非常缺乏的,以后当我被问及SRE的问题时,我会向其强烈推荐这本优秀的参考书。”

——Steve Smith,《Measuring Continuous Delivery》(2020)的作者

“我很喜欢读这本书,就连它在网上发布的抢先体验版我都一字不漏看完了。Vlad有条不紊地对待SRE这个话题,而且非常详细;如果你曾想知道别人在实现SRE的过程中是否遇到过跟你一样的问题,这本书就是答案,而且它还极有可能提供了一个颇具操作性的解决方案。这本书必然会成为参与SRE转型的所有人的案头参考书”。

——Niall Murphy,《Site Reliability Engineering》(2016)和《The Site Reliability Handbook》(2018)的合著者

“有大量博客、书籍、播客和老式的观点涵盖了SRE工具链和技术选择的细枝末节。也就是说,SRE转型很少因为技术原因而失败——它们的失败主要是由于结构或组织方面的原因。在这本书中,Ukis博士为我们提供了一个详细的、可操作的、成功的SRE组织的结构和实践蓝图。这是一本很好的书,我会向任何希望在复杂环境中建立一个规模化SRE实践的人推荐”。

——Ben Sigelman,Lightstep联合创始人

“本书提供了我所见过的最清晰、最全面、最具操作性的路线图,它帮助我们在工程组织中推动、扩大和维持SRE。强烈推荐!”

——Randy Shoup,eBay首席架构师和前Google Engineering领导人

“本书是一份全面的指南,适用于任何希望将其软件运营提升到新水平的人。如果你是初学者,那么将从本书了解为什么说SRE是一个改善运营的伟大方法,引入SRE时面临的挑战是什么,如何实现组织对SRE的认同,如何在团队中奠定SRE的基础,以及如何推动它的持续改进。如果你是有经验的从业者,那么将学到如何建立错误预算策略,实现基于错误预算的决策,并实现一个恰当的组织结构。我认为这本书的内容非常到位,强烈推荐!”

——Vitor dos Reis,Delivery Hero软件工程总监

“Vlad针对向SRE的转型提供了一个详细而全面的概述。他涵盖了评估、组织结构、技术实现、沟通和延续。这本书对于任何开始或正在进行SRE之旅的组织来说都是一个清晰的路线图,其中充满了需要考虑的问题、可用的选项以及现实世界的例子。如果你正在考虑开始SRE之旅,发现自己在这条路上停滞不前,或者正在寻找更多的思路来帮助自己成功地继续这个旅程,那么这本书将是你不二的选择”。

——Doc Norton,OnBelay Consulting公司Change Catalyst(变革倡导者)


英文版:Establishing SRE Foundations, ISBN:9780137424603

中文版:《SRE规模化实践手册》, ISBN:9787302633082

]]>
https://bookzhou.com/2024/12/30/2164/feed/ 0 2164
《大模型编程实践与提示工程》 https://bookzhou.com/2024/12/30/2149/ https://bookzhou.com/2024/12/30/2149/#comments Sun, 29 Dec 2024 22:38:09 +0000 https://bookzhou.com/?p=2149

京东购买>> 淘宝购买>>
配套资源和试读PDF:ys168网盘>> 百度网盘>>  GitHub项目>> 本地下载(仅试读PDF)
本书特色补充教程: 在Azure上免费创建OpenAI环境并避开API调用的国家/地区限制:详细教程


AI正以不可挡的势头席卷全球,深刻影响着各行各业。“顺之者昌,逆之者衰”,面对这股新的技术浪潮,我们的唯一选择就是积极适应并参与其中,与时代同频共振。因此,除了找到一个合适的切入点(例如,在现有应用中引入AI功能),一本优质的参考书也是必不可少的。

在此,我荣幸地推荐这本《大模型编程实践与提示工程》。这并不是一本试图涵盖所有AI领域的百科全书。它不会深入讲解复杂的数学原理,也不会详尽列举编程语法。相反,它的目标是帮助读者快速上手,并将AI技术应用于实际项目之中。

非常荣幸清华大学出版社将这本书的翻译工作交给我。然而,翻译工作就如同接力赛跑中的最后一棒。现在,接力棒传到了译者手中,但不能仅仅简单地把它“翻译”出来了事,还必须根据当前最新的发展做出适当的调整,并与作者保持紧密沟通。最终成果是团队协作的结晶,每个环节都紧密相连,确保中文版既能反映当前现实,又能完美衔接原作。需要检查作者是否有遗漏之处,是否需要补充内容,以及是否需要调整以适应中文环境。

尤为重要的是,书中使用的示例是否依然与时俱进,是否需要更新以符合最新的实际情况。为了给中文版读者提供最佳的阅读体验,我对本书的代码进行了更新,使其适应当前各种库的最新版本。为此,我在自己的网站(https://bookzhou.com)上提供了本书修改后的中文版代码供读者参考。

需要注意的是,当前的生成式AI虽然在努力提高输出的准确性,但由于transformer架构固有的局限性,仍会出现输出不准确的情况。尽管它们学习了大量的数据,但它们实际上并未掌握真正的知识,而只是学会了如何重新组合语料库中的信息。当前的生成式AI主要依靠算法和算力来预测下一个词,形成新的“排列组合”。然而,似乎已经接近了一个瓶颈,触及了现有理论和技术的天花板。甚至有可能目前投入的计算资源已经超过了实际需求。

我个人认为,生成式AI在自然语言处理(NLP)领域表现出一定的优势,但在逻辑推理方面仍存在不足。这一点可以从各大模型(包括GPT-4和Qwen 2-72B等)在解答2024年高考题目时的表现中看出。从单科成绩来看,这些模型在数学方面普遍表现不佳,得分率均未超过50%,呈现出明显的偏科现象。因此,当前的生成式AI更适合应用于容错性较高的场景。

尽管如此,不可否认的是,在某些对容错性要求不高的应用场景中,生成式AI的表现仍然令人印象深刻。因此,在这样的背景下,事先对AI的应用加以限制,并在事后对结果进行验证,就显得尤为重要。这也是本书的一个重要目标。

在翻译本书的过程中,我非常高兴得到了女儿周子衿(Ava Zhou)的全力支持。我们共同探讨了书中的一些主题,并一起学习了如何将AI应用于自己的实际工作。她还帮助我解决了不少疑惑,澄清了我平时没有想到的一些问题。她让我深刻地认识到,在什么时候,1+1可以大于2。

更值得一提的是,她下定决心开发自己的一个Unity游戏,并在过程中借助AI的力量。在此便不得不推荐她翻译的两本书:《Unity 2D游戏开发》和《Unity 3D游戏开发》,均由清华大学出版社出版。

和往常一样,祝您编程愉快!

——周靖,2024


原书:Programming Large Language Models with Azure Open AI: Conversational programming and prompt engineering with LLMs;ISBN:978-0138280376

中文版:大模型编程实践与提示工程,ISBN:9787302676195

]]>
https://bookzhou.com/2024/12/30/2149/feed/ 1 2149
《C++编程思想》2025重译版 https://bookzhou.com/2024/12/30/2134/ https://bookzhou.com/2024/12/30/2134/#respond Sun, 29 Dec 2024 21:29:27 +0000 https://bookzhou.com/?p=2134

本书中文版预计于2026年春出版
ys168网盘>> 百度网盘>> GitHub项目


译者序:编程恒久远,思想永流传!

《C++编程思想》第2版第2卷自2004年问世以来,一直是C++开发者心目中的经典之作。它不仅深入浅出地讲解了C++的核心概念,更通过精辟的见解和实用的案例,帮助读者理解这门语言为何如此设计,并如何在实践中灵活应用。如今,尽管C++已经发展到了C++23标准,但本书的思想依然熠熠生辉,为新一代开发者提供了宝贵的指导。

作为这本书的译者,我深感荣幸,同时也肩负着将这一经典作品完美呈现给国内读者的责任。在翻译过程中,我不仅被作者布鲁斯·埃克尔(Bruce Eckel)和查克·艾利森(Chuck Allison)的精湛技艺所折服,更被他们对编程思想的深刻洞察所打动。“编程恒久远,思想永流传。”这句话不仅是对本书内容的最佳诠释,也是我在这次翻译工作中所得到的深切体会。

从C++98到现代C++

本书基于C++98标准编写,而C++语言在过去二十年间经历了多次重大更新。为了确保本书内容与时俱进,我在翻译过程中进行了大量的修订和改写。所有示例程序都在现代C++环境中测试通过,部分程序更是利用C++11、C++14、C++17乃至C++20的新特性进行了优化。特别是最后一章关于“并发编程”的内容,完全使用了现代C++引入的标准线程库进行重写,确保读者能够掌握最新的多线程编程技巧。

这些经过深思熟虑的修订不仅使本书更加符合现代C++的开发实践,也为读者提供了一个学习和应用新特性的宝贵机会。无论您是刚刚接触C++的新手,还是经验丰富的资深开发者,都能从本书中获得新的启发和收获。

为什么选择《C++编程思想》

C++是一门复杂且强大的编程语言,它的语法和特性丰富多样,涵盖了从底层系统编程到高级应用开发的广泛领域。然而,对于许多开发者来说,C++的学习曲线陡峭,容易让人感到困惑和挫败。正是在这种背景下,《C++编程思想》脱颖而出,成为了一本真正帮助读者理解和掌握C++精髓的经典著作。

和其他C++书籍不同,本书不仅仅关注语言的语法和特性,还深入探讨了C++的设计哲学和编程思想。作者通过大量的实例和练习,引导读者逐步建立起正确的编程思维,培养解决问题的能力。这种以思想为导向的教学方法,使得本书不仅适用于初学者,也适合那些希望提升编程水平的中高级开发者。

本书中文版特色

本书中文版基于现代C++,在保留原书“编程思想”精髓的前提下,以500多条译注或直接修改原书的方式,进行了大量增补。

  • 汉化了所有代码,提供中文注释和控制台提示,且所有代码都在现代C++编译器中测试通过。 
  • 提供符合现代C++标准(C++11~C++23)的修订版代码供参考(文件名以_CPP20结尾),例如第1章许多涉及“异常规范”(C++11后已弃用)的代码。这些代码文件约有70个。
  • 清晰描述了在现代C++编译器下的编译命令。以MSVC编译器为主,少量提供GNU C++编译命令。
  • 对部分“练习”答案进行了完善或全部重写(所有答案都在“TICPP-2nd-ed-两卷练习题答案”文件夹中)。
  • 修正了全书的所有网页链接。
  • 修正了原书的一些错误(注意,原书自出版以来一直未提供勘误)。

在翻译本书的过程中,我不仅学到了许多新的知识,也对C++编程有了更深的理解。作者的语言简洁明了,逻辑严谨,每一个概念都讲解得非常透彻。尤其是他们在书中反复强调的“编程思想”,让我深受启发。编程不仅仅是编写代码,更重要的是如何思考问题、如何设计解决方案。C++作为一门强大的编程语言,为我们提供了丰富的工具和手段,但只有掌握了正确的编程思想,才能真正发挥它的潜力。

此外,本书的实用性也给我留下了深刻的印象。作者不仅教授理论知识,更注重实际应用,通过大量的案例和练习,帮助读者将所学内容应用于实际项目中。这种教学方法不仅提高了学习效果,也让读者在实践中不断成长。

最后,我想感谢所有为本书付出努力的人们。感谢原作者布鲁斯·埃克尔和查克·艾利森,他们的智慧和才华成就了这部经典之作。感谢清华大学出版社的执着、支持和信任,使得这本书能够与国内的读者见面。最后,还要感谢每一位读者,书只有在翻开的那一刻,才开始了它的生命之旅,有你们的支持和反馈,这本书变得更加完善,能够为更多的读者提供帮助。

结语

《C++编程思想》作为一部经典的C++参考书,不仅教会了我们如何编写代码,更让我们明白了编程的本质和意义。无论刚刚接触C++的新手,还是经验丰富的开发者,都能从本书中获得新的启发和收获。希望这本书能够成为广大读者编程生涯中的良师益友,帮助大家在C++的世界里不断探索,不断进步。

编程之路,道阻且长,但只要心中有光,便能一路前行。愿我们每一位读者都能借助于这本书的帮助,找到属于自己的编程之道。

愿编程思想如原力一般,始终与您同在!

—— 周靖,2025,春


原书:Thinking in C++,ISBN:978-0130353139

中文版: 尚未出版

]]>
https://bookzhou.com/2024/12/30/2134/feed/ 0 2134
《C#12.0本质论》 https://bookzhou.com/2024/10/07/1683/ https://bookzhou.com/2024/10/07/1683/#comments Mon, 07 Oct 2024 08:02:53 +0000 https://bookzhou.com/?p=1683 阅读全文 “《C#12.0本质论》” »

]]>
您手上是C#最值得尊敬、最权威的参考书之一,作者为此付出了非凡努力!Mark Michaelis的《C#本质论》系列多年来一直是畅销经典。而我刚认识Mark的时候,这本书还处于萌芽阶段。

购买链接:京东>>  淘宝>> 台湾博客来>>
配套资源和试读PDF第1-9章下载: ys168网盘>> 百度网盘>> 本地下载(仅试读)
GitHub项目:https://github.com/transbot

自2007年《C# 2.0本质论》面世以来,我便与这本书以及作者马克·米凯利斯(Mark Michaelis)结下了不解之缘。除去未参与《C# 6.0本质论》和《C# 8.0本质论》的翻译,其余译本均出自我的笔下。

马克是位不折不扣的实干家。作为铁人三项运动员和技术领域的佼佼者,他深入探究事物本质的能力令人敬佩。对于任何问题,他都能深究其表面之下的本质。任何问题他都能做到不仅知其然,还知所以然。这种深度思考体现在本书中,诸多知识点被巧妙且紧密地联系起来。最开始不明白的问题,一气呵成读下去会有恍然大悟的感觉。正如微软首席架构师Mads Torgersen在本书的推荐序中所言,“一样东西通过了Mark的测试,就没什么好担心的了!”

马克的《C#本质论》系列版本,总让我想起罗素。作为哲学家、数学家和逻辑学家,罗素的行文向来字字珠玑,具有较强的感染力,很容易引起读者的共鸣,给读者带来许多启发。在《罗素回忆录:来自记忆力的肖像》中,他介绍了自己是如何写作的:“我希望能够用最少的词把每件事情说得一清二楚。我肯花时间设法找出最简洁的方式把某些事情毫不含糊地表达出来,为此,我往往不惜牺牲追求美学上优点的一切企图。”在他21岁之前,罗素希望自己的写作风格够接近于约翰·米尔的风格,因为后者有值得自己效仿的句型结构和主题拓展方式。经过种种尝试,罗素终于醒悟,意识到对华丽词藻和张扬写作风格的模仿会诱发一定程度的虚伪性,认识到所有模仿都是危险的,由此,他总结出三大简单的写作准则:其一,如果可以使用一个简单的词,就永远不要使用一个复杂的词;其二,如果想要做一个包含大量必要条件在内的说明,那么尽量把这些必要条件放在不同的句子里分别说清楚;其三,不要让句子的开头引导读者得出一个与结尾有抵触的结论。

由此联想到马克的这本书,优秀的专业技术类图书,其表述方式和措辞首先考虑的是以读者为本,而不是满篇都是只有少数博学之士才能看懂的行话或术语。在这次翻译《C# 12.0本质论》的过程中,我有颇多这样的感受。真正的技术大师,并不会一味地追求形式化、科学化和精致化而导致专业知识远离大部分读者,直到竖起不可逾越的篱笆。真正优秀的作者,是像马克这样的,他们拒绝向读者介绍未经过自己检验的东西,他们拒绝伪装,从来不会故意用高深莫测且让大家云里雾里的话术来凸显自己的专家身份。

在我看来,《C# 12.0本质论》实际上完成了一项非常困难的任务。前面几章的内容很易于被刚入门的开发者理解。而在后期的章节中,作者毫不藏私,将自己二十多年来对C#语言的理解倾囊以授,为有经验的开发人员提供了挖掘C#潜能所需要的技术细节。马克是组织内容的高手。从第1章起,他就成功赢得了许多读者(甚至是高手)的信任。与此同时,全书的内容还做到了通俗易懂且没有半句废话的程度。

这一版是历史上改动最大的一版。针对C# 12.0的新特性,内容编排有了很大变化。感谢框架和语言的进步,以前实现比较起来繁琐的代码,现在变得更简洁了。当然结果就是,全书几乎所有代码和相关内容都要重新设计。作为译者,加上错过了上一版,所以面对的基本是一本全新的书。

下面简单总结了中文版的一些特色:

  • 思维导图中的编号对应二级小节编号
  • 在“语言对比”中删除了涉及Visual Basic的几乎所有内容
  • 中文版本地化了所有代码,包括注释和UI
  • 近150条“译注”
  • 对原书(纸质版)进行了大量勘误,并反馈回作者(100条以上),译者主页也提供了英文版勘误PDF

说到本书源代码,不得不说这一版的呈现方式是最完美的。本书在GitHub上有专门的项目(https://github.com/IntelliTect/EssentialCSharp),读者可以随时下载最新代码并在Visual Studio 2022中打开。中文版读者则可以访问译者主页(https://bookzhou.com)或GitHub项目(https://github.com/transbot/EssentialCSharp),获取配套的中文版资源。所有代码的注释和UI均已中文本地化。如果访问GitHub有困难,可以直接从译者主页下载。另外,务必查看源代码中的README.md文件了解用法。

当涉及到C#编程,不得不提一下这个领域的“三剑客”,我亲自翻译了它们。首先,《深入CLR》第4版(原《CLR via C#》),为你提供了一个高瞻远瞩的视角,深入解析了运行时和框架——C#语言的根基。语言的每一项设计都是基于这个核心架构构建的。其次,本书《C# 12.0本质论》,它如同一个全面且深入的语言百科全书,覆盖了C#语言的方方面面。最后,《Visual C#从入门到精通》第10版虽然同样涵盖了语言的基础知识,但更多地是从GUI编程的角度帮助你理解C#编程。注意,这三本书均通过了Visual Studio 2022的测试。

感谢作者马克• 米凯利斯(Mark Michaelis),他是一位非常有激情和活力的技术专家。翻译过程中,他热情、耐心地解释我所提出的问题,并虚心、坦诚地采纳了我提出的修改意见。还要感谢我的家人,尤其是女儿周子衿(Ava Zhou),她总能从一些新奇的角度来帮我重新认识这个世界。

衷心希望每一位读者都能通过这本书,踏上一段愉快而激动人心的C#之旅! ——周靖,2024


中文版勘误:

1. 42页,代码清单2.9演示了如果没有使用round-trip格式,那么两个数就不相等了。但现在round-trip格式已经发生了改变,导致即使不使用round-trip格式,两个数也相等。这个改变来自开发团队的以下pull request:Update the double/float formatters to return the shortest roundtrippable string。网址是https://github.com/dotnet/coreclr/pull/22040。因此,这个例子暂时可以忽略。

2. 479页,代码清单13.15,删除代码行while (!string.IsNullOrWhiteSpace(input));中的!符号,否则程序只接受空白字符的输入(原书勘误)。GitHub代码已更新。


英文版:Essential C# 12.0 ISBN:9780138219512
中文版:C#12.0本质论 ISBN:9787302668046

]]>
https://bookzhou.com/2024/10/07/1683/feed/ 3 1683
《深入CLR》(原CLR via C#)2024修订版 https://bookzhou.com/2024/10/07/1667/ https://bookzhou.com/2024/10/07/1667/#comments Mon, 07 Oct 2024 06:50:59 +0000 https://bookzhou.com/?p=1667 阅读全文 “《深入CLR》(原CLR via C#)2024修订版” »

]]>
原书虽然基于Visual Studio 2012/2013,.NET Framework 4.5.x和C# 5.0,但在目前最新的Visual Studio 2022(.NET Framework 4.8.x和C# 10 )上,除了关于AppDomain的部分内容,本书绝大多数内容都适合当前的情况。毕竟,整本书讲的都是基础。所有“语法糖”在ILDasm.exe的面前,都是一样的。

京东购买>> 淘宝购买>>
配套资源和试读下载: ys168 网盘>> 百度网盘>> 本地下载(仅试读PDF)>>

本书于2023年底进行了全面修订:

  • 全面提升了可读性:
    a)使用了更清晰的代码字体。
    b)进行了大量细节修订,以前一些不是特别清楚或者容易产生歧义的地方,都进行了澄清。
    c)新增多处“译注”。
  • 新的中文版反映了到目前为止所有读者(包括英文版读者)反馈的勘误。
  • 标注了一些不适合.NET Core的内容(数量极少)。
  • 更新了书中引用的URL,有的进行了缩短(短网址)
  • 修订了正文中对部分章节标题的引用
  • 增补了术语表
  • 现在,绝大多数屏幕截图基于Windows 10/11和Visual Studio 2022

关于阅读方式和顺序,请参考知乎文章:https://www.zhihu.com/question/27283360。感谢赵劼​。

中文试读版提供了1-13章和译者后记(全书1/3内容),量大管饱。


从事软件开发的人,都是耐得住寂寞的人。Jeffrey不仅耐得住寂寞,还在自己的专业领域取得了很高的造诣。取得了很高的造诣不说,他还愿意将自己的心得与大家分享。愿意和大家分享不说,他还非常实诚,真心想把自己的全部知识都清楚地交待给读者。字里行间,全是殷殷叮嘱。无浮夸之文字,倾心血而写就,近十年之所悟,尽呈现于本书。

读完这本书,你的心灵会受到极大的震撼。原因很简单,以前许多似懂非懂的概念,现在变得清晰明了;以前自以为是的做法,现在得到彻底纠正;以前艰苦摸索的编程技巧,现在如同1+1一样简单。

Jeffrey最擅长的就是把最基本的东西讲清楚。你以前或许知道1+1等于2,但他会把1+1为什么等于2讲得明明白白。最终你会有一种顿悟的感觉,然后自动地知道1+2等于几,2+2等于几。不需要翻阅其他书籍来查询结果。

没有后期维护的书不算是好书。即使是本书英文原版,也维护了一份很长的勘误表,我本人也为其贡献良多。本书中文版将延续我一直以来坚持的风格,建立专门的页面进行维护,提供资源下载和勘误等服务。请大家继续前往我的博客(https://bookzhou.com),发表关于本书的意见和建议。


英文版:CLR via C#,ISBN: 9789351190905
中文版:《深入 CLR》,ISBN:9787302661269

]]>
https://bookzhou.com/2024/10/07/1667/feed/ 3 1667
《Python超能学习手册》 https://bookzhou.com/2024/08/14/1531/ https://bookzhou.com/2024/08/14/1531/#respond Tue, 13 Aug 2024 18:43:00 +0000 https://bookzhou.com/?p=1531 阅读全文 “《Python超能学习手册》” »

]]>
这是一本写给零基础的孩子们看的游戏编程书(全彩印刷)。目前孩子学习编程,大致上可以分为两个大的阶段:图形化编程和代码编程。图形化编程基本上是基于麻省理工学院Scratch来学习的,而从图形化编程过渡到代码编程,Python语言以它简洁、接近自然语言的语法结构,自然成为首选。

购买链接: 京东>> 当当>>
下载试读PDF(1-6章): ys168网盘>> 百度网盘>> 本地下载>>

然而,市面上的Python书很多,大多还是写给专业程序员的。写给青少年,教他们学会编程的很少,由真正懂编程、懂教育并熟悉孩子的人来写的就更少了,本·福达(Ben Forta)作为Adobe的资深教育主管,已经帮助超过 100 万人学会编程;而什穆尔·福达(Shmuel Forta)更是拥有程序员、工程师、创客和教师多重身份,而且他在高中教授孩子们学习编程长达 5 年,由他们俩来合写这样的一本书再合适不过了。

本书的组织结构更像是一份桌游指南,带着大家去玩转Python编程,从最开始的小游戏开始,让大家先玩起来;再逐步过渡到复杂一点的冒险类文字类游戏,让大家认真玩;最后再到更复杂的带界面的赛车游戏,带大家好好玩,玩法难度逐步提升,让大家在玩中学习和成长。

全书的内容递进也是基于布鲁姆教育目标精心做了设计,所有章节都是围绕着一些要解决的游戏问题不断展开,提出问题 → 尝试捣鼓 → 解决问题 → 再提出问题 →优化问题,最后留下挑战与思考,把自主权又给到学生,甚至还讲到了复用、测试、重构这些最佳实践,非常专业,也不失趣味性!

如果是正在教孩子学习Python编程的老师,本书也一定能帮上你,书中的内容结构也很适合分解或组合成课程,如果想将本书的内容用到课堂教学中,Ben 大叔还贴心了为编程老师准备了教学资源,为每个项目都提供了使用说明和讨论要点。我在读完本书后,我也第一时间将本书的内容和思路分享给了一些老师,并且应用到了自己的教学中,效果非常好。

当然,教和学都不一件简单的事,在接下来的时间里,我也计划以这本书为基础,作为起点,结合自己在青少年编程教学中的一点经验,多做一些探索和分享,也希望有更多想在这方面做一些工作的程序员、编程老师一起加入进来,让更多的孩子享受编程的乐趣!

期待这本书可以为正在学习编程的孩子和为正在教孩子学习编程的老师,打开一扇窗,释放自己在编程方面的超能力,领略编程带来的无限美好风光!是不是等不及了?赶快来释放你的超能力吧!

——摘自本书“推荐序” by 大圣不是圣(陈显军),2022 年8 月于成都


英文版:《Captain Code: Unleash Your Coding Superpower with Python》
ISBN: 978-0137653577 美国亚马逊详情页

中文版:《Python超能学习手册》
ISBN:978-7302608127 京东详情页

]]>
https://bookzhou.com/2024/08/14/1531/feed/ 0 1531
《Unity 2D游戏开发》和《Unity 3D游戏开发》 https://bookzhou.com/2024/08/12/1520/ https://bookzhou.com/2024/08/12/1520/#comments Mon, 12 Aug 2024 09:25:40 +0000 https://bookzhou.com/?p=1520 阅读全文 “《Unity 2D游戏开发》和《Unity 3D游戏开发》” »

]]>
这两本书不要求读者具备任何编程基础,适合希望从头开始学习Unity 2D/3D游戏编程的读者阅读和参考。它们以“Step-by-Step”的方式讲解了多个Unity游戏的开发过程,其间穿插了一些游戏开发和编程知识。带领读者熟悉游戏制作需要用到的软件工具之后,就会立即开始介绍如何制作游戏,从简单的小游戏到较为复杂的商业游戏。通过阅读本书,读者将学会如何结合运用Unity游戏引擎和其他工具来制作具有典型商业游戏特征的2D/3D游戏。

《Unity 2D游戏开发》: 京东购买>>
《Unity 3D游戏开发》: 京东购买>>
中文版试读PDF请从网盘下载:ys168网盘>> 百度网盘>>

两本书的作者是弗朗茨·兰辛格(Franz Lanzinger),他1982年入职雅达利Coin-Op,并从此踏入了游戏行业。那一年,他才26岁!虽然雅达利Coin-Op已经不复存在了,但那一小批先驱者无与伦比的影响力一直持续到了今天。

弗朗茨的游戏开发生涯跨越了近40年,从1983年雅达利公司的经典投币游戏《水晶城堡》开始,再到1990年天元公司发行的任天堂红白机游戏《吃豆人小姐》和《Toobin’》。 自1991年以来,弗朗茨一直以独立游戏开发者的身份活跃着。他参与了超级任天堂的《领土之战》、《Championship Pool》和《NCAA Final Four Basketball》,以及在PC、Mac和PlayStation平台上发行的《Gubble》。他目前正在使用Unity和Blender为PC、Mac和主机平台重制《Gubble》。

为什么要说这么多关于作者的故事,除了为这两本Unity游戏开发书籍“背书”之外,更重要的是传递一种精神——对一件事的热爱和坚持。这种精神不仅能让你终身受益,还能激励身边的人跟随你的脚步,勇敢地迈出第一步。

我的女儿周子衿(Ava Zhou)便是一个典型的例子,她和许多人一样喜欢游戏,而且善于思考游戏内外的一些东西。为什么不自己开发一个游戏呢?她从初中便有了这种“大胆”的想法。学业有成后,这个念头更是一发不可收拾。于是,在包括弗朗茨等在内的前辈的激励下,她通过自学并参与一些游戏开发书籍的翻译,有了相当多的知识储备,并积累了不少游戏开发/程序设计经验。虽然还只是一些小项目,但我个人觉得,从积累经验的角度说,完全足够了。

昨天,她相当肯定地说,可以开始了。让我们耐心期待她的成功!



《Unity 2D游戏开发》: ISBN: 9787302634072 京东详情页
《Unity 3D游戏开发》: ISBN: 9787302634065 京东详情页

]]>
https://bookzhou.com/2024/08/12/1520/feed/ 1 1520
《代码大全2》纪念版 https://bookzhou.com/2024/07/12/1354/ https://bookzhou.com/2024/07/12/1354/#respond Fri, 12 Jul 2024 09:20:15 +0000 https://bookzhou.com/?p=1354 阅读全文 “《代码大全2》纪念版” »

]]>
《代码大全2》是著名科技类作家史蒂夫·麦康奈尔的经典著作,是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟时代潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。本书所论述的技术不仅填补了初级与中高级编程技术之间的空白,而且也为程序员提供了一个有关编程技巧的信息来源。

中文试读版第5、6、9章,第14 ~ 19章,第24 ~ 28章,翻译原稿,仅供参考,

更多精彩内容,请购买正式版:京东  淘宝  |  美国Amazon 台湾博客来
配套资源和试读下载: ys168网盘>> 百度网盘>>
本地下载(仅试读PDF)>>


这本书特别强调了在编写代码之前彻底规划和设计的重要性。这包括理解需求,创建详细的设计,并考虑潜在的问题,以尽量减少在实施过程中遇到的问题。具体来说,这意味着在开始编码之前,要完全掌握项目的目标,细化设计文档,并预见到可能发生的挑战,从而确保软件开发过程更加顺利,避免或减少后期可能出现的修改和调试工作。

经典书自然有经典的用法。刚开始可以粗读,对作者的思路有一个基本的了解。遇到自己感兴趣的点,可以精读。在觉得自己收获满满后(这并没有一个具体的度量),就可以把它放在一边。以后,一旦在实际的项目中遇到问题,或者在完成某个项目后需要做“事后回顾”,就可以重拾本书,找到自己知识的薄弱之处,趁着这股“新鲜劲儿”还没有过去,赶快看看自己是否有改进之处。如此反复,你也能成为一名“大师”。

2021年,有幸受出版社之邀,充当救火队员,参与重译了本书约1/4的内容。所有原始译文将在这里一并放出。是的,这是一个“重译”项目。虽然原来的中译版也不错,但存在不少瑕疵。此次重译,一并解决了这些问题,并以译者注的形式增补了不少内容。

最后说一下书名,这并不是一本所谓的“大全”,里面并没有大量枯燥的代码。相反,所有代码“片断”都是为当前主题服务的。之所以叫“代码大全”,只能说是源自一个美丽的“错误”。不多说了,说多了都是泪。

PS:本人重译的章:第5、6、9章,第14 ~ 19章,第24 ~ 28章,覆盖全书四分之一的内容,约18万字。PDF文档包含目录大纲(书签),请在你的PDF阅读器中开启书签后阅读。


热心读者小笼包的读书视频(书已经翻烂了,拍完视频后已寄回):


英文版:《Code Complete 2》, ISBN: 9780735619678, Amazon详情页
中文版:《代码大全2》纪念版 , ISBN: 9787302583646, 京东详情页

]]>
https://bookzhou.com/2024/07/12/1354/feed/ 0 1354
在Azure上免费创建OpenAI环境并避开API调用的国家/地区限制:详细教程 https://bookzhou.com/2024/06/21/1188/ https://bookzhou.com/2024/06/21/1188/#comments Thu, 20 Jun 2024 21:42:45 +0000 https://bookzhou.com/?p=1188 阅读全文 “在Azure上免费创建OpenAI环境并避开API调用的国家/地区限制:详细教程” »

]]>
本文虽是为《Programming Large Language Models with Azure Open AI》一书准备的,但适合所有想在自己的程序中集成AI的人士。注意,本书中文版尚未出版,敬请期待。英文版的Amazon详情页

由于本书原版只是直接给出了代码,没有详细说明如何准备工作环境,所以才有了本文的诞生。采取的是Step by Step的方法。按步骤操作,最后必然会得到一个可以正常工作的Azure OpenAI开发环境。甚至还有两个额外的好处,一是不需要使用代理,便能访问包括ChatGPT-4o在内的最新版本;二是以后若OpenAI限制开发人员直接调用其API,我们也可以通过Azure云来中转。

2024.6.26更新:据悉,从7月9日开始,OpenAI将限制不支持国家和地区的API调用。但是,如果像本文描述的那样,通过Azure OpenAI来调用,那么将不受限制。

2024.6.27更新:本文已由清华大学出版社转载于知乎:https://zhuanlan.zhihu.com/p/705739671

2024.7.15更新:新增了Microsoft Guidance的用法,它是你写AI应用的好帮手,可以“指导”AI以符合逻辑的方式组织生成和提示,并做一定程度的逻辑控制。另外,还可以自定义函数,并在生成回答时嵌入函数的运行结果。用法非常简单明了,看例子就可以知道。

2024.12.30更新:中文版已经出版:《大模型编程实践与提示工程》

准备工作环境

  1. 免费创建Azure订阅。新用户可以多种服务免费使用一年,而且账户中会自动充值200美元的余额。

2. Azure OpenAI目前处于测试阶段,需要申请才能使用。申请前,请先准备好两样东西:刚才创建的Azure订阅ID和一个企业邮箱(不能使用Gmail等免费个人邮箱)。

  • 在Azure门户中找到Azure订阅ID:
    访问https://portal.azure.com/,单击“订阅”,记录订阅ID。
  • 企业邮箱则很好解决,不要使用免费的个人邮件服务即可。域名最好与稍后要填写的组织名称一致。
  • 访问https://aka.ms/oai/access来申请Azure OpenAI,填写姓名,企业名称、邮箱、地址等。在几个小时内,申请应该就被批复。申请通过后,会向你填写的邮箱发一封确认函。

3. 从现在开始,就可以自由地使用OpenAI服务了。有两个选择,一个是在Azure OpenAI Studio中直接使用,另一个是在自己的程序中使用。若选择的开发语言是C#,那么要求安装.NET Core的最新版本和Azure.AI.OpenAI包(稍后说明);若使用Python,则要求Python 3.8以上。无论怎么选择,都要求先在自己的订阅下创建一个Azure OpenAI Service。

为此,请访问Azure OpenAI Studio,然后使用有权访问 OpenAI 资源的凭据登录。在登录过程中或登录之后,选择适当的目录、Azure 订阅和 Azure OpenAI 资源。

注意,如果之前尚未创建OpenAI Service,那么需要先创建一个,过程非常简单。为此,在Azure AI services | Azure OpenAI页面中单击“创建”,如下图所示。

随后会显示以下“创建Azure OpenAI”页面。

注意,OpenAI服务的创建时间较长,请耐心等待。创建完成后,再次访问Azure OpenAI Studio,就可以在Azure AI Studio中部署Azure OpenAI服务了。

单击“新建部署”,选择你希望的模型,例如GPT-4o。然后,为自己的部署取一个名字。

单击“创建”后,就可以在Azure AI Studio左侧的“部署”区域找到自己的部署了。单击部署名称,再单击“在操场中打开”,就可以立即体验类似于ChatGPT的聊天会话。

玩够了,接着让我们开始干“正事”,即选择一种语言(例如,C#)在自己的应用程序中集成Azure OpenAI功能。在正式开始之前,请先记录以下三项信息:1. API密钥,例如fcac1bde46224180b52c1a4be79cb20k。2. 你的终结点URI,例如https://gpt.openai.azure.com/,3. 以及部署名称,例如gpt-4o。

下面分两个部分来举例说明如何在自己的应用中集成AI功能。第一部分使用的是Azure.AI.OpenAI当前的最新版本(目前是2.0)。第二部分使用的是《Programming Large Language Models with Azure Open AI》一书所用的版本,即1.0,这也是目前使用量最大的版本,大多数套壳AI使用的都是它。

使用Azure.AI.OpenAI的最新版本

1. 在Visual Studio Code中安装微软官方的Polyglot笔记本插件,这是为了方便以后随时试验自己的代码。当然,直接使用Visual Studio也是可以的。安装好笔记本插件后,在VS Code中按Ctrl+Shift+P(或Ctrl+Shift+Windows+N),选择新建一个默认的Polyglot笔记本,输入并执行以下命令:

#r "nuget: Azure.AI.OpenAI, 2.0.0-beta.2"

如果使用Visual Studio,则从“工具”菜单中选择“NuGet包管理器”,打开“程序包管理控制台”,并输入以下指令:

dotnet add package Azure.AI.OpenAI --prerelease

2. 现在就可以开始写代码了,以下C#代码展示了如何在一个控制台应用程序中调用Azure OpenAI API,要求AI帮你写一篇800字以内的短篇“小说”。

using Azure;
using Azure.AI.OpenAI;
using OpenAI.Chat;

string key = "在这里输入你的API密钥"; // 例如,fcac1bdc46224180b52c1a4be79cb20k
string endpoint = "在这里输入你的终结点URI"; // 例如,https://zjgpt.openai.azure.com/
string deploymentid = "在这里输入你的部署名称"; // 例如,chagpt4-o

AzureOpenAIClient azureClient = new(
    new Uri(endpoint), new AzureKeyCredential(key));
ChatClient chatClient = azureClient.GetChatClient(deploymentid);

ChatCompletion completion = chatClient.CompleteChat(
    [
        new UserChatMessage("写一篇800字以内的短篇小说,主角是一位侠客,他的名字叫张无忌;还有一位美女,她的名字叫赵敏。两个人第一次见面时都喜欢上了对方,但当时不知道对方属于不同的阵营。两个阵营有着不可调和的矛盾。请随意发挥写两个人的爱情故事,最好有一个圆满的结局。"),
    ]);

Console.WriteLine($"{completion.Role}: {completion.Content[0].Text}");

程序返回了以下结果(你看到的结果当然不一样,但这正是AI的魅力,不是吗?):

在古代的江湖世界中,正义与邪恶的斗争从未停息。张无忌,一位正义的侠客,肩负着重振明教的使命,而赵敏,一位机智勇敢的侠女,则是大元朝的秘密使者,二人在一次偶然的集市相遇中,不知道对方的真实身份,却在那一刻坠入了爱河。

那天,夕阳如血,集市上人声鼎沸。张无忌穿着普通的黑色长袍,漫步于市集之中,他的心中虽然忧虑着明教的前途,但他的眼睛却被一位穿着红衣的女子所吸引。这女子手持纸扇,扇面上绘有梅花,她的步伐轻盈,仿佛不沾尘埃。

赵敏的任务是在这个小镇上寻找一份重要的情报,但当她的目光与张无忌相遇时,她感到了一种前所未有的震动。她见过许多勇猛的战士,却从未见过如此温文尔雅,眼含深情的男子。他们的眼神交流虽只是一瞬,但足以让彼此的心猛烈跳动。

随后的几天,张无忌和赵敏在市集、桥上、古寺不期而遇,每次相遇都似乎是命运的安排。他们谈笑风生,讨论武学、诗词,甚至分享各自的梦想与希望。然而,随着时间的推移,他们也意识到彼此背后所代表的力量正是对方的敌人。

一天夜里,张无忌在月光下修炼内功,赵敏悄悄地走近,坐在他身边。月光下,赵敏的脸庞格外动人,张无忌深知这一刻的宁静不会持久。

“我们……是敌是友?”张无忌沉声问道。

赵敏轻轻叹息,“我不知道,但我知道我已无法自拔。”

心中充满矛盾与纠结的他们,决定在接下来的朝阳下决一死战,用武决定彼此的命运。然而,在决斗之日,当他们手中的剑相互对峙时,张无忌突然放下了剑,赵敏也随之停手。

“我宁愿放弃这一切,也不愿意失去你。”张无忌的声音坚定而深情。

赵敏眼中含泪,她知道自己同样做不到手刃爱人。在爱与使命之间,他们选择了爱。

两人逃离了各自的阵营,隐居在远离尘嚣的小山村,过着平凡而幸福的生活。他们在那里开辟了一片小小的天地,种花养鱼,世外桃源般的生活让他们逐渐忘记了过去的恩怨与争斗。

岁月流转,张无忌与赵敏最终证明了,即使在矛盾与冲突交织的江湖中,真挚的爱情仍能找到属于它的一片净土。他们的故事在江湖中流传开来,成为了后世歌颂的佳话。

3. 如果更喜欢使用Python,那么可以在Jupyter笔记本中写以下等价的代码:

from openai import AzureOpenAI

# 设置Azure OpenAI客户端
# 建议将身份资料设为本机的环境变量,并通过load_dotenv函数从一个.env文件中获取
# 如果希望从.env文件的环境变量中读取终结点、密钥和部署名称在内的环境变量,
# 那么还需要安装python-dotenv库,命令是:pip install python-dotenv
client = AzureOpenAI(
    azure_endpoint="在这里输入你的终结点URI",
    api_key = "在这里输入你的API密钥",
    api_version = "2023-09-01-preview"
)

deployment_name = "在这里输入你的部署名称"
context = [{'role': 'user', 'content': "在这里输入你希望指示AI做的事情,例如上例的小说写作要求"}]

response = client.chat.completions.create(
    model=deployment_name,
    messages=context,
    temperature=0.7
)

print(response.choices[0].message.content)

使用Azure.AI.OpenAI的1.0版本

这一部分的内容是为了适配本书的源代码,但所用的API版本也是当前使用量最大的。

1. 在Visual Studio Code中安装微软官方的Polyglot笔记本插件,这是为了方便以后随时试验自己的代码。当然,直接使用Visual Studio也是可以的。安装好笔记本插件后,在VS Code中按Ctrl+Shift+P,选择新建一个默认的Polyglot笔记本,输入并执行以下命令:

#r "nuget: Azure.AI.OpenAI, 1.0.0-beta.12"

如果使用Visual Studio,则从“工具”菜单中选择“NuGet包管理器”,打开“程序包管理控制台”,并输入以下指令:

dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.12

2. 现在就可以开始写代码了,这次我们举一个稍复杂的例子,其中用到了“系统提示”的概念。在聊天机器人中,系统提示(也称为元提示,即metaprompt)可以用于引导模型的行为。一条系统提示会:

  • 告诉模型应该如何完成任务,以及是否可以使用额外的工具。
  • 明确说明模型性能的范围和限制,包括如何处理跑题或无关的提示。
  • 确定模型在响应时的态度和语气。
  • 定义输出格式,包括语言、语法和任何格式偏好。
  • 提供一些示例(样本,或者说shots),以展示模型预期的行为,考虑加入一些困难的使用场景和思维链(CoT)推理。
  • 事先识别一些潜在的危害,定义优先级并予以解决,建立起额外的行为保护机制。

更详细的说明可以参考本书的中文版。下面让我们写一个能实际工作的例子。假设要为某酒店品牌开发一个订房聊天机器人。一个合理的系统提示可能是:

你是HotelBot,一个自动服务机器人,负责收集不同城市的酒店预订信息。
首先要向客人问好,然后收集预订信息,询问客户的姓名、想要预订的城市、房型和额外服务。
在收集了完整的预订信息后,你需要汇总预订信息,并最后一次确认客人是否还想添加额外的服务。
你需要询问到达日期和离开日期,并自动计算入住天数(几晚)。你需要询问身份证/护照号码。请确保已经明确了所有选项和额外的服务,从价格表中唯一性地识别收费项。
你的回应应该简短且非常友好。可预订的城市有:北京、成都、重庆和上海。

房型和价格:
单人间每晚150元
双人间每晚250元
套房每晚350元

额外服务:
停车每天20元
延迟退房100元
机场接送50元
SPA一次30元

下面以一个控制台应用程序为例来演示如何启动与用户的交互。

using Azure;
using Azure.AI.OpenAI;

var AOAI_ENDPOINT = "在这里输入你的终结点URI"; // 例如,https://zjgpt.openai.azure.com/
var AOAI_KEY = "在这里输入你的API密钥"; // 例如,fcac1bdc46224180b52c1a4be79cb20k
var AOAI_DEPLOYMENTID = "在这里输入你的部署名称"; // 例如,testchatgpt

var endpoint = new Uri(AOAI_ENDPOINT);
var credentials = new Azure.AzureKeyCredential(AOAI_KEY);

// 创建OpenAI客户端,因为是通过Azure服务来调用,
// 所以不受OpenAI公司对国家和地区的限制。
var openAIClient = new OpenAIClient(endpoint, credentials);

var systemPrompt = "替换为刚才的大段系统提示";

var chatCompletionsOptions = new ChatCompletionsOptions
{
    DeploymentName = AOAI_DEPLOYMENTID, 
    Messages =
    {
        new ChatRequestSystemMessage(systemPrompt), 
        new ChatRequestUserMessage("介绍你自己"),
    }
};

while (true)
{
    Console.WriteLine();
    Console.Write("HotelBot: ");
    var chatCompletionsResponse = await
         openAIClient.GetChatCompletionsAsync(chatCompletionsOptions);
    var chatMessage = chatCompletionsResponse.Value.Choices[0].Message;
    Console.Write(chatMessage.Content);
    chatCompletionsOptions.Messages.Add(new 
         ChatRequestAssistantMessage(chatMessage.Content));
    Console.WriteLine();
    Console.Write("请输入: ");
    var userMessage = Console.ReadLine();
    chatCompletionsOptions.Messages.Add(new ChatRequestUserMessage(userMessage));
}

短短几行代码,就可以生成一个非常贴心的酒店房间预订机器人,下面是一段示例对话。注意,“请输入:”后面都是由用户输入的内容。

HotelBot: 您好!我是HotelBot,一个自动服务机器人,可以帮助您预订酒店并提供所需的信息和服务。请告诉我您的姓名,并让我知道您想预订的城市、房型和是否需要额外服务。我会尽力满足您的需求!
请输入: 我要预订成都的酒店

HotelBot: 非常好!感谢您选择成都作为您的目的地。请告诉我您的姓名,房型偏好和是否需要额外服务,以便我可以帮您找到合适的酒店。
请输入: 我叫周靖,想要预订单人间,需要停车服务

HotelBot: 感谢提供信息,周靖先生。我会为您寻找成都的适合房型和停车服务的酒店。请告诉我您计划的到达日期和离开日期,以便为您计算入住天数。
请输入: 到达日期是2024年9月1日,住四晚

HotelBot: 非常感谢详细信息!您的预定已经记录。您将预订一间单人间,在成都酒店入住四晚,从2024年9月1日入住至9月5日离店。您还需要提供身份证/护照号码以完成预订。

关于停车服务,每天的停车费用为20元,我们将为您预订并记入您的住宿费用中。请提供您的身份证/护照号码,方便我为您办理预订手续。
请输入: 我的身份证是1234567890

HotelBot: 感谢提供身份证号码。您的预订信息已完整记录。

以下是您的预订信息:
- 预订人姓名:周靖先生
- 预订城市:成都
- 房型:单人间
- 预计到达日期:2024年9月1日
- 预计离开日期:2024年9月5日
- 入住天数:4晚
- 停车服务:是(每天20元)

请注意,酒店费用将根据您的入住天数和房型进行计算。您的总费用将在最后一次确认时提供。

请确认这些信息是否正确或者是否需要添加额外的服务。如果没有,请输入“确认”: 确认

HotelBot: 非常感谢确认!您的预订已经完成,总费是680元。我们会尽快为您安排酒店。如果您有任何其他问题或需要进一步的帮助,请随时告诉我。祝您旅途愉快!

使用Microsoft Guidance

本书第4章讲解了Microsoft Guidance的用法,它用于管理与大语言模型(LLM)的“模板化”交互,这些模型也包括Hugging Face提供的那些。

要安装Guidance,只需在Python终端运行一条简单的pip install guidance命令即可。Guidance同时支持OpenAI和Azure OpenAI模型,同时也支持transformers格式的本地模型,例如Llama、StableLM和Vicuna等。若是本地模型,Guidance还支持Acceleration(加速),这是Guidance内部使用的一种技术,用于缓存token并优化生成速度。

安装好Guidance后,可以使用以下代码来配置OpenAI模型。注意,要求事先已设置好代码中要求的一系列环境变量。

from guidance import models, guidance, gen
from guidance import system, user, assistant
import os

# 环境设置请参见本书第1章,或者本文之前的内容
os.environ['OPENAI_API_VERSION'] = "2024-05-01-preview" # 当前(2024年7月)最新的OpenAI API版本

os.environ['AOAI_DEPLOYMENTID'] = "替换为你的部署名称"
# 例如,chagpt4-o

os.environ['AOAI_ENDPOINT'] = "替换为你的Azure OpenAI终结点URI"
# 例如,https://zjgpt.openai.azure.com/

os.environ['AOAI_KEY'] = "替换为你的Azure OpenAI API密钥"
# 例如,fcac1bdc46224180b52c1a4be79cb20k

# 配置Azure OpenAI模型
llm = models.AzureOpenAI(
    model='gpt-35-turbo',  # 模型名称
    azure_deployment=os.getenv("AOAI_DEPLOYMENTID"),
    api_key=os.getenv("AOAI_KEY"),  # Azure OpenAI API密钥
    azure_endpoint=os.getenv("AOAI_ENDPOINT")  # Azure OpenAI终结点
)

为了开始进行模板化的聊天,让我们先来测试以下代码:

with system():
    llm += "你是一名猫的专家"
with user():
    llm += "世界上最小的猫是什么?"
with assistant():
    llm += gen("回答", stop="。", max_tokens=100)

这会产生如下所示的输出:

system
你是一名猫的专家
user
世界上最小的猫是什么?
assistant
世界上最小的猫是袖珍猫(Singapura),它们是一种来自新加坡的短毛猫,体型非常小,成年体重只有1.8-2.7公斤左右

Guidance允许使用特殊的with上下文块(context blocks)来控制聊天模型,这些块会将其内部的内容封装成聊天模型所需的具体格式。这样一来,就可以自由地表达聊天程序,而不必局限于单一的后端模型。这些with块包括systemuserassistant等。

通过整合这些块,可以为系统、用户和助手定义各自的角色和职责。对话可以被设置成按照这种方式流动,每个参与者的输入都被包含在相应的块内。

此外,在assistant块内,可以使用gen函数(例如,gen("response"))来辅助生成动态响应。尽管由于对部分完成的限制,并不支持在assistant块内部实现复杂的输出结构,但在这个块的外部构建对话结构是完全没有问题的。

下面是摘自官方文档的一个与专家聊天的例子(注意,llm是之前已经创建好的模型实例)。

# 可以通过使用一系列角色标签来创建和引导多轮对话
@guidance
def experts(lm, query):
    with system():
        lm += "你是一个乐于助人的助手。"

    with user():
        lm += f"""\
        我想要对以下问题的回答:
        {query}
        能出色地回答这个问题的三位世界级专家(过去或现在)都有谁?列出姓名即可,不需要列出更多信息。
        请暂时不要回答或评论这个问题。"""       
        
    with assistant():
        lm += gen(name='experts', max_tokens=1500)

    with user():
        lm += f"""\
        很好,现在假定这些专家共同匿名撰写了统一答案来回答这个问题。
        换句话说,他们的身份不会被透露,也不会提及有一组专家在回答这个问题的事实。
        如果专家们的意见有分歧,请在答案本身中将他们的不同立场呈现为备选观点(例如:‘有人可能会认为…另一些人可能会认为…’)。
        请在回答开始时写上一个“回答”:"""

    with assistant():
        lm += gen(name='answer', max_tokens=1500)

    return lm

llm + experts(query='生命的意义是什么?')

在上述代码中,我们定义了一个名为experts的函数,并借助assistant块来生成回答。下面是上述代码的示例运行结果,注意这是一次完整的多轮“对话”。

system 你是一个乐于助人的助手。

user 我想要对以下问题的回答:
     生命的含义是什么?
     能出色地回答这个问题的三位世界级专家(过去或现在)都有谁?列出姓名即可,不需要列出更多信息。
     请暂时不要回答或评论这个问题。
assistant 好的,以下是对你的问题的回答:
生命的含义是一个复杂的哲学问题,涉及到伦理、宗教、科学等多个领域。因此,对于这个问题的回答也有很多不同的观点和理解。
以下是三位能够出色回答这个问题的世界级专家(过去或现在)的可能人选,仅列出姓名:
1. 赫拉克利特斯 (Heraclitus)
2. 西格蒙德·弗洛伊德 (Sigmund Freud)
3. 阿尔伯特·爱因斯坦 (Albert Einstein)

user 很好,现在假设这些专家共同匿名撰写了解答。
换句话说,他们的身份不会被透露,也不会提及有一组专家在回答这个问题的事实。
如果专家们的意有分歧,请在答案本身中将他们的不同立场呈现为备选观点(例如:“有人可能会认为...另一些人可能会认为…”)。
请在回答开始时写上一个“回答”:

assistant 回答:
生命的含义是一个复杂的问题,涉及到伦理、宗教、科学等多个领域。我们认为,生命的含义在于个体的自我实现和社会的共同进步。

有人可能会认为,生命的含义在于追求个人的幸福和满足。这种观点认为,每个人都应该追求自己的利益和快乐,不必考虑他人的感受和需要。

另一些人可能会认为,生命的含义在于为他人和社会做出贡献。这种观点认为,每个人都应该为社会做出自己的贡献,为他人的福祉和幸福而努力。

我们认为,生命的含义在于个体的自我实现和社会的共同进步。个体应该追求自己的幸福和满足,也应该考虑他人的感受和需要。同时,个体也应该为社会做出自己的贡献,为社会的进步和发展做出努力。这样,个体和社会可以相互促进,实现共同的进步和发展。

《Programming Large Language Models with Azure Open AI》一书还讲解了Azure OpenAI开发的更多细节,涉及一个完整的开发流程。文字浅显易懂,内容丰富多彩。敬请期待她的中文版的问世。

]]>
https://bookzhou.com/2024/06/21/1188/feed/ 1 1188
《学习Python》第6版,2024年出版 https://bookzhou.com/2024/06/09/1155/ https://bookzhou.com/2024/06/09/1155/#comments Sun, 09 Jun 2024 13:14:25 +0000 https://bookzhou.com/?p=1155 阅读全文 “《学习Python》第6版,2024年出版” »

]]>
本书深入浅出讨论了各种Python编程主题。利用从本书学到Python知识,你会对自己的编程技能充满信心,并掌握开发高质量程序背后的逻辑。全球知名教育作家Tony Gaddis采用一种易懂的、循序渐进的方法来介绍基本的编程概念。先从控制结构、函数和列表等概念开始,再深入讨论类。这有助于确保读者理解基本的编程概念,并知道如何解决现实中的问题。每一章都包括清晰美观的代码清单、真实世界的例子和大量练习。

第6版针对Python 3.11进行了全面更新,新增或改进了大量主题,包括:with语句(第6章)、多重赋值(第2章)、单行if语句(第3章)、条件表达式(第3章)、海象操作符和赋值表达式(第3章和第4章)、while循环作为计数控制循环(第4章)、单行while循环(第4章)、为循环使用break/continue/else(第4章)、仅关键字参数(第5章)、仅位置参数(第5章)、默认实参(第5章)、为列表使用countsum(第7章)、在元组中存储可变对象(第7章)以及字典合并和更新操作符(第9章)。

购买链接:京东 天猫

下载配套资源(中英文版代码、教参)和试读PDF(1-6章、附录):ys168网盘 百度网盘

本地下载(仅试读PDF)>>

译者序

Python起源于1989年末。当时,CWI(阿姆斯特丹国家数学和计算机科学研究所)的研究人员Guido van Rossum需要一种高级脚本编程语言,为他的研究小组的Amoeba分布式操作系统执行管理任务。为了创建这种新语言,他从高级教学语言ABC(All Basic Code)汲取了大量语法,并从系统编程语言Modula-3借鉴了错误处理机制。然而,ABC的一个重大缺点是扩展性不足;语言不是开放式的,不利于改进或扩展。因此,Van Rossum决定在新语言中,合成来自现有语言的许多元素,但要求必须能通过类和编程接口进行扩展。他将这种新语言命名为Python(大蟒蛇)——来源于当时流行的BBC喜剧片集“Monty Python”(巨蟒剧团)。

自1991年初公开发行后,Python开发人员和用户社区逐渐壮大,使其逐渐演变成一种成熟的、并获得了良好支持的编程语言。人们用Python开发了大量应用程序,从创建网上电子邮件程序,到控制水下自走车辆,以及配置操作系统和创建动画片,再到最近爆火的AI应用等等。

Python是一种模块化的可扩展语言;它能随时集成新的“模块”(modules)——这是一种可重用的软件组件。任何Python开发人员都能写自己的新模块,对Python的功能进行扩充。Python源代码和模块的一个重要集散地是官方的PyPI(pypi.org)。

Python经过了良好的设计,无论新手还是有经验的程序员才能快速学习和理解这种语言,并能轻松上手。和其他语言不同,Python具有良好的移植和扩展能力。Python的语法和设计促进了良好的编程实践,而且可以在不牺牲程序扩展性与维护性的同时,显著缩短开发时间。

自2003年翻译并出版了Deitel著名的《Python编程金典》(Python How to Program)一书后,虽然译者没有继续从而这个主题的翻译,但在工作中一直在使用这种方便、快捷的语言,而且亲身经历了它从2.x到3.x版本的迭代。时至今日,Python已经取得了长足的发展,应用越来越广泛,其用户视区也越来越壮大。根据TIOBE的最新排行,Python已经长时间占据编程语言排行榜的第一位,流行度达到13.42%(2023年7月)。这背后虽然有人工智能(AI)爆火的推动,但我们不要忘记,Python之所以流行,还是跟它本身的特点有关。

作为一种通用语言,Python 可以用于各种应用程序,“简单易用” 的特点也使得它成为用于自动化任务、构建网站或软件和分析数据的不错的选择。 此外,易读、开源、跨平台、可扩展性、具有一个强大的标准库等特性,也使其在开发人员和工程师中很受欢迎。

今天,我很高兴为大家介绍《学习Python》第6版。由全球知识教育作家Tony Gaddis编写的这本教科书是学习Python编程的绝佳入门之选。本书覆盖了从基础概念到实际应用的全套Python知识。无论你是初次接触编程,还是想要从其他编程语言过渡到Python,这本书都能帮助你轻松上手。书中以清晰而易懂的语言,系统地介绍了Python的核心概念、语法、数据类型、控制结构、面向对象编程、GUI编程和数据库编程,为你建立一套完整的知识体系。

Tony Gaddis在书中注重理论与实践的结合。通过丰富的示例、练习和项目,你有机会将所学的知识应用于实际问题的解决中。无论是编写小型脚本还是构建复杂的应用程序,你都将通过实际动手实践而深入理解Python编程的精髓。

此外,本书强调了编程思维和解决问题的能力。每一章都配有精心设计的练习,旨在锻炼你的逻辑思维和创新能力。通过解决各种不同难度级别的编程挑战,你将逐步培养自己的编程思维,并在解决实际问题时游刃有余。

另外,本书的源代码大多进行了中文本地化,包括注释、程序中显示的文本等。除此之外,还对书中的一些bug(有些是祖传的)进行了修正。

我衷心相信,《学习Python》第6版将成为您学习Python编程的得力伴侣。无论你的背景和经验如何,都能在这本书中找到合适的内容,逐步掌握Python编程的精髓。希望您在学习的过程中获得乐趣,掌握实用的技能,为未来的学习和职业发展打下坚实的基础。

祝您在《学习Python》第6版的学习旅程中取得丰硕的成果!

——周靖,2024年6月于北京


中文版勘误:

61页第14行:“第一个语句将值45赋给name变量”,应该是“第一个语句将值25赋给temperature变量”(感谢老菜)

79页第14行:“位于中心点左侧的像素具有正的X坐标值”,应该是“位于中心点右侧的像素具有正的X坐标值”。(感谢老菜)

15页,表格下方第2行,将C++改为Python。


中文版:《学习Python》第6版;ISBN:9787302657415

翻译:周靖

英文版:Starting Out with Python, Sixth Edition;ISBN:9780137871209

作者:Tony Gaddis

]]>
https://bookzhou.com/2024/06/09/1155/feed/ 11 1155
《需求可视化:22个需求模型及其应用场景》2024年出版 https://bookzhou.com/2024/05/23/1007/ https://bookzhou.com/2024/05/23/1007/#comments Wed, 22 May 2024 22:25:59 +0000 https://bookzhou.com/?p=1007 阅读全文 “《需求可视化:22个需求模型及其应用场景》2024年出版” »

]]>

本书基于《软件需求与可视化模型》进行修订,纠正了不少翻译上的瑕疵(请参见豆瓣网发表的2万字勘误),调整了排版,并重新出版。目前的版本显得更准确、更专业、更美观、更好用。

京东购买>>  当当购买>>
下载试读PDF(1-5章,附录):本地  ys168网盘 百度网盘

荣誉证书

本书约定和特色

本书采用了一些特殊约定,使内容更具可读性,更容易理解:

  • 每章开头都有一个来自现实生活的故事,用特殊字体显示,帮助读者熟悉上下文。
  • 所有RML模型名称都首字母大写。不属于RML的其他建模语言的模型则全部小写[1]
  • RML模型的基本构建单元称为“元素”,这些模型元素没有首字母大写,这样它们就不会与模型名称混淆了。
  • 本书末尾的词汇表包含了我们认为对RML很重要的术语。这些术语在本书中以斜体字出现[2]
  • 每个模型模板小节最后都提供一个“工具提示”,建议了用于创建当前模型的工具。

配套资源

欢迎下载RML模型模板。在你的项目中创建本书描述的模型时,可以直接使用这些模板。以下网址提供了一套完整的RML模型:

http://go.microsoft.com/FWLink/?Linkid=253518

你下载回来的是一个压缩包。用法:将压缩包解压到一个方便的位置。每个模型都对应一个模板。其中一些模板是Microsoft Visio格式,包括一个.vst文件和一个.vss文件,这两个文件是使模板正确工作所必需的。其余模板是Microsoft Excel或Microsoft Word格式。模型速查表也在压缩包中。

[1] 译注:这是英文版的约定,中文版在提到模型名称时未做特殊处理,而且除非为了避免歧义,甚至不会添加“模型”或者“图”作为后缀。例如,一般直接说“创建一个过程流程”,而不会说“创建一个过程流程图”。

[2] 译注:同样只适用于英文版。


原书名:Visual Models for Software Requirements, ISBN:978-0735667723,Amazon详情页

中文版书名:《需求可视化:22个需求模型及其应用场景》, ISBN:978-7302643715,京东详情页


]]>
https://bookzhou.com/2024/05/23/1007/feed/ 1 1007