标签JavaScript下的文章

admin 发布于 08月06, 2016

用树莓派驱动德飞莱16x16点阵屏显示汉字

这周尝试用树莓派驱动了 LY-LED16x16B V2.1 点阵屏。之所以选用这一款是因为它是 16 X 16 点阵(实际上是 4 块 8 X 8 LED 拼起来的,只不过已经集成好了)。LY-LED16x16B V2.1 本身是用于单片机的,官方提供了 51 单片机和 Arduino 下的测试程序。不过,我们有强大的树莓派,既然单片机能驱动,树莓派应该也不是问题。

阅读全文 »

admin 发布于 07月28, 2016

树莓派 JS 库实现持续集成的“黑科技”

这个阶段在研究树莓派,主要用 Node.js 开发。开源社区有许多非常优秀的树莓派 Node.js 库,但是没有让我觉得特别好用的。因为这些库有的 API 还不错,但是性能不好,有的性能很好,但是 API 不好用。还有一些库没跟上树莓派的硬件升级,使用起来还要自己修改,作者也不处理 pull request,比较麻烦。因此我自己着手重新写一个库 rpio2

在写库的过程中,自然要充分测试每个 API,个人比较喜欢 TDD / BDD 开发,因此一边开发功能,一边写各个 API 的单元测试。写了单元测试,自然希望在代码提交的过程中能够持续集成,最好是直接使用 travis-ci

愿望是美好的,但是现实有点残酷。因为树莓派开发不同于其他软件开发,它涉及到硬件,虽然说单元测试可以很简单,主要是测试引脚的同步/异步输入输出和事件(中断)响应,所以开发的时候可以在树莓派环境里跑单元测试,这没有问题,但在集成的时候,我们没有办法让 travis-ci 用树莓派系统环境来跑我们的 test case 吧。这样的话,就需要我们自己实现对底层的 GPIO 的模拟

阅读全文 »

admin 发布于 07月27, 2016

用 Node.js 玩转树莓派 —— 入门篇

Raspberry Pi(树莓派),是英国的树莓派基金会所开发的单板计算机,它是由 Eben Upton 以及他的同事设计的,最初的目的是以低价硬件及自由软件促进学校的基础计算机科学教育。

树莓派 Model B+

树莓派 Model B+

在物联网(IoT)高速发展的今天,树莓派以低廉的价格、开放的硬件/软件生态、灵活的通用输入输出(GPIO)接口,成为学习、研究物联网和万维物联网(WoT)的理想设备。

阅读全文 »

admin 发布于 07月05, 2016

Babel for ES6? And Beyond!

以下是我在 2016/7/4 奇舞团泛前端分享会上的分享的文字内容。

什么是 Babel

较早接触 ES6 的同学对 Babel 应该并不陌生,它是一款能将 ES6+ 编译成 ES5 的编译器。

Babel is a JavaScript compiler.

Use next generation JavaScript, today.

Babel 官网对它的文字介绍

喜欢用 React 的同学也对它可能不陌生,它可以处理 JSX。

Babel can convert JSX syntax and strip out type annotations. Check out our React preset to get started. Use it together with the babel-sublime package to bring syntax highlighting to a whole new level.

Babel 可以处理 JSX

然而,不管是作为 ES6 向后编译为 ES5 的工具,还是作为处理 JSX 的替代,Babel 是否都是以一个临时方案而存在的呢?

阅读全文 »

admin 发布于 06月20, 2016

【译】Spying on the DOM

原文:http://www.zcfy.cc/article/613

我一直是对 TDD(测试驱动开发)和代码测试持怀疑态度的。我发现它很难做到而且很耗时间。尽管如此,有比测试难得多而且更耗时间的事情。你可能已经猜到了,改 bug!。当代码库变大了,开发团队来了新人,你会发现晚上越来越难睡个安稳觉,因为你不知道一周前写的代码在明天的需求变更中还能不能存活下来。我不想讨论单元测试的好处,因为这个话题可以单独写一整篇文章,而如果你快速 google 一下,你一定会找到关于单元测试这个话题的高质量的内容

所以让我们直奔主题。我正在做一个 Backbone 项目。在此处我不关心用什么框架,我更关心代码库将如何增长以及代码库将如何保持稳定。我并不是说框架不重要。不管怎样,有一件事情是肯定的,如果有人不理解所使用的库或框架构建的基础——不论这个库或框架是什么,一切都会变得一团糟。

阅读全文 »

admin 发布于 06月17, 2016

【译】关于静态类型令人震惊的秘密

原文:http://www.zcfy.cc/article/575

TypeScript 最近迅速流行起来。我喜欢 TypeScript,我也喜欢静态类型。尽管我不使用 TypeScript,但由于 TypeScript 的类型系统,它获得一些非常棒的特性。TypeScript 的静态类型是结构不是名义,意味着它基本上像自动鸭子类型一样工作,而不是基于名字或者标识符的类型检查。这对于 JavaScript 一类的动态语言来说很合适。(TypeScript 的静态类型检查是声明式的类型检查而不是像传统语言那样涉及到静态类型绑定和内存分配——译者注)

阅读全文 »

admin 发布于 06月14, 2016

【译】无穷集合与 ES6 生成器

原文:http://www.zcfy.cc/article/505

动机

无穷和惰性求值的集合对于许多语言来说是稀松平常之物,而它也开始被主流 JavaScript 支持。随着新的迭代器和生成器特性被广泛采用,现在你可以将它们用于你的项目中。它们拥有一些非常具体的应用场景,这些场景也许不会每天出现,但是在某些情况下它们会非常有用。这些特性非常新,然而脚本库已经开始针对它们提供最有用的操作。

在这篇文章中,你将学到这些特性的基础,以及一个特别的应用场景,在这个场景中你可能会用到这些新技术。同时,你也将学到一个可用的库,它提供了高效率使用这种集合的大多数基础操作。

阅读全文 »

admin 发布于 06月08, 2016

【译】3 种不同的原型继承: ES6+ 版本

原文:http://www.zcfy.cc/article/425

这篇文章改编自 《Programming JavaScript Applications》 相关章节,我在这基础上扩充了一些内容,并新增了 ES6 部分。

为了更好地发挥 JavaScript 的能力,很重要的一点是理解 JavaScript 的 原生继承能力。这是一个在 JavaScript 实践和学习中经常被忽视的领域,但是理解了它能够获得极大的能力。

JavaScript 是表现力极强的编程语言之一。其中一个最好的特性是能够在没有类和类继承的情况下创建和继承对象。

结合代理原型(delegate prototypes)、运行时对象扩展和闭包,能够让你用三种不同的原型表达方式实现继承,它们与类继承方式相比有着显著的优点。

阅读全文 »

admin 发布于 06月01, 2016

类的装饰器:ES6 中优雅的 mixin 式继承

前几天翻译了一篇文章 六个漂亮的 ES6 技巧,作者介绍了通过 ES6 的新特性实现的 6 种编程技巧。其中最后一种技巧是:“Simple mixins via subclass factories”,我翻译成“通过子类工厂实现简单的合成器”。限于我自身英文水平,也许把 mixin 翻译成“合成器”并不是一个非常严谨的译法,加上作者对这个技巧介绍的篇幅有限,所举的例子比较简单,因此有些同学表示看到这里觉得不太懂。然而,这个技巧又是体现了很重要的设计模式——mixin和装饰器模式,因此我觉得有必要将它单独拎出来详细写一篇文章。

阅读全文 »

admin 发布于 05月31, 2016

别人家的面试题:不可变数组快速范围求和

这是一道翻译小组的同学问我的题目,这道题很有意思,在 leetcode 上标记的难度为 Easy, 然而正确率出奇地低,只有不到 25%,看来这是一道看似简单实际上颇有挑战性的题目。

不可变数组的范围求和

给定一个整数数组 nums,计算出从第 i 个元素到第 j 个元素的和 ( i ≤ j ),包括 nums[ i ] 和 nums[ j ]。

例子:

const nums = Object.freeze([-2, 0, 3, -5, 2, -1]);

sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3

注意:

  1. 假定数组的值不会改变(如上面代码,nums 因为 Object.freeze 的缘故可读不可写)
  2. sumRange 可能会被使用很多次,求不同范围的值
  3. 数组可能规模很大(比如超过 10000 个数),注意运行时间

阅读全文 »