再一次冒出许多想法,想着发条朋友圈,不知不觉写了很长,一看时间,也已过去很久,想到这一大段文字最终的宿命不过是一瞬的滑过,只好让它继续留在了笔记之中,才意识到自己还有这么一个更适合写东西的地方。

虽早已对此有所认知,在忙碌的生活之中,下意识下总会再犯。反思这么做的原因,潜意识中还是渴望着与身边人的即时交流吧。

发表是最好的记忆,但在这封闭的体系之下,微信里留下的很多值得回顾交流的记忆失去了本应有的活力。在翻某人的朋友圈时,是不敢再去点赞和评论的吧。后来越来越多人打开了“三天可见”,让它成了一个记忆的无底洞。

所以也异常讨厌微信的这一点,这个把一切都抽象成作为工具的工具,掠夺了生活的绝大部分时间之后,因为界限的模糊,无形中也把那尚存无几的有点深度的思考和交流给掠夺了。

微信是微信,博客是博客,微信不过是一个所有人妥协下的促进信息流动的平台,不应该在这上面承载太多的东西。认清此中差别,也是时候把那些本属于博客的文字抢救出来了。

无意中发现和尝试了 Chrome DevTools 的 Layers 面板,Get 到了庖丁解牛的新视角。不禁感叹 Web 浏览器的巧夺天工,也从此打开了浏览器从 Layout->Paint->Composite 中的 Composite 过程的研究的大门。

Layers Panel

恰好前一天同组的妹纸问我为什么微信的 Web 开发者工具的预览页底部有白边,下意识想到微信的开发工具实际上是 NW.js 做的,自然也会有开发者工具吧,一看,果然有。

阅读全文 »

前晚在整理 0xFFFF 的帖子的时候,意外地发现这一篇文:

Web 在继续离我们远去 - 知乎

这篇文其中提到了 internet 和 Web 的概念,引用如下:

中文世界一直混淆互联网(internet)和万维网(web)。人们念兹在兹的「互联网开放精神」,实乃万维网的开放精神。万维网的开放主要就体现在一点:任何万维网上的文章之间都可以通过网址随意互相链接。如果我想在文章里介绍 UbuWeb 这个网站,我就可以直接在 UbuWeb 这六个字母上添加它的网址 ubu.com。妳或许觉得这是废话,但在微信公众号的文章里妳做不到;妳只能添加微信生态圈内的链接,比如这个:https://weixin.qq.com/cgi-bin/readtemplate?t=weixin_external_links_content_management_specification(即上述《规范》的链接)

这时候我突然反应过来,我过去其实一直没有区分清楚这里的概念的差别,World Wide Web,简称 WWW,中文“万维网”,又叫 Web,而不是 internet 这个只有物理意义的一层。加之如今移动互联网发达,许多接触网络的新人,对于网络的了解可能仅限于微信、QQ 和各种各样的 APP,已不知道 WWW 为何物。所以,我也尝试通过一些简单的语言,理一理其中涉及的概念。

阅读全文 »

宿舍有个树莓派常年开着吃灰,装了 Transmission 用来挂种子。由于挂下来的资源大部分都是视频类型,所以也不必下载下来。于是我配置了一个开了 autoindex 的 Nginx 服务器,在校园网内,直接通过一个内网的 URL 来实现资源的访问。

源网页

最近开始接触纸片人,有时候想把一个文件夹里面的剧集加到播放列表,几十个视频一个个添加显然是一件很麻烦的事情。观察发现,PotPlayer 可以批量添加 URL,所以说,我只要把所有的链接一起导出、添加就好了。

阅读全文 »

最近自己有个批量调用 API 抓取数据的需求,类似爬虫抓数据的感觉。听到爬虫二字,我们常常想到的是 Python, Beautiful Soup 之流,而对于简单地抓取数据这种需求来说,一个小米加步枪就能干掉的东西,拉个加农炮来,显得有些大材小用。实际上,只需要围绕着 抓取->格式转换处理->保存 这简单三步,然后用合适的工具或编程语言实现就好了。

驱动整个批量抓取过程的核心在于一个循环,把所有要访问的 URL 放在一个数组,循环遍历一下。对于我这样搞前端的来说,结合现代 JS 的 async/await 很容易就可以写出类似下方的代码(这里我用了 Axios 库处理 HTTP 请求)。

// Input
let read = fs.readFileSync('url-list.txt', 'utf-8');
let urlList = read.split('\n');

(async () => {
  for (let current = 0; current < urlList.length; current++) {
    const url = urlList[current];
    console.log(current, url);
    // get
    let { data } = await Axios.get(url);
    fs.writeFileSync(`result/${url}`, JSON.stringify(data));
  }
})();

阅读全文 »