HOPL4 笔记 1-5

HOPL 是 History of Programming Languages(编程语言历史)的缩写,是 ACM 旗下的一个会议,约每十五年举办一次。
这是我父的第三篇 HOPL 论文,发表于 2021 年。中文译本 出自 Boolan 之手,不胜感激。

1. 前言

有一种流传广泛的谬见,就是程序员希望他们的语言是简单的。 当你不得不学习一门新的语言、不得不设计一门编程课程、或是在学术论文中描述一门语言时,追求简单显然是实情。 对于这样的用途,让语言干净地体现一些明确的原则是一个明显的优势,也是理想情况。 当开发人员的焦点从学习转移到交付和维护重要的应用程序时,他们的需求从简单转移到全面的支持、稳定性(兼容性)和熟悉度。人们总是混淆熟悉度和简单,如果可以选择的话,他们更倾向于熟悉度而不是简单。

这也是我在前有 C 后有 Rust 的情况下继续跟踪并学习 C++ 新标准的原因:已经上了贼船了,没办法。

阅读更多

Webpack 打包 React 组件

之前 通过直接运行 babel 相关命令,把 jsx 语法做了预处理。但输出远远达不到 create-react-app 的水平。 Google 了一圈发现,原来可以通过 webpack 把 jsx 预处理、js 压缩、js 打包几个步骤一次性执行。

初始化 Webpack Config

安装 webpack:

1
npm i webpack webpack-cli
阅读更多

Videojs 全屏时显示弹幕和发送框

因为实现方式比较不规范,会深入 Video.js 内部 dom 进行操作,不确定是否适用其它版本。

全屏弹幕

我使用 vjs 的姿势是这样的:

1
2
3
<div id="danmaku-container" ref={danmakuContainerRef} divdata-vjs-player>
<video ref={videoRef} className="video-js vjs-big-play-centered" />
</div>
阅读更多

智能家居实施状况汇总

12 月 11 号那天把宽带移到了新家,终于可以将我的智能家居想法正式实施了。

网络布线

弱电箱在玄关鞋柜里边,我把电信光猫改了桥接直接放弱电箱里了。中海预先布了 5 条线,两条六类,三条超五类,都可以支持千兆,省了从弱电箱到客厅重新布线的麻烦。

但是书房居然没有布线。这就很麻烦,因为我的台式机、NAS 等一些常用的有线设备肯定要放书房的啊。300M 的宽带从客厅跨过三道墙进入书房后,实测无线网的网速只剩下将将 100M 了。拿另一台路由器做无线 Mesh,发现不管放哪儿,网速甚至都提不到 200M。

阅读更多

2022年我的方向和目标明确了

知新…

不出意外的话,这大概是我 2022 年甚至以后很多年里的努力方向。我把今年中大部分的业余时间都付诸于这些新知识的学习和实践上,并从中再一次感受到了学习的乐趣。

系统学习 React.js/Javascript

阅读更多

React + Jsx 多页面配置

  1. 多页面用不到 create-react-app,项目结构需要手动配置。
  2. Jsx 不能带到生产环境去,会导致每次加载 js 文件时都要做语法转换,所以需要用 babel 预处理。

项目根目录下,创建 package.json:

1
npm init -y

把 html 文件放在 src 目录下,js 文件放在 src/js 目录下。html 中引入对应的 js:

1
<script src="/js/index.js"></script>

不要加 type=”text/babel”,路径其实对应的是预处理后的、被转换的 js 文件。

https://reactjs.org/docs/add-react-to-a-website.html

阅读更多

理解 MP4 moov atom

在上一篇关于 Html5 流播放器 的文章中提到,边下载边播放这个功能需要媒体文件的支持。为了能进一步理解这句话的意思,查阅了一些相关资料,整理成文。

MP4 moov atom

atom 是 MP4 文件里的一个数据单元,它可以包含关于视频文件的各种信息。

moov atom,即 movie atom,定义了 timescale、duration 以及其它子 atom 信息。

可以想见,若要在视频文件未能被完整下载前即开始播放,并能跳转到指定位置,肯定要首先获知其 moov atom 信息。这也是 moov atom 存在的意义。

阅读更多

React + Videojs + Sanic 打造简易流播放器

Html5 的 <video /> 只能在整个视频文件加载完成后才能播放,体验极其不好。如果仅是支持基于 Http(s) 的流媒体播放的话,可以直接利用 Http 协议的 Content-Range 头。

所以本文的核心思想是使 Sanic 后端能正确处理 Videojs 发送的 byte-range 请求,并回以带 Content-Range 的文件流响应即可。

阅读更多

C++17 详解 24 —并行 STL 算法

本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。

翻译太特么累人了……剩余部分还是只做摘要翻译吧。

13. 并行 STL 算法

13.1 介绍

不止线程

除使用多线程外,还可以通过 CPU 或 GPU 的向量指令集进行加速。

CPU 中此类方法统称 SIMD — Single Instruction Multiple Data,即单指令多数据。常见的实现有 AVX256、AVX512、NEON。

GPU 中并行计算更碎片化,大多是跟硬件绑定,比如 NVIDIA 的 CUDA,Intel 的 TBB。也存在一些硬件无关的并行库,比如 OPENCL、OPENGL、OPENMP。

C++17 在这个方向上迈出了一小步:它解锁了标准库中算法的自动向量化/自动并行化。

阅读更多