如何更方便地访问 NAT 后面的 HTTP Server?

这篇文章整整拖了 5 个月,生成的 Timestamp 原来是 2 月 7 的,现在都 7 月了,拖延症很严重。

有个需要本来是一个很简单的 C/S 模型,机器人 HTTP Server 在本地局域网中提供给客户端(Web,桌面,安卓/iOS)访问。客户端连上机器人发起的本地局域网,然后通过本地局域网的 IP 地址,访问机器人上的 HTTP Server,控制机器人。

但是后面有一个需求是,当机器人插上一个 3/4 G 网卡上网的时候,要复用机器人上的 HTTP Server 远程控制机器人。那问题来了,该如何访问一个 NAT 后面的 HTTP Server 呢?

查看更多

操蛋的浏览器缓存

实际上我并不想写这么一篇关于浏览器缓存的文章,但是浏览器缓存太烦了,实际中经常会遇到,面试也经常问的,所以把关键的几个点记录一下。

缓存其实主要是服务器的锅,但是浏览器也可以做一点微小的工作。

查看更多

Node 根本就不是什么新东西

逛 github 看到 uWebSockets 作者 Alex Hultman 写的有关 Node 的话,很有感触。

第一篇 The-real-history-of-async-networking,讲的是异步编程的历史,然后总结出 Node 并不是新概念,只是一群没有经验程序员的玩具。

From the perspective of a PHP programmer it might be something new, but from the perspective of an experienced C programmer this piece of software is nothing more than a simplification of common (now ancient) async techniques wrapped up in JavaScript for non-experienced programmers to toy with

确实也无可厚非。

第二篇 Don-t-bother-counting-those-stars,讲的是低质量的库,假如做了宣传,star 飙升,但是并没有否定这是一个低质量库的现实。而很多高质量的库因为没有宣传,star 少,但是实用。总结为不要看 star 数量而用一个库。

You won’t get many stars with marketing like “We are not the fastest but we are pretty efficient, no wait, we are actually not that fast”. It has to be something like “FEATURING THE FASTEST AND MOST RELIABLE REAL-TIME ENGINE”. Yeah, that one will sell. In fact, this is the marketing of Socket.IO, a project with 28k stars.

确实,最近用到 Socket.io,质量确实不好,而且很久没人维护。

Node 09 年刚出现的时候被大吹特吹,被贴上异步事件驱动,高并发等标签,入门门槛极低,大量前端都可以跳到 Node写一下。一些无高质量的基础库涌现,库作者会吹 B,而且前端的人很多,这些库 star 数飙升,例如 Socket.io。但是到现在出现了性能低,无人维护等现象。

Node 要成为下一个 Ruby 了?

写一个符合 Promises/A+ 规范并可配合 ES7 async/await 使用的 Promise

原文地址


从历史的进程来看,Javascript 异步操作的基本单位已经从 callback 转换到 Promise。除了在特殊场景使用 streamRxJs 等更加抽象和高级的异步数据获取和操作流程方式外,现在几乎任何成熟的异步操作库,都会实现或者引用 Promise 作为 API 的返回单位。主流的 Javascript 引擎也基本原生实现了 Promise。

在 Promise 远未流行以前,Javascript 的异步操作基本都在使用以 callback 为主的异步接口。鼠标键盘事件,页面渲染,网络请求,文件请求等等异步操作的回调函数都是用 callback 来处理。随着异步使用场景范围的扩大,出现了大量工程化和富应用的的交互和操作,使得应用不足以用 callback 来面对愈加复杂的需求,慢慢出现了许多优雅和先进的异步解决方案:EventEmitterPromiseWeb WorkerGeneratorAsync/Await

目前 Javascript 在客户端和服务器端的应用当中,只有 Promise 被广泛接受并使用。追根溯源,Promise 概念的提出是在 1976 年,Javascript 最早的 Promise 实现是在 2007 年,到现在 2016 年,Promise/A+ 规范和 ECMAscript 规范提出的 API 也足够稳定。then, reject, all, spread, race, finally 都是工程师开发中经常用到的 Promise API。很多人刚接触 Promise 概念的时候看下 API,看几篇博客或者看几篇最佳实践就以为理解程度够了,但是对 Promise 内部的异步机制不明了,使得在开发过程中遇到不少坑或者懵逼。

本文旨在让读者能深入了解 Promise 内部执行机制,熟悉和掌握 Promise 的操作流。如有兴趣,可以继续往下读。

查看更多

理解比特币原理

对于比特币原理的分析,无论是 wiki,论文,知乎,博客上,有非常多的文章写得非常好。这篇文章只是我看了很多相关文章之后的个人总结,对于需要理解比特币的同学可能可以提供一些帮助。

查看更多

论2009电竞职业发展,和成功互联网开发者职业发展的相同

最近我在看 panda tv 的 pandakill 直播,这是一个 panda tv 主持,安排自己平台上的各电竞明星主播一起玩狼人杀的节目。节目本身非常精彩,效果也非常爆炸。

我是由于2009在微博上发声,我才发现发现的这个节目。

这里先抛开这个题目:《论2009电竞职业发展,和成功互联网开发者职业发展的相同》中的后一段,先介绍下我以前的偶像,如今的人生赢家和成功商人2009。

查看更多

Sharedb 源码分析(待续)

入坑原因和暂时弃坑原因

之前帮一个公司做一个关于文档实时共享和编辑的项目,项目性质类似于 quip 和 google doc,核心功能使用到一个叫 sharejs 的库。

由于这个项目实时功能很强大,但是文档少而且很旧,所以想要深入了解一下内部原理,需要分析一下源码。此为背景,也为入坑原因。

但是!在读源码的时候,了解了一下这个项目的背景,发现坑有点深。

这个项目原本是被集成到一个叫 DerbyJS 的框架中(类似于 meteorjs 的实时通讯框架)和作为一个叫 Lever 硅谷公司的核心库,但是作者之前一段时间离开了这家公司,和由于一些私人原因放弃管理了这个项目很久,issue 一大堆,邮件列表不回复,所以项目一团糟。现在 sharejs 已经不维护,但是分出一个 sharedb 的项目,让 Lever 的 CTO 来管理,作者也在干自己的事没有管,那个 CTO 也是忙着管理公司,所以结果就是开发进度极慢,文档几乎没有,极少人关注这个库。

因为自己要忙找工作和毕业的事,所以把写到一半的笔记放下来,等以后有这个时间再继续研读源码,把这个坑填起来。

查看更多

Ode on Solitude

Happy the man, whose wish and care
A few paternal acres bound,
Content to breathe his native air,
In his own ground.

Whose herds with milk, whose fields with bread,
Whose flocks supply him with attire,
Whose trees in summer yield him shade,
In winter fire.

Blest! who can unconcern’dly find
Hours, days, and years slide soft away,
In health of body, peace of mind,
Quiet by day,

Sound sleep by night; study and ease
Together mix’d; sweet recreation,
And innocence, which most does please,
With meditation.

Thus let me live, unseen, unknown;
Thus unlamented let me die;
Steal from the world, and not a stone
Tell where I lye.

Alexander Pope Ode on Solitude

耕作着祖辈留下的几亩土地,呼吸着土地上自然的空气
这样的人才能称为快乐的人

牛产牛奶,地长面包
羊毛身上穿
树阴为他留,冬天有柴烧

真是太幸福了
无忧无虑地过着轻松,快活的日子
身体健康,头脑清晰,悄悄过着小日子

睡觉打着鼾,闲时读些书
张弛有度,酣畅淋漓
天真时感到快乐,快乐时又带着沉思

无名,无声地活着
没有遗憾地死去
不留下任何痕迹,悄悄离开这个世界

Alexander Pope Ode on Solitude