区块链入门教程–转自阮一峰博客

原文地址:http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html

区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来。

可是,简单易懂的入门文章却很少。区块链到底是什么,有何特别之处,很少有解释。

下面,我就来尝试,写一篇最好懂的区块链教程。毕竟它也不是很难的东西,核心概念非常简单,几句话就能说清楚。我希望读完本文,你不仅可以理解区块链,还会明白什么是挖矿、为什么挖矿越来越难等问题。

继续阅读区块链入门教程–转自阮一峰博客

理解正则表达式—-环视

环视只进行子表达式匹配,不占有字符,匹配到的内容不保存到最终的匹配的结果,是零宽度的,它匹配的结果就是一个位置;环视的作用相当于对所在的位置加了一个附加条件,只有满足了这个条件,环视子表达式才能匹配成功。环视有顺序和逆序2种,顺序和逆序又分为肯定和否定,因此共加起来有四种;但是javascript中只支持顺序环视,因此我们这边来介绍顺序环视的匹配过程;

如下说明:

1.  (?=Expression):  

顺序肯定环视,含义是所在的位置右侧位置能够匹配到regexp.

2. (?!Expression)

顺序否定环视,含义是所在的位置右侧位置不能匹配到regexp

顺序肯定环视

先看如下图:

 

首先我们需要明白的是:^和$ 是匹配的开始和结束位置的;?= 是顺序肯定环视,它只匹配位置,不会占有字符,因此它是零宽度的。这个正则的含义是:

以字母或者数字组成的,并且第一个字符必须为小写字母开头;

匹配过程如下:

首先由元字符^取得控制权,需要以字母开头,接着控制权就交给 顺序肯定环视 (?=[a-z]); 它的含义是:要求它所在的位置的右侧是有a-z小写字母开头的才匹配成功,字符a12,第一个字符是a,因此匹配成功;我们都知道环视都是匹配的是一个位置,不占有字符的,是零宽度的,因此位置是0,把控制权交给[a-z0-9]+,它才是真正匹配字符的,因此正则[a-z0-9]+从位置0开始匹配字符串a12,且必须以小写字母开头,第一个字母是a匹配成功,接着继续从1位置匹配,是数字1,也满足,继续,数字2也满足,因此整个表达式匹配成功;最后一个$符合的含义是以字母或者数字结尾的;

顺序否定环视 

当顺序肯定环视匹配成功的话,顺序否定环视就匹配失败,当顺序肯定环视匹配失败的话,那么顺序否定环视就匹配成功;

我们先看如下图:

源字符串:aa<p>one</p>bb<div>two</div>cc 

正则:<(?!/?p\b)[^>]+>

正则的含义是:匹配除<p>之外的其余标签;

如下图:

匹配过程如下:

首先由”<” 取得控制权,从位置0开始匹配,第一个位置和第二个位置都是字符a,因此匹配失败~ 接着从位置2匹配,匹配到<, 匹配成功了,现在控制权就交给(?!/?p\b);?!是顺序否定环视,只匹配一个位置,不匹配字符,这个先不用管,首先是 /? 取得控制权,它的含义是:可匹配/,或者不匹配/, 接着往下匹配的是p字符,匹配失败,进行回溯,不匹配,那么控制权就到一位了p字符,p匹配p,匹配成功,控制权就交给\b; \b的含义是匹配单词的边界符,\b就匹配到了 > ,结果就是匹配成功,子表达式匹配就完成了;/?p\b 就匹配成功了;所以(?!/?p\b) 这个就匹配失败了;从而使表达式匹配失败;我们继续往下匹配,从b字符开始,和上面一样匹配失败,当位置是从14开始的时候 < 字符匹配到”<”,匹配成功,把控制权又交给了(?!/?p\b), 还是/?取得控制权,和上面匹配的逻辑一样,最后?p\b匹配失败了,但是(?!/?p\b) 就匹配成功了,因此这一次表达式匹配成功;如下代码匹配:

var str = “aa<p>one</p>bb<div>two</div>cc”;

// 匹配的结果为div,位置从14开始 19结束

console.log(str.match(/<(?!\/?p\b)[^>]+>/)[0]);

JavaScript 2018: 你需要和不需要深入的 – The New Stack

原文出处
JavaScript 2018: Things You Need To Know, and a Few You Can Skip – The New Stack

JavaScript 现今已发展成熟 — 我们也不再是在页面上做一些小小的互动元素了,而是使用 JavaScript 构建整个大型应用。 当然,这也使得其比过去更为复杂, 在这个变化万千的 JavaScript 生态系统中,我们也已难以知道整个系统到底有多大。
Ethan Brown,以软件工程师为职业的同时,还是 两本 JavaScript 书籍 的作者,均由 O’Reilly 出版。 Ethan Brown 花了大量的时间剖析 JavaScript,尝试着弄清楚这里面都有什么,以及一个现代 JavaScript 开发者该如何去开始迎合这些东西。
在2018里,对于聪明的开发者们可以去熟悉的东西, Brown 给出了他对 JavaScript 生态系统中各个方面最前沿,至少也是很有用的预测。有两点需要说明的是: 首先,他基于所有 JavaScript于 标准的这些变化中,指出了一些好的可以去了解的,尽管里面所罗列的一些东西可能不是你所关注的。对这些有一些大体上的了解能够让你在遇到困难难以抉择时,产生联系,知道去找谁,知道该去了解什么样的技术。
他还强调到,他所做的这些选择完全根据他个人的想法以及经验,这当然可能和你的完全不一样。Brown 说到: “这些只是我的个人想法,我们都各有各的想法,而且这其中我也会有疏漏。”
先从需要关注的点开始
WebAssembly: WebAssembly 属于 JavaScript 的一个子集, 它提供了一个针对其他语言的编译器。 如果你想将你的 C++ 代码编译成 JavaScript, WebAssembly 就是你需要了解的 — 它允许几乎任何语言运行于浏览器或者 Node 之中,而且也有了一些比较有意思的应用了。 Brown 说到:“我感觉这个技术会火,会变得非常重要。我也肯定会细心留意,并且在 2018 花些时间去更好的学习它。 ”
函数式编程: “并不是什么新的东西,也已经被 JavaScript 社区的大多数所应用, 但我觉的 2018 才是函数式编程真正达到具有质量和规模的一年”,Brown 说到。对其常见的批评都是更难去学习,更难去理解,Brown 继续说到,但这也是看待问题的角度不同:让所有人都开始使用函数式编程,在这种强制性的编程风格下所显现出的迷惑、副作用以及混乱,我们看来也是非常奇怪的。
Brown 的建议:“如果你想尝试真正严格的函数式编程,你可以看看 Elm 或者 ClojureScript, 不过,你也可以一句话从今天开始 ‘好的,我所有的代码都要变成纯函数式的了’。”
不可变性 (Immutability): 可以和函数式编程搭配在一起。 Brown 说到,“然而大部分人,第一次尝试不可变数据结构时,都会想:‘Wow, 这不太高效啊,你对所有的东西都创建了副本,所占用的内存不是很必要啊’”。但需要记住的是,Brown 继续到,你只是复制了变化的那一部分 — 其他的结构依然保持不变。 同时,在 JavaScript 中进行严格比较速度快而且开销低,大部分切换到不可变数据结构的人都表示性能提升了。
更好的是,不可变性为一些试验行为提供了天然的保护网 — 你在知道你无法修改任何已有东西,仅是创建了修改部分的副本的情况下,你会更愿意去试验那些不熟悉的东西。这对入门开发者来说也非常好。
单向数据绑定: 这是前端同学关心的东西,由 Elm 提出,被 Facebook 应用于 Flux, 进而还有 Redux, 以及现在的 AngularVue”, Brown 说到。大家都越来越发觉这是个好东西, 在 2018 年也是时候去了解它了。
单向数据绑定让你更方便地管理应用中的状态 。 当你第一次尝试的时候你会想,天啊,又要写那么多代码,有点大材小用的样子了。对于一些小型应用来说,确实是大材小用了,但一旦你的应用达到了一定的规模,将会影响你对整个应用的控制而不仅仅是你所负责的部分。因为当你在使用单向数据绑定时,你需要考虑到应用的每一层数据的流转。
计算属性名/字面属性值简写: “可以说这是 ECMAScript 6 (ES6) 的黑马级特性。但我目前并没有看到大家经常用到,我觉得会有很多地方可以用到。 他其实是一个小小的语法糖,能够让你动态的构建属性名称,对象初始化或简写对象属性值。”,Brown 说到。 “我感觉像是每周都用这个特性玩出了新花样。同时和函数式编程搭配在一起也是挺不错的, 如果你之前没见过一定要去了解一下 — 我更希望看到社区中越来越多人去使用这个特性。”

不需要担心的东西:

如 Brown 所说,至少现在,某些领域的知识可以选择跳过。
面向对象编程: “我本人并不太喜欢在 JavaScript 中使用经典的面向对象编程。我认为会有更好的模型,更好的方式去实现代码复用。所以在 JavaScript 领域中,你也会涉及到面向对象编程的知识但不必为此而感到烦恼。 ”
Generators: “这是 JavaScript 中一个比较酷的特性, 一些地方肯定会有它的使用案例,但我认为其主要的特性已经被 async/await 所替代。 我们很兴奋的在 Koa.js 中使用 Generator ,这样我们就可以用着同步的语义进行异步编程, 但现在有了 async 和 await 而且更好用。 所以除非你觉得在一些奇怪的使用案例中使用生成器比较合理的话也不用在意太多”, Brown 说到。
Symbol: “另外一个好的特性,对 JavaScript 语言的一个补充,但首先:我并没有看到大家再用他;其次,每次我尝试去使用 Symbol,除了在框架使用和序列化上出现问题外无其他收获。”,Brown 说到。总的说来,对于 JavaScript 这门语言,他并不认为 Symbol 是个合适的设计。 他的建议:保持观望的态度。

网络音频 Web Audio API介绍,h5能做的比你想象的更多

Web Audio在现代浏览器能很好的工作了!正确的发挥它的作用能够使你的网站增色不少,甚至会让人感到惊艳哦!下面就开始为大家简单翻译一下这篇转自国外的文章把!

  • Getting Started

    Let’s do some terminology. All audio operations in Web Audio API are handled inside an audio context. Each basic audio operation is performed with audio nodesthat are chained together, forming an audio routing graph. Before playing any sound, you’ll need to create this audio context. It is very similar to how we would create a context to draw inside with the <canvas> element. Here’s how we create an audio context:

    大概意思就是代码的开始你要new出来一个对象,实例化一个音频对象,英文却要巴拉巴拉一堆我真受不了啊!

    var context = new (window.AudioContext || window.webkitAudioContext)();

    Safari requires a webkit prefix to support AudioContext, so you should use that line instead of new AudioContext();
    继续阅读网络音频 Web Audio API介绍,h5能做的比你想象的更多

2017年十一海南三亚跟团游记,记录一些真实的事情

报的团是5天4晚乞丐游,但是由于是十一,所以很贵,一个人5000左右吧,孩子半价,所以七七八八2大一小一共花了13000左右
大头费用都是机票,所以这种团你懂的就是让你消费,不过现在都不敢强制消费了

第一天

下了飞机 有人接站,然后做大巴到了一家快捷宾馆,就是很普通都那种,还算是干净吧,楼底下就有广式茶馆,一天热闹非凡,广东人爱喝茶,一喝能喝一天,羡慕嫉妒恨,晒一晒早茶


也不便宜是吧一顿早茶花了50多吧

下午还是人山人海

我们第一次跟团 ,第一天早晨导游给我们发短信,第二天7点出发,但是我们没看见,然后头天晚上给旅游团一个总调度打电话问第二天几点出发,他说八点,然后我们睡起来发现···团都走了···
经过交涉给我们找了个车,赶往旅行团的下一站,博鳌···

这是赶往博鳌的路上
中途司机说太累了,让我开····
异地他乡开车也是别有一番风味

然后到了博鳌

到了都中午了,大团都玩完了,我们直接去吃博鳌的公道餐

说实话,这顿饭是5天以来吃的最舒服的一顿饭,口味也不错,蘸料是有些辣,但是很香,那个是鹅肉

好了,从这一站终于能跟上团了

博鳌顺手一拍,没什么好看的

npm scripts 使用指南

Node 开发离不开 npm,而脚本功能是 npm 最强大、最常用的功能之一。

本文介绍如何使用 npm 脚本(npm scripts)。

一、什么是 npm 脚本?

npm 允许在package.json文件里面,使用scripts字段定义脚本命令。

{ // ...
  "scripts":{"build":"node build.js"}}
  

上面代码是package.json文件的一个片段,里面的scripts字段是一个对象。它的每一个属性,对应一段脚本。比如,build命令对应的脚本是node build.js

命令行下使用npm run命令,就可以执行这段脚本。

$ npm run build
  # 等同于执行
  $ node build.js
  

继续阅读npm scripts 使用指南

【译】一个让每一位前端同学看完都蓝瘦、香菇的笑话段子

嘿,我最近接到一个 Web 项目,不过老实说,我这两年没怎么接触 Web 编程,听说 Web 技术已经发生了一些变化。听说你是这里对新技术最了解的 Web 开发工程师?

准确地说,我是一名「前端工程师」。不过你算是找对人了。我对今年的技术别提多熟了,前端可视化、音乐播放器、能踢足球的无人机,你尽管问吧。我刚去 JS 大会和 React 大会逛了一圈,没有什么新技术是我不知道的。

厉害。是这样的,我要开发一个网页,用来展示用户的最新动态。我想我应该通过后端接口获取数据,然后用一个 table 来展示数据,用户可以对数据进行排序。如果服务器上的数据变化了,我还需要更新这个 table。我的思路是用 jQuery 来做。

可别用 jQuery!现在哪还有人用 jQuery。现在是 2016 年了,你绝对应该用 React。

哦,好吧,React 是什么?

React 是一个非常厉害的库,Facebook 的牛人写的。它能让页面更可控,性能极高,而且使用起来很简单。

听起来确实不错。我能用 React 展示服务器传来的数据吗?

当然可以,你只需要添加两个依赖,一个是 React,一个是 React DOM

额,等下,为什么是两个库?

React 是我说的库,React DOM 是用来操作 DOM 的。因为这些 DOM 是用 JSX 写的,所以需要一个专门的库来操作。
继续阅读【译】一个让每一位前端同学看完都蓝瘦、香菇的笑话段子

从浏览器地址栏输入url到显示页面都经历了哪些?

在浏览器地址栏输入URL

浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤

  • 如果资源未缓存,发起新请求
  • 如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证。
  • 检验新鲜通常有两个HTTP头进行控制Expires和Cache-Control:
    > HTTP1.0提供Expires,值为一个绝对时间表示缓存新鲜日期
    > HTTP1.1增加了Cache-Control: max-age=,值为以秒为单位的最大新鲜时间

浏览器解析URL获取协议,主机,端口,path

浏览器组装一个HTTP(GET)请求报文

浏览器获取主机ip地址,过程如下: