CSDN开发者周刊第 20 期:Google 下一代操作系统 Fuchsia 源码正式公开;AI 消除马赛克 效果惊人

CSDN开发者周刊第 20 期:Google 下一代操作系统 Fuchsia 源码正式公开;AI 消除马赛克 效果惊人_第1张图片

CSDN开发者周刊:只为传递“有趣/有用”的开发者内容,点击 Star(CodeChina)!

本周热门项目

1、红帽停止维护 CentOS 8,创始人另起炉灶

12 月 8 日,CentOS 开发团队在官博宣布,CentOS 8 将在 2021 年底结束支持,CentOS 7 由于用户基数与用户贡献较多,因此会按照计划维护至生命周期结束即 2024 年 6 月 30 日,接下来一年会把重心放到 CentOS Stream 上。

红帽赞助 CentOS Linux 和 CentOS Stream 的时间表:

  • 不会有 CentOS Linux 9。
  • CentOS Linux 8 发行版的更新将持续到 2021 年12 月 31 日。
  • CentOS Linux 7 发行版的更新与之前一样,一直持续到 2024 年 6 月 30 日。
  • CentOS Linux 6 发行版的已于 2020 年 11 月 30 日结束。
  • 作为 RHEL 9 开发过程的一部分,CentOS Stream 9 将于 2021 年第二季度发布。
  • CentOS Stream 8 发行版的更新将贯穿整个 RHEL 支持阶段。

停止维护消息一出,便引发广大开发者的强烈不满,对此,CentOS 创始人 Gregory Kurtzer 在Github 上发起新项目 Rocky Linux(https://github.com/rocky-linux/rocky),并且他还表示:由于CentOS 已改变方向,Rocky Linux是一个社区企业操作系统,旨在与 Red Hat Enterprise Linux 100%兼容,并在号召广大开发者参与贡献。

2、AI 消除马赛克 效果惊人,Github 星标 9000+

像素化(类似于马赛克)被许多领域用来加密图像中的重要信息, 例如很多公司会将内部文档中的密码像素化以加密数据,但之后并没有工具来恢复被像素化的图像。

对此,GitHub上的一个开发者创建了一个工具 Depix(https://github.com/beurtschipper/Depix),适用于使用线性方框滤波器创建的像素化图像,可从像素化屏幕快照中恢复密码,测试效果如下:

CSDN开发者周刊第 20 期:Google 下一代操作系统 Fuchsia 源码正式公开;AI 消除马赛克 效果惊人_第2张图片

3、宋太祖最像陈建斌,AI 还原宋代皇帝,原来这么帅?!

近日,一条“人工智能还原的宋代皇帝”喜提热搜,博主大谷借助人工智能技术修复了一段 3 分多钟的宋代皇帝视频,使得宋代皇帝的纸质版画像相貌动态还原,略带调皮,甚至加入了人脸识别功能,用AI 匹配了最接近的明星脸……

CSDN开发者周刊第 20 期:Google 下一代操作系统 Fuchsia 源码正式公开;AI 消除马赛克 效果惊人_第3张图片
根据 UP 主大谷的介绍,他这次使用到的脸部生成技术是 PaddleGAN 和 Artbreeder,同时用 AI Studio 生成了脸部动态。

此外,还使用了中科院研发的AI面部识别开源项目SeetaFace来制作完成明星脸匹配系统,它通过对比这些皇帝扮演者演员的脸部特征形成一个相似度排名,从而找到和历史人物最接近的明星脸。

4、被弃用的 Docker 会被 Podman 取代吗?

Kubernetes 团队近日宣布将在最新版本中弃用 Docker 支持的功能,后续版本会陆续删除这些功能。而在本周,Kubernetes 与 Docekr 双双发布了最新版本,Kubernetes 1.20 和
Docker 20.10.0 一前一后发布。

此外,弃用 Docker 之后,开发者们对其替代品的讨论逐渐热烈,其中 Containerd 和 Podman 倍受期待。

Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。它可以管理容器的生命周期,可以被 Kubernets CRI 等项目使用,并为广泛的行业合作打下基础等。

Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。直接通过 OCI runtime(默认也是 runc)来启动容器,所以容器的进程是 Podman 的子进程。这比较像 Linux 的 fork/exec 模型,而 Docker 采用的是 C/S(客户端/服务器)模型。

5、Apache基金会正式宣布新一代分布式对象存储 Ozone 成为顶级项目

12 月 9 日,Apache 基金董事会通过一致表决,正式批准分布式文件对象存储 Ozone从Hadoop 社区孵化成功,成为独立的 Apache 顶级开源项目。这意味着,作为腾讯大数据团队首个参与和主导的开源项目,Ozone 已得到全球 Apache 技术专家的一致认可,成为世界顶级的存储开源项目之一。

Ozone 是 Apache Hadoop 社区推出的面向大数据领域的新一代分布式存储系统,它的推出解决了Hadoop 分布式文件系统在可扩展性上限方面的缺陷问题,能够支持百亿甚至千亿级文件规模的存储。

6、上海购房宝典在 Github 火了

该项目记录了开源作者从买房一路收集的信息,可以说对即将买房的程序员,非常有借鉴意义。目前在GitHub上非常火。这个项目叫 hanghai_house_knowledge,由于作者是在上海。相关信息都是上海地区的房源信息。

7、编程教育将纳入中小学相关课程 已制定专门文件

12 月 9 日,教育部在给全国政协委员的答复函中称,教育部高度重视学生信息素养提升,已制定相关专门文件推动和规范编程教育发展,培养培训能够实施编程教育相关师资,将包括编程教育在内信息技术内容纳入到中小学相关课程, 帮助学生掌握信息技术基础知识与技能、增强信息意识、发展计算思维、提高数字化学习与创新能力、树立正确的信息社会价值观和责任感。

本周热闻

1、Google 下一代操作系统 Fuchsia 源码正式公开!

已经曝光了 4 年多的谷歌 Fuchsia 操作系统,终于公众开放源代码了https://fuchsia.googlesource.com/ 谷歌官方特别指出,Fuchsia 尚未准备好进行一般产品的开发,甚至将其作为开发目标。现在的 Fuchsia 主要是面向有一定技术能力的开发者。谷歌希望开发者一起来帮助构建这个操作系统的未来。

  • Fuchsia 代码仓:https://codechina.csdn.net/mirrors/google/fuchsia
  • Fuchsia 中文学习资料】:https://codechina.csdn.net/mirrors/FuchsiaOS

2、JavaScript 诞生二十五年

编程语言 JavaScript 诞生二十五年,虽然饱受批评,但 JavaScript 已成为 Web 和浏览器应用的重要组成部分。Brendan Eich 在 1995 年花了 10 天设计出了 JavaScript 原型,在它大获成功之后,微软设计出了超集 TypeScript,之后 Google 的 V8 引擎,基于 V8 的 node.js,Facebook 的 React,等等帮助 JavaScript 迅速占领了从桌面到移动的广泛平台。JavaScript 现在是世界最流行的编程语言之一。

3、Adobe 发布最后的 Flash Player 更新,官方再强烈建议立即卸载

在即将终止维护之前,官方给出了中国大陆以外所有地区的最后发布版本。Adobe 将在 2020 年 12 月 31 日之后停止支持 Flash Player,Adobe 将从 2021 年 1 月 12 日开始阻止 Flash 内容在 Flash Player 中运行;Adobe 强烈建议所有用户立即卸载 Flash Player 以保护自己的系统。
部分用户可能仍会看到 Adobe 发出的提醒,要求他们从系统中卸载 Flash Player。有关希望手动卸载 Flash Player 的用户的更多详细信息和说明链接,请访问我们的【关于 Flash Player EOL 的一般信息 】页面 。”

3、时隔 3 年,华为又有人入选 IEEE Fellow

在 2021 IEEE Fellow 名单中,再次出现了华为科学家。此前,IEEE Fellow 上已经连续2年没有出现过华为员工的身影了。如今,新一年 IEEE Fellow 名单公布,华为首席终端天线专家王汉阳上榜。这是继华为诺亚方舟实验室前主任李航、华为(加拿大)高级副总裁、5G 专家朱佩英之后,又一位科学家以「华为员工」的身份入选新晋 IEEE Fellow 。前两者分别是 2016 年、2017 年入选 Fellow 。此次入选理由是,因对移动终端天线的贡献而入选。

4、Github 推出黑暗模式

时隔 7 年,Github 终于推出了暗黑模式,开发者从此告别“亮瞎眼”模式。在本周的 GitHub Universe 大会上,官方 GitHub Dark 模式正式上线,开发者 Setting 中即可更改 GitHub 外观。
也可以在浏览器地址栏输入:github.com/settings/appearance,进行主题切换。

5、谷歌知名前 AI 研究员无辜被裁再引热议,CEO:调查!

上周,谷歌知名 AI 研究员 Timnit Gebru 发 Twitter 称,她在毫无预兆的情况下,被谷歌 AI 部门的负责人 Jeff Dean 发邮件开除了。Gebru 在推特上表达了不满和抗议,引起了 AI 界的广泛关注和支持,目前已有1400名谷歌内部员工和1900名 AI 学术圈人士对谷歌的行为表示谴责。

谷歌 CEO Sundar Pichai 在本周三就公司处理人工智能伦理研究员 Timnit Gebru 离职一事表示道歉,并表示将调查事件,努力恢复信任。

6、索要 2.3 亿元赎金!富士康遭遇黑客攻击

据外媒 BleepingComputer 报道,富士康在墨西哥的一家工厂遭受了名为 DoppelPaymer 勒索软件攻击,黑客在此之前偷窃了未加密的文件,进而在入侵之后对设备进行了加密处理。

近日, DoppelPaymer 勒索软件在其勒索软件数据泄漏站点上发布了属于富士康的文件。泄漏的数据包括常规业务文档和报告,但不包含任何财务信息或员工的个人详细信息。

DoppelPaymer 勒索软件团队在采访时证实,他们的确在 11 月 29 日袭击了富士康在北美的工厂,但并未袭击整个公司。作为此攻击的一部分,黑客声称其已加密了约 1,200 台服务器,窃取了 100 GB 的未加密文件,并删除了 20-30 TB 的备份。

DoppelPayment 透露此次攻击的范围,并表示:“我们加密了北美的服务器,并不是整个富士康,其中大约涉及到 1200-1400 台服务器,这并不单单是工作站。另外,它们还有大约 75TB 的其他项备份,我们销毁了大约 20-30 TB”。

本周社区精选

1、程序员专属游戏 Screeps:使用 JS/TS 代码控制自己的殖民地

Screeps 是一款面向编程爱好者的开源 MMO RTS 沙盒游戏,其核心机制是为您的单位编写AI。您可以通过编写 JavaScript 来控制自己的殖民地。

Screeps 的游戏模式类似红警、星际争霸、魔兽、帝国时代等,但是和这些游戏不同,你无法通过鼠标或者键盘控制你的角色,你需要编写 JavaScript 代码来控制你的单位去完成各项任务。

您的殖民地可以采集资源,建造单位,征服领土或是与其他殖民地进行贸易。您征服的土地越多,您扩展疆域的能力和在游戏世界中的影响力也就越大。但是请注意,意图控制相同区域的多个玩家可能会引发一场战争!

Steam售价:65元。我是前不久搞促销的时候半价买的。

进入游戏后选择一个资源丰富、地形不错的地图,创建自己的基地,默认名字为 Spawn1。全局对象 Game 的 spawns包含了所有的基地(母巢),因此 Game.spawns[‘Spawn1’]或者 Game.spawns.Spawn1就是我们刚才创建的基地。

使用 spawnCreep方法我们可以创建自己的第一个单位(creep) :

Game.spawns['Spawn1'].spawnCreep( [WORK, CARRY, MOVE], 'creeper1' );

上面代码创建了一个名字为 creeper1 的单位。接下来我们编写代码,让他去采集资源:

module.exports.loop = function () {
     
    var creep = Game.creeps['creeper1'];
    var sources = creep.room.find(FIND_SOURCES);
    if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE){
     
        creep.moveTo(sources[0]);
    }
}
  • Game.creeps[‘creeper1’]从全局对象 Game 的 creeps 属性中根据名字找到刚才创建的 creep(单位)

  • 从当前房间 creep.room中寻找特定建筑,我们传入的参数是 FIND_SOURCES,因此我们寻找的所有 source(资源)

  • 命令 creep 去采集所有 source 中的第 1 个 source

  • 要想采集资源,需要 creep 在资源的附近,我们需要编写代码让 creep 移动过去,然后判断两者的距离再采集。但是有个讨巧的方式,我们可以通过判断 harvest 函数的返回值来实现。如果返回了 ERR_NOT_IN_RANGE。说明 creep 距离 source 太远,此时我们就调用 creep.moveTo 方法。

  • 最后是整个程序的入口。Screeps 规定程序的入口文件是 main.js,在主文件中需要导出一个 loop 函数。这样整个过程就永不间断地执行下去。

这只是一个简单的例子,你还可以发挥自己的想象力,开发不同的算法和策略来经营自己的殖民地。

2、八年前观点重温:编程语言进入“拼爹”时代

笔者发表于8年前(2012年)的一篇文章。当时的“无心插柳”之言在 8 年后的今天居然得到了印证。如今挑选有前途的编程语言,不看爹真不行,无论是亲爹还是干爹!
以下是当时的原文全文:

  • 近期看到一则新闻,说是Microsoft推出了一门开源的编程语言叫TypeScript,该Project的主要负责人是大名鼎鼎的Anders Hejlsberg,就是那个Turbo Pascal 、Delphi以及C#之父。结合近几年来出现的颇受关注的其他几门编程语言,如Go、Rust、Dart等,让我感觉到编程语言似乎进入了"拼爹"时代。
    我们来列举一下这几门新兴语言的“老爹”(设计者):
  • Go语言 - Robert Griesemer、Rob Pike和Ken Thompson。这里最著名也最NB的当属Ken Thompson,Unix之父,并与Dennis Ritchie一起创造了最伟大的工业编程语言C,图灵奖得主。Rob Pike也是Bell Labs元老,Unix和Plan 9计划的参与者,Limbo语言的设计者之一。至于Robert Griesemer名气似乎小一些,我也不甚熟悉。不过有了前两位,想必Golang就会有足够的号召力了。
  • Rust语言 - 来自著名的 Mozilla Lab,其主要设计者包括Brendan Eich,Dave Herman以及Graydon Hoare。其中Brendan Eich是JavaScript语言之父。
  • Dart 语言 - 这门语言的最初两个设计者Lars Bak和Kasper Lund似乎并不著名,但这门语言背后有一个更大的后台,那就是在互联网搜索时代叱诧风云的Google公司。凭借着Google的号召力,围绕在这门语言周围的Fans也应该为数不少。再考虑这门语言旨在替代JavaScript成为新Html5标准下主力Web开发语言的目标,Dart受到的关注一定不少。【阅读原文】

3、Python进程、线程和协程实战指归

前些日子写过几篇关于线程和进程的文章,概要介绍了 Python 内置的线程模块(threading)和进程模块(multiprocessing)的使用方法,侧重点是线程间同步和进程间同步。随后,陆续收到了不少读者的私信,咨询进程、线程和协程的使用方法,进程、线程和协程分别适用于何种应用场景,以及混合使用进程、线程和协程的技巧。

归纳起来,核心的问题大致有以下几个:

  • 使用线程是为了并行还是加速?
  • 为什么我使用多线程之后,处理速度并没有预期的快,甚至更慢了?
  • 我应该选择多进程处理还是多线程处理?
  • 协程和线程有什么不同?
  • 什么情况下使用协程?

在进程、线程和协程的使用上,初学者之所以感到困惑,最主要的原因是对任务的理解不到位。任务是由一个进程、或者线程、或者协程独立完成的、相对独立的一系列工作组合。通常,我们会把任务写成一个函数。任务有3种类型:

  • 计算密集型任务:任务包含大量计算,CPU占用率高
  • IO密集型任务:任务包含频繁的、持续的网络IO和磁盘IO
  • 混合型任务:既有计算也有IO

也有观点认为还有一种数据密集型任务,但我认为数据密集型任务一般出现在分布式系统或异构系统上,必定伴随着计算密集和IO密集,因此,任然可以归类到混合型任务。

下面,我们就以几个实例来讲解演示进程、线程和协程的适用场景、使用方法,以及如何优化我们的代码。【阅读原文】

4、Apache Flink 1.12.0 正式发布,流批一体真正统一运行!

Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发,提交了超过 1000 多个修复或优化。这些修改极大地提高了 Flink 的可用性,并且简化(且统一)了 Flink 的整个 API 栈。其中一些比较重要的修改包括:

  • 在 DataStream API 上添加了高效的批执行模式的支持。这是批处理和流处理实现真正统一的运行时的一个重要里程碑。

  • 实现了基于 Kubernetes 的高可用性(HA)方案,作为生产环境中,ZooKeeper 方案之外的另外一种选择。

  • 扩展了 Kafka SQL connector,使其可以在 upsert 模式下工作,并且支持在 SQL DDL 中处理 connector 的 metadata。现在,时态表 Join 可以完全用 SQL 来表示,不再依赖于 Table API 了。

  • PyFlink 中添加了对于 DataStream API 的支持,将 PyFlink 扩展到了更复杂的场景,比如需要对状态或者定时器 timer 进行细粒度控制的场景。除此之外,现在原生支持将 PyFlink 作业部署到 Kubernetes上。

本文描述了所有主要的新功能、优化、以及需要特别关注的改动。【阅读原文】

5、Java 如何优雅地实现接口数据校验

本篇文章给大家分享平时开发中总结的一点小技巧!在工作中写过 Java 程序的朋友都知道,目前使用Java 开发服务最主流的方式就是通过 Spring MVC 定义一个 Controller 层接口,并将接口请求或返回参数分别定义在一个 Java 实体类中,这样 Spring MVC 在接收到 Http 请求(POST/GET)后,就会自动将请求报文自动映射成一个 Java 对象。这样的代码通常是这样写的:

@RestController
public class OrderController {
     
 
    @Autowired
    private OrderService orderServiceImpl;
 
    @PostMapping("/createOrder")
    public CreateOrderBO validationTest(@Validated CreateOrderDTO createOrderDTO) {
     
        return orderServiceImpl.createOrder(createOrderDTO);
    }
}

这样的代码相信大家并不陌生,但在后续的逻辑实现过程中却会遇到这样的问题:“在接收请求参数后如何实现报文对象数据值的合法性校验?”。一些同学也可能认为这并不是什么问题,因为具体某个参数字段是否为空、值的取值是否在约定范围、格式是否合法等等,在业务代码中校验就好了。例如可以在Service实现类中对报文格式进行各种if-else的数据校验。

从功能上说冗余的if-else代码没啥毛病,但从代码的优雅性来说冗长的if-else代码会显得非常臃肿。接下来的内容将给大家介绍一种处理此类问题的实用方法。具体将从以下几个方面进行介绍:

  • 使用@Validated注解实现Controller接口层数据直接绑定校验;

  • 扩展约束性注解实现数据取值范围的校验;

  • 更加灵活的对象数据合法性校验工具类封装;

  • 数据合法性校验结果异常统一返回处理;

  • Controller接口层数据绑定校验

往期推荐:

  • CSDN开发者周刊第19 期:GitHub 2020 年度报告 TypeScript 超越 C#、PHP 和 C++;Kubernetes 弃用 Docker!

你可能感兴趣的:(CSDN开发者周刊)