转载-节选-科技爱好者周刊节选(169期)
科技爱好者周刊节选(169期)-五菱汽车的产品设计前言本文节选自阮一峰老师的《科技爱好者周刊》第169期。
《周刊》链接:科技爱好者周刊169期
正文科技动态 部分:
闪烁灯光的代码
有人发现,2020年发布的游戏 Alyx,里面地下室的闪烁灯光,跟1998年发售的《半条命》是一样的,说明它们使用的是同样的代码。大家仔细看下面的游戏视频,两者闪烁灯光的模式和频率完全一样。
它的代码实现,是使用一个字符串mmamammmmmammamamaaamammma表示灯光亮度变化的顺序,a 表示暗,m 表示亮。这个技巧最早是1996年 John Carmack 在雷神之锤(Quake)里使用的。
沼气摩托车
一个荷兰艺术家将一辆二手摩托车,改建成使用沼气(主要成分甲烷)作为燃料。摩托车的尾部挂了一个大瓶子,用来存储沼气。
加气时,需要使用一个特殊装置,到池塘和沟渠去收集有机物质分解或腐烂所释放的甲烷。
收集8个小时的沼气,可以行驶20公里。这个项目的主要目的,是为了提醒公众环境保护。
这… 可以的 😎 佩服
文章 部分:
3D 打印的汽车配件
福特公司在美国新发布的 Ma ...
转载-节选-科技爱好者周刊节选(168期)
科技爱好者周刊节选(168期)前言本文是《科技爱好者周刊》(以下简称《周刊》)节选的第一篇,节选自《周刊》第168期。
最近看到阮一峰老师的网络日志科技周刊,发现里面有很多有意思的东西,节选一些自己感觉好玩的、有意思的一些内容到本文。
《周刊》链接:科技爱好者周刊168期
正文在第一部分 游戏:《底特律:变人》 这一节中有一段话让我很喜欢:
这个游戏是一个最好的例子,说明了 电子游戏这种东西,不仅仅是娱乐和生意,而是一个很宽泛的载体,只要你想,就有办法让它承载各种不同的东西。 完全可以让它像小说一样,用来表达作者的爱憎和抒情,或者像哲学家一样,引发人们对社会和命运的思索。
随着年龄的增长,玩游戏的目的也悄然发生着变化。我们希望游戏可以带给我们除了娱乐、刺激之外一些不一样的东西。不要对抗、不要有排名、输赢,只要跟着游戏的情结去体验不一样的人生,去认识游戏中的世界,这也别有一番滋味在其中。
第二部分 科技动态 中有几个事情让我印象深刻:
时速600公里的磁浮列车
7月20日,四方机车公司在青岛发布世界首辆时速600公里的磁悬浮列车。一旦投入应用,这将是当前世界速度最快的地面交通工具 ...
JS 图片压缩
JS 图片压缩背景文章转载于了解JS压缩图片,这一篇就够了。跟着文章的思路梳理了一下图片压缩的方法,以及Image对象、data URL、Canvas和 File (Blob)之间的转化关系。对文章作者wuwhs表示感谢。
本文代码github地址:
下面正文开始。
前言公司的移动端业务需要在用户上传图片是由前端压缩图片大小,再上传到服务器,这样可以减少移动端上行流量,减少用户上传等待时长,优化用户体验。
JavaScript 操作压缩图片原理不难,已有成熟 API,然而在实际输出压缩后结果却总有意外,有些图片竟会越压缩越大,加之终端(手机)类型众多,有些手机压缩图片甚至变黑。
所以本文将试图解决如下问题
弄清楚Image对象、data URL、Canvas和File(Blob)之间的转化关系
图片压缩的关键
超大图片压缩黑屏问题
转化关系在实际应用中有可能使用的情境:大多时候我们直接读取用户上传的 File 对象,读写到画布(canvas)上,利用 Canvas 的 API 进行压缩,完成压缩之后再转成 File(Blob) 对象,上传到远程图片服务器;不妨有时候我们也需要 ...
How JavaScript works - Event loop and the rise of Async programming + 5 ways to better coding with async/await
How JavaScript works - Event loop and the rise of Async programming + 5 ways to better coding with async/await
Javascript工作原理:事件循环及异步编程的出现 + 5种更好的async/await编程方式
This time we’ll expand on our first post by reviewing the drawbacks to programming in a single-threaded environment and how to overcome them using the Event Loop and async/await in order to build stunning JavaScript UIs. As the tradition goes, at the end of the article we’ll share 5 tips on how to write cleaner code with async/await.
...
堆和栈的区别
堆和栈的区别堆栈和堆之间的差异可能会让许多人感到困惑。所以,我认为整理一个关于堆栈问题和答案列表会非常有用。
堆和栈存储在哪里?它们都存储在计算机的 RAM(随机存取存储器)中。
为什么要区分堆和栈?之所以要区分堆和栈,是由于程序需要两种不同特性的内存形式而确定的。在C++中,新建一个对象有两种方式,静态分配和动态分配。
静态分配:
一般来说,静态分配用于初始化已知对象大小的时候,比如int a[10];如果我们能够确定这个数组是10个,我们可以使用这种方式。这种方式所需要的内存在编译期间即可确定,因此操作系统便可以预先确定所指定大小内存给变量,并且可以在变量生命周期结束后自动释放。
动态分配:
然而在某些场景下,可能需要根据某些情况来申请内存,比如int* a =new int[count];而变量count可能就来自于某个配置文件或者用户手动输入的值。这个时候操作系统就无法再预先确定内存大小,并且不执行到new int[count]这一行代码的时候,是无法知道所要分配的内存大小,因此操作系统分出一块内存,用来进行动态分配。并且规定,动态分配的内存需要由程序员自行管理。
之前的文章 ...
How JavaScript works - memory management + how to handle 4 common memory leaks
How JavaScript works: memory management + how to handle 4 common memory leaks
JavaScript工作原理:内存泄露 + 如何处理4中常见的内存泄露
Overview
概览
Languages, like C, have low-level memory management primitives such as malloc() and free(). These primitives are used by the developer to explicitly allocate and free memory from and to the operating system.
像C这样的语言,拥有底层内存管理原语,例如 malloc() 和 free()。开发人员使用这些原语显式地分配和释放操作系统中的内存。
关于原语定义可参考原语-百度百科和什么是『原语』?
At the same time, JavaScript allocates memory when things (objects ...
交换机和路由器的区别
交换机和路由器的区别交换机在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。若目的MAC不存在,交换机就广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加到内部地址表中。
交换机工作在OSI模型的数据链路层上。交换机内部的CPU在每个端口成功连接时,通过ARP协议来学习各端口的MAC地址,保存成一张ARP表。在以后的通信中,发往该MAC地址的数据包将仅仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域,但它不能划分网络层广播,即广播域。
交换机被广泛应用于二层网络交换,俗称“二层交换机”。交换机的种类有:二层交换机、三层交换机、四层交换机、七层交换机,分别工作在OSI模型的第二层、第三层、第四层和第七层。
路由器路由器是一种计算机网络设备,提供了路由与转发两种重要机制,可以决定数据包来源端 ...
去哪吃
去哪吃背景看到这个题目,你也许会想『啥意思,什么去哪吃,想去哪吃去哪吃呗』。说得好,关键是不知道去哪吃,纠结啊。于是,就想着可不可以搞一个每天定时告诉我去哪吃的小脚本,定时发个邮件告诉我去哪吃,距离、价格最好也能一并告诉我。正所谓:『行胜于言』,搞起:rofl:
其实这篇文章没啥技术含量,就是挺好玩的。:stuck_out_tongue:
准备工作
axios:请求库
nodemailer:用于发送邮件
1234mkdir getCatingcd getCantingnpm init --yesnpm i axios nodemailer
获取周边餐馆:v:检索周边地点主要是调用了百度地图的Web服务API。
可参考地点检索服务服务文档。
原型区域检索API(GET请求):http://api.map.baidu.com/place/v2/search?query=银行&location=39.915,116.404&radius=2000&output=xml&ak=您的密钥。具体的请求参数也可参考地点检索服务服务文档。
这个query参数里面 ...
Concurrency vs. Parallelism
Concurrency vs. Parallelism
并发 vs. 并行
Concurrency means multiple tasks which start, run, and complete in overlapping time periods, in no specific order. Parallelism is when multiple tasks OR several part of a unique task literally run at the same time, e.g. on a multi-core processor. Remember that Concurrency and parallelism are NOT the same thing.
并发是指多个任务,它们在重叠的时间段内(没有特定的顺序)开始,运行和完成。 并行是指多个任务或唯一任务的多个部分同时运行的情况,例如,在多核处理器上。 请记住,并发和并行性不是一回事。
Let’s understand more in detail that what I mean when ...
博客优化二三事
博客优化二三事前言交代一下背景,这个博客是最开始是基于jekyll搭建的github page,但是由于一些原因(主要是jekyll的主题觉得不好看), 寻寻觅觅,终于找到一个喜欢的主题,是基于Vuepress的,主题用的是vuepress-theme-modern-blog,于是就把博客迁移到基于Vuepress的github page。具体的迁移过程不复杂,个人的.vuepress/config.js可参考这里,在这篇文章就不再赘述。这篇文章主要打算记录一下迁移到Vuepress之后的一些问题的解决方法。
评论系统迁移文章其实比较简单,因为都是一些markdown文件,也没什么需要改的。但是原来的评论系统不能用啦,vuepress-theme-modern-blog给出了一个评论系统disqus,但是这个评论系统在国内由于防火墙的原因支持的不太好。于是发现了Vssue评论系统,经过咔咔一顿配置(主要是github的access token等),在一个md文件的最后添加<Vssue :title="$title" />一测试可以用,开心啊。但是接着问题 ...