leoyuan.github.io icon indicating copy to clipboard operation
leoyuan.github.io copied to clipboard

This is my blog repo.

Results 34 leoyuan.github.io issues
Sort by recently updated
recently updated
newest added

自己陆陆续续也写了三四年Node了,对Node开发也慢慢有了些了解和积累,在此做些记录,一来可以帮助想学Node的同学,另外自己想要查阅的时候也更方便些~ ### Node基础知识 1. 文件操作 2. 探测字符编码 3. 压缩与解压缩 4. Stream(流) 5. HTTP请求 6. 几种异步模型 7. process对象 8. 单元测试 9. 覆盖率测试 10. NPM ### Node工具开发 1. 菜单开发 ### Node Server开发...

NodeJS

CSS3发展迅猛,增加了许多新的属性,其中形变与动画令人大开眼界,下面一一介绍之。 注:目前CSS3的很多属性都属于实验性阶段,故各个浏览器厂商在实现标准时会加上自己的前缀,目前有webkit, o, ms, moz等几种。 ## 1. [形变(transform)](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function) 形变(transform)是指将元素进行位置、旋转、倾斜和matrix等变换。 ### 语法 ``` transform: \ []* | none ``` 注:通过transform-origin可指定发生形变的原点。 其中transfomr-function包括translate, rotate, scale, skew, matrix等 ### translate 包括三个方向,水平是x轴,向右为正向,垂直是y轴,向下为正向,垂直于铅垂面的是z轴,远离屏幕方向为正向。 向x轴平移指定距离 ``` transform:...

读书笔记
CSS

**注:此博文意在记录一些常用到的JS正则知识点,并不想写成一篇大而全的JS正则手册。** ### 1. 基础知识 #### 1.1 \w, \W, \s, \S 和. \w 所有数字、字母和下划线 \W 所有非数字和字母 \s 所有空白字符,如\t \r \n等 \S 所有非空白字符,包括\w以及!@#$%^&_()等字符 . 所有除 *_回车换行外*\* 的字符 `[\s\S]+` 等价于 `[\w\W]+`,大多数情况下等价于`.+`,如 (`.`号除了不能匹配`\n`,其他字符都能匹配) ```...

JavaScript

### 问题 NodeJS并不支持以`GBK`的方式来读取文件,只能以`UTF-8`方式读取,或者不解码成任何编码格式,直接以字节流返回,这时在读取文件后发现所有中文数据都变成了乱码,写入一个新文件也是一堆乱码。 ### 解决方案 **一句话概括解决此类乱码问题就是在读取入口和写入出口进行编码转换。** 具体步骤: 1. 以不进行任何编码的方式来读取本地文件或HTTP文件,返回原生Buffer。 2. 使用[iconv-lite](https://github.com/ashtuchkin/iconv-lite)来将读取到的Buffer按照`GBK`编码方式来解码,代码如下: ``` var iconv = require('iconv-lite'); // iconv-lite是纯js实现的编码转化工具,速度比iconv更快! var utf8Str = iconv.decode(buf, 'GBK'); ``` 返回的utf8Str是个`UTF-8`的字符串,因为JS所有字符串都是`UTF-8`编码的!!! **所谓按照GBK来转码,只是按照GBK的解码方式来读取buf的内容,得到正确的GBK内容后再转化成UTF-8编码的字符串。我们之所以看到乱码,是因为用UTF-8的解码方式去尝试解码一段GBK的字节流。** 3. 使用utf8Str来进行你的业务逻辑的处理。 4. 将utf8Str编码成GBK格式的字节流,代码如下:...

JavaScript

本文旨在理清jQuery在事件绑定的回调函数中各个target的区别,demo可点击(target演示). 一共有5个,即 - this - target - currentTarget - relatedTarget - delegateTarget 假设有如下事件绑定代码 ``` js // on $('#wrapper1').on('click', '#div1', function(e) { record('on click', this, e.target, e.currentTarget, e.relatedTarget, e.delegateTarget); }); //...

JavaScript

### 参考资料 1. http://www.slideshare.net/RandyJin/reflow-repaint 2. http://www-archive.mozilla.org/newlayout/doc/reflow.html 3. http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/ 4. http://dev.opera.com/articles/view/efficient-javascript/?page=3 5. http://blog.dynatrace.com/2009/12/12/understanding-internet-explorer-rendering-behaviour

JavaScript

### Promise模式是什么? 在JavaScript异步编程中,基于语言本身的事件驱动性,很容易出现异步回调层层嵌套的情况,如著名的[The Pyramid of Doom](http://tritarget.org/blog/2012/11/28/the-pyramid-of-doom-a-javascript-style-trap/),如下代码所示: ``` javascript getUserName('userid', function(userName) { getUser(username, function(user) { authenticate(user, function(pwd) { if (pwd === 'password') { // do something } }); }); }); ```...

JavaScript

### 1. 九宫格移动 https://github.com/LeoYuan/leoyuan.github.io/tree/master/assets/3by3_movement ### 2. 字母排列组合 https://github.com/LeoYuan/leoyuan.github.io/tree/master/assets/anagram ### 3. 筛选符合要求的文件(同步+异步) https://github.com/LeoYuan/leoyuan.github.io/tree/master/assets/file_filter ### 4. async参考实现 https://github.com/LeoYuan/leoyuan.github.io/tree/master/assets/async ### 5. 大数据的加减乘除实现 https://github.com/LeoYuan/leoyuan.github.io/tree/master/assets/bignum ### 6. tree https://github.com/LeoYuan/leoyuan.github.io/tree/master/assets/tree ### 7. Promise模式参考实现 https://github.com/LeoYuan/leoyuan.github.io/tree/master/assets/promise

JavaScript

  如果你爱一个人,就送TA来华为,如果你恨一个人,也送TA来华为。   2011年9月13号,我来到这里,那天,刚好是我的23岁生日,我觉得是个好的预兆,因此我将那天取名为新生。   刚入公司,大致跟所有新入职的人一样,带着些许期望,有人期望不错的回报,有人期望大展拳脚,有人期望别人羡慕的眼光,我是第一种人,因为家庭原因。我并不是个贪财的人,但当时的我,需要它们。   第一天上班,就跟麦志英在同一个部门报到,从iEMP预研阶段开始,就在同一个小组。他教我很多,把对JavaScript一无所知的我引入门,并且还经常讨论交流,让我一步一步走到如今,他算得上我在华为的第一个老师。我从他身上学到的最好的品质是认真,我没来没见过一个人能够把一本基础技术书看个三遍,一开始,我不以为然,天下总有些怪人,不是么?后来在工作当中慢慢发现,经常看过的东西还是会忘,或者根本不懂那些比较生僻的知识,而“神奇”的是,这哥们儿竟然都知道。这才试着跟着他“犯傻”,书看第二遍,发现原来别有洞天,之前看过的东西,因为你的知识结构已经有别于前一次,已经发现不一样了,有时你能将这与这之后的某个知识点关联起来,有时你能更明白这里为什么要这么设计,总而言之,好处很多。感谢他,让我“犯傻”,我猜,这辈子我可能都逃不了。   接下来的日子有点像读中学,每天学习新的知识,基本上每天都加班到九点四十,哈,这才初步体验了华为的加班文化。不过现在回想起来,那时还真快乐,每天都有好多东西学,压力不算太大,经常性的跟着兄弟们去dota,好不快活。   随着预研阶段的成功,估计让我这么说吧,队伍变得越来越大,新人越来越多,办公室搬了一次又一次,不过2011年12月那次的三个新晋测试人员让我印象深刻,本来这事不值一提,不过谁让其中有我未来的老婆呢,呵呵,恶心了一把。   慢慢地,项目开始步入正轨,又是正式立项,又是宣誓,感觉有些形式化。嗯,立项那天还有点印象,iEMP当时所有人齐聚一堂,分享喜悦,老大让随便问问,每个人上来第一句都是“iEMP真是个伟大的进步,是全公司第一个Web网管,我们的前途是无比光明的”之类的话,听起来是有点振奋人心,不过听几次后还是有点恶心的感觉,于是,我鼓起勇气问了个问题:“既然老大你们说前途如此光明,事儿如此有挑战,那可想而知,今后的工作强度也会很大,那如何来平衡工作与生活呢?”,问完后,老大们貌似被触动了一下,心里琢磨:“丫的,这小子来踢场子的吧”,不过老大就是老大,马上说出了一堆冠冕堂皇的话,不知道你信不信,反正我不太信。   真刀真枪来了,大概是去年5月,由框架组搭建整个iEMP的运行环境,对,就是从那个时间开始,我忘了跟周六说再见,结果真就没机会了。   之后就是开发,开发,清单(我至今都觉得恶心的一个词),清单。。。那段时间,感觉自己就像个工作机器,似乎老大们也希望我们如此,不需要有情感,只需要按照一个所谓的计划表来完成计划,今天开发完某个需求,明天又怎样怎样,日复一日,或者突然上级来个紧急演示,周五下班前搞定,后来我终于明白,原来周五下班前搞定等价于周一上班前搞定。   那段时间是最苦的,其实不是因为上班时间长苦,是一种心理的苦,因为似乎让你觉得人生没有意义,没人在乎你今天想不想编程,需不需要请假去办点事,只需要按照计划,对,按照计划。我猜,这也是为什么现在如此多人要离职的原因,管理不够人性化,简单,粗暴。   再后来,不知道为什么就上了Pagelet和Eview Build Tool这艘贼船了,不过我庆幸我上了。在带着耳机,无人打扰的环境下,编编程,偶尔停下来思考思考难点,与黄智、麦志英、吴桂雄等人交流,或者到github上提问,这一切一切,让我觉得自己像个真正的程序员,这是最美妙的感觉。   再说github,这个网站让我感觉很好,创建自己的repo,每个人都能来维护,你也能去维护别人的repo,读源码,提bug,与项目的author和contributor交流,怎么说,这是一种让人感觉很美妙的事情,仿佛这个平台让世界上的优秀程序员都连接到了一起,让一群兴趣相投的人一块儿工作,wow, amazing~~~   再说黄智,这应该能算我在华为的第二个老师了。从黄智大哥身上看到的是一股对技术长期的执着,不管是对新技术敏锐的嗅觉,还是对于设计的灵感,都令人佩服。对,智哥还有一点最令人佩服的是,做出的设计架构,一直会由自己做出一个比较成熟的原型,不像其他很多SE那样,根本没有或很简陋的原型,也正是因为这样,智哥才能让人信服,这也是为什么如此多人认可智哥的缘由。   最后说自己,在经历了华为一年半之后,我发现了自己几点重大改变: - 做事变得极有规划,今天做什么,周末一天的时间如何分配,这大抵是那段“匆忙”的岁月留下的后遗症; - 更加踏实的对待技术了,因为越来越明白,技术不是走马观花,需要实践、深入方能发现技术的美妙; - 英文进步了,现在已经能够在github上交流,大致没什么语言障碍了,不过还是有辞藻匮乏的时候,这点还得继续努力; - 自己对自由的向往更加强烈了,更加务实的想到底什么样的工作才适合自己,对,务实很重要,天马行空的人只能活在自己的梦里;   总而言之,言而总之,华为真是个让人又爱又恨的地方,不过,有一点毋庸置疑,华为是个伟大的公司,衷心祝愿以后一直都是。(注:笔者在华为"服役"时间 2011-09-13 ~ 2013-06-28)

生活点滴