chunpu
chunpu
yield在generator中不过是中断函数, 并且返回一个`return.value`的值, 但是到了[co](https://github.com/visionmedia/co)中, yield简直是无所不能, 简直是专治各种异步 来看这几个例子 还是准备之前一直用的delay函数(用setTimeout模拟延迟就是为了浏览器上也可以实验) ``` javascript function delay(time) { return function(cb) { setTimeout(function() { fn(null, time) }, time) } } ``` #### 重载1. 首先是普通的thunk函数,也就是用的最多的情况 ``` javascript co(function*...
经常吹嘘自己玩过各种数据库. redis, mysql, sqlite, mongodb..常用数据库都不在话下,不料今天却在远程连接mysql上栽了跟头,于是记一下这个教训 mysql默认是不开启远程连接的,要让mysql支持远程连接需要两个步骤 ### 第一步 首先是打开`/etc/mysql/my.cnf`, 如果发现自己的mysql配置文件不是这个路径,强烈建议重装mysql(我就是因为装的mysql和别人不一样才鼓捣很久), 重装失败可以后面详解 将`bind-address = 127.0.0.1`那一行配置改为`bind-address = 0.0.0.0` bind-address表示监听时绑定的IP地址,为什么要这么改呢? 因为网卡收到请求,会把每个socket的目标地址和端口解析出来,并对照进程监听的IP和端口,如果IP和端口吻合,就传给进程 端口我们都知道mysql是3306,错不了. 而IP默认是127.0.0.1,是一个环回地址,只有本机请求本机,目标地址才会是127.0.0.1,因此我们需要将绑定IP改为网卡地址, 也就是外网IP, 因为远程连接数据库目标IP肯定是公网IP. 不过还可以改成`0.0.0.0`,这样就表示监听所有IP, 只要端口一样, 网卡都会把请求传给进程 ### 第二步 进入mysql `mysql -uroot...
最近逢人就说KOA用着好爽啊,但每次都被泼冷水 首先是看不起Nodejs派:“能跟我大structs比?”。我不得不低头,这真比不起,express就因为太小没法和那些"大框架"比,KOA比express还小几倍,核心部分就100来行,说出来岂不是让java程序员笑死,自讨没趣 其次是express派:“express就够屌了,我看KOA也就和express一样嘛”,我马上回到,不是有generator么,多方便。express派说:那不过是用了点ES6的特性,KOA本身没啥进步的。我一时语塞 不管别人怎么看,KOA确实用着爽,忍不住扯KOA的两点好 ### 1. yield数组 yield处理逐个执行的异步函数上次已经说过了 yield后面还可以跟数组,如下 ``` javascript var fs = require('fs') var app = require('koa')() var readFile = function(dir) { return function(fn) { fs.readFile(dir, fn) }...
今天刚到公司,主管就表示今天的任务之一是适配各浏览器,该来的总是要来,从接触前端开始我就没用过低版本IE了,因为网上以及前辈都说IE太恶心,在各种招聘中也充斥着不需要兼容IE6的诱人条件也表明IE兼容难度极大。不幸的是我负责模板制作(很多专题页都来自模板,因为专题由编辑负责,一个事情一出,一般两小时要搞定,这种时候完全靠模板生成专题页),因此模板必须要兼容IE6。 测试人员打开IE6,果然之前排版好的界面完全爆了,我虽不懂IE6,但也知道它不支持`border-box`, 因此写的是`content-box`的网格,但布局依然是完全混乱 ### fixed 首先是导航栏挂了,`position: fixed;`, IE6妥妥的是不兼容这个属性的,这个时候的唯一解决方案就是IE6上的导航栏不随页面滚动,其他方案都太复杂了,事实上我看了几个大网站页面,都是支持fixed就fix,不支持的就不管 ### 居中 第二是导航栏和内容没有居中,这让我有点奇怪了,在我有限的css知识中,只要是`width: ***px; margin: 0 auto;`就可以居中,用起来很顺手,IE怎么不居中呢?我问了几个前辈和网友居然没人知道为什么,不过我给父元素添加`text-align: center;`后就成功居中了。 我说这个`text-align`的时候还被嘲笑了,他们说`text-align`是行内元素的对齐方式,怎么可能让整个块居中呢?但我确实是加上后可以居中的,并且用真机试验了,其实这个上网一搜就知道原因,CSS1规范中,`text-align`仅应用于块级元素,而在CSS2.1中则相反,`text-align`仅支持行内元素,而IE6则几乎不支持CSS2.1,因此加上`text-align`可以实现IE6居中是非常合理的(不过各大牛依然坚持不需要`text-align`, 可能还是我写错了。。) ### img外不应添加div 做一个可点击的img是非常常见的需求,也就是img套一个a标签,同时不少时候我们也需要图片和它下面的一行信息一起都是可以点击的,这时候往往a中套一个img和居中的span,如果在a中先套一个div, 再在div中加上img span,就会出现img不可点的情况,目前仅在IE6上发现。可见IE6中a里面还是不要放块级元素为好 ### double margin 最大的一个错误就是我整个布局错了,这是绝对不能忍的,如果是什么border-radius, 或者shadow等出错,这都是无伤大雅的,但布局不能错。IE6的问题就是我明明按content-box计算好的宽度和margin, 怎么就掉下去了呢? 查bug的时候我注意到,浮动的元素,第一个总是保持比后排向右移两倍的差距,我猜是不是margin算了两次啊,上网搜了下double...
harmony generator是ES6中的新玩具, 为了更好的避免回调金字塔, 学习这个特性是重要的, 这个特性在各大浏览器以及nodejs中已经都可以使用 nodejs中需要`0.11.*`版本, 官网找不到可以用[nvm](https://github.com/creationix/nvm)来下载(nvm install v0.11.9), 同时启用harmony generator还需要使用`node --harmony`, 为了方便, 我们一般会先取个别名`alias node='node --harmony'` 在chrome中使用该特性需要先打开`chrome://flags/`, 搜索`harmony`, enable之, 重启chrome即可 准备工作好了, 进入正题(建议使用chrome, 方便调试玩耍) 最简单的yield用法 ``` javascript function* Hello() { //...
这篇还是不删了,作为我愚蠢的教训...本文全是错的TT 在新公司呆了几天,任务还很轻松(刚来当然轻松,逃-> bootstrap中新版的网格系统(grid system)是及其好用的,http://getbootstrap.com/css/#grid 用非常简洁明了的class命名,如`col-md-4`, `col-md-6`这种来表示4 / 12, 6 / 12的宽度占比 同时用xs(extre small), sm(small), md(medium), lg(large)来解决响应式的问题,比如给一个元素同时加上`class='col-md-4 col-xs-12'`就表示正常下是占了三分之一,而手机上是独占一行 同时bootstrap还提供了`col-md-offset-4`这样的偏移定位,本质上不过是把`width`属性换成了`margin-left`属性罢了,bootstrap的网格通俗易懂,每个人都可以轻松手写之 可惜的是bootstrap的网格是彻底依赖`* {box-sizing: border-box}`的 咱上http://caniuse.com/#search=border-box一查就可以发现IE6和IE7是不可能支持这种属性的 要知道,在border-box之前,所有的布局都是算出来的,我们必须把所有元素的border, padding, margin加起来,正好等于容器宽度才行。那时候的网页开发者,只能拿着计算器慢慢的计算,写个border都痛苦万分。border-box非常完美的解决了这个问题,把border和padding都归为自身长度 可惜我的任务是写出一个像bootstrap一样的网格,而且不能用border-box(我去年喵了个咪-> 我从一开始就表示这是不可能的,如果也用百分比,那row中的每个col只能是等分,不然根本无法处理好中间的margin(算不出) 但需求就在那里,主管表示可以让一步,但必须要支持几种基本的布局,如`1:1:1`, `1:2`, `1:1`等...
这次又来北京了,感觉北京就是吸铁石,也隐隐感觉北京就是我的归宿 北京的氛围确实完爆上海,地铁拥挤程度也完爆上海。。 来北京当然是继续面试,我比较喜欢面试,只要不是算法,我已经不大能碰到那些让我彻底语塞的题目了,因为我自己觉得知道的挺多,这次小米又让我大开眼界,特别是他们像素级别的浏览器自动化测试工具简直是突破天际,据说还是一个实习生写的。 可惜他们的主管一眼就看出我基本功不行,把我拉到一个会议室,问了几个小算法,我都是勉强做了下,总之他不是很满意,因此感觉也没啥戏了,这不禁让人想起业内知名度很高的司徒正美大大,他吐槽说小米面试必面算法,看来是这样的了。算法不行别想进小米做工程师。 以前我对此嗤之以鼻,我很少看到数据结构和算法的实际应用,我又不是搞系统或者搞网络的需要去知道红黑树之类的,但是那个主管却说到,在性能有瓶颈的时候,他们得去看webkit源码,数据结构足够扎实才能一眼看出dom加载是用了什么B树 这不禁让我陷入深深思考,毕竟我还在js本身的问题上纠结不清 最让我感到不可思议的是在北京遇到另一个校友,他表示也对我的能力感到失望,并吐槽说nodejs不就是v8套个壳么,你喜欢它干嘛?当时我就郁闷了,nodejs最怕这么黑,毕竟nodejs确实是libuv+v8,不像其他语言有很多特性,nodejs自己也说他是一个platform嘛。 不过后来我不得不服,校友说他以前就经常给v8还有webkit以及JVM提交过代码,这下我只能肃然起敬,我被connect merge一次都兴奋半天,校友都已经给这么牛逼的东西提交过了。 校友还不断问我,我有什么计划能超过我认为的这些大牛(校友觉得我说的这些人弱爆了。。),我不得不惭愧的承认根本没有想过,毕竟我的思维还局限在前端上 我当然也看过v8的代码,上次小米面试的快排优化就是从那里抄来的,可惜其他大部分都没看或者没看懂 我不禁感叹和校友之间的差距太大了,思维高度也差太多 当然,打击才是给人最大的警示和动力,我一度觉得比自己的同学厉害很多,那只不过我接触的圈子的人实在太弱了,我正准备重买那本数据结构熟读,真是觉得神奇当年我这门课怎么就没挂。。 这次来北京除了各种打击外,唯一值得高兴的是两家公司的面试官都觉得我jQuery还不错,在一个月前,我几乎都没用过jQuery,一直以写原生js为荣,现在能熟练用jQuery完全是因为一个月前我在还没用过jQuery的情况下实现了大部分常用jQuery的接口,因此和dom有关的题目,我都可以比较熟练的写出来,我相信要是他们面express我也是完全ok的,因为我几乎写出了一个迷你express, 当然,这些在校友看来依旧是太弱了,本来我下一步可能是看angular,现在有可能是需要直接看webkit,可是我的c语言超弱啊,唉真是愁人 用一个大大的是话来结尾,“学编程还是先把打字练利索吧”
起初的时候,我还觉得自己挺厉害,产生这种感觉不过是因为我可以分分钟写一个微博,写个博客,写个小网站。。 我甚至觉得自己的前端水平是不是再过个一两年就可以碰天花板了。。实在愚蠢之极 今天打完dota,看了下关于京js的一些分享,其中一个[@belleveinvis](http://weibo.com/belleveinvis)的[ppt](http://vdisk.weibo.com/s/544GFEuUPkI),我看了直接想找个缝钻进去,ppt做的漂亮极了,讲的是ecma6的东西,我除了最简单的let之外什么都没听过,点开微博一看还是我科ustc校友,目前大四. 回想我大四的时候还在为编译原理而苦恼,但人家已经做出一个自己的语言。不禁内牛满面,这是他的[博客](http://typeof.net/index.html) 最近有收到猎头电话,以及两个大公司的面试通知,一开始我妈直夸我厉害,现在我只觉得弱爆了 不得不提一下n久前一道小米的面试题 简化以下大概是这样的 ``` 完成以下需求 写一个函数repeat function repeat (callback, interval) { ... } 使得这个repeat可以这样用 var repeatedFunc = repeat(console.log, 5000); repeatedFun("helloworld") ``` 初看此题感觉很简单,不过是写一个返回函数的函数(抢票用的?抢票是6秒) ``` javascript var repeatFunc...
我发现才做了一点功能,数据库操作就多的不行了,比如访问一下功能正常的主页,要进行至少如下的数据库操作 - token解析后找到登陆的人,1次 - 显示最近发的帖子,如果一页30的话,1次 - 每个帖子根据作者id,查询作者信息,1*30次 - 如果有最近回复的id,那就是查询最近回复, 1*30次 - 30个帖子中是否有收藏的,1*30次 - 是否点赞,1*30次 也就是说大概要进行上百次的操作,这简直是可怕的,我查了下discus访问一下主页大概是要10-30次之间,这也很多了 很显然,肯定是我什么地方想错了,不该有这么多数据库查询 比如我一直在纠结一个帖子的评论使用mongoose的子文档还是就是放在正常的文档中呢 放在子文档会很爽,每次新增评论只需要向comments这个属性中push这个评论,只会有一次save操作 如果是单独的collection,则需要新增一个reply,并且更新`last_reply_id`,如果不更新`last_reply_id`,则会导致显示最近回复需要一次复杂的操作 数据库操作复杂起来,对于nodejs简直是致命的,因为每次回调加上错误判断,3次以上的异步操作,函数就斜的不能看了 所以是时候使用一下异步的库,以前确实不知道有专门解决回调过深的库,现在觉得真是丢死人,写js不用异步库简直智商拙计 我想了很久,认为model设计上出了问题 比如一个帖子,按照nodeclub的做法,在帖子的model中既有`last_reply_id`也有`last_reply_at`,其中`last_reply_at`似乎是必须的,因为大多数排序是按照最后回复时间来排序的 但这样也有问题 - 如果还是要获取最后回复的用户的name,则还需加一层嵌套 - 每次发布一个评论,都要在主题中加入`last_reply_id`和`last_reply_at`,有一个发生错误就会产生冲突 - 删除评论,如果碰巧是最新的评论,还需要删除该主题的`last_reply_id`和`last_reply_at`并且重新找最新的回复,因此大部分都是直接写评论已删除。。...
上文说到我做了个论坛,其实那时我还没做界面,仅仅把model层做了下,这次借助bootstrap3.0做了下界面,感觉真的有个样子了 相比nodeclub来说,主要是有了板块这个概念,同时它是响应式的,我更加关注论坛在手机浏览器上的显示效果 这次制作的原则是留白,一切都要最简单,方便以后的扩展,使用的颜色基本都是灰色和白色 由于我坚持完全使用bootstrap(主要是我不想放任何静态文件,全靠cdn),因此有不少布局我都有点茫然,一个劲的翻bootstrap官网 例如这个帖子列表,我一开始都感觉自己不会写了,后来动手设计了一下,试着实现,结果一下子就出来了 不过这完全依赖bootstrap的栅格,可以看下手机和电脑的效果,同一段html代码,在pc和手机上显示居然如此不同 新版的bootstrap确实在响应式上花了大工夫,每次实现一个效果,我都觉得bootstrap精妙绝伦,上次有人在微博上吐槽“什么时候bootstrap也是技能了?”。 在我看来bootstrap绝壁是个大技能,熟练使用的话完全可以快速建站。我下一个计划就是准备弥补一下自己CSS薄弱的问题,好好学习bootstrap,认真看一下源码 手机上效果  电脑上效果  另外想说的是我这次使用的模板引擎是`jade`,很早前我就知道jade,但觉得它语法怪异,上手有难度,于是自己实现了一个简单的模板引擎,现在看来和`ejs`几乎一样,非常的简单,一个文件 这次突然转向jade,完全是因为新版的ejs放弃了layout这个概念,理由是layout会触发复杂IO操作(大概这意思)。于是ejs推荐用`include header.html`这样的方法在引入子模板,显然,这样的问题是除了引入header.html,我们还需要foot.html,每个文件都这么写蛋都碎了。这个问题本质的原因是include是父模板引用子模板,而layout是子模板嵌入父模板,根本不是一个概念 然而,就算有layout,依然会有问题,比如我们希望子模板来定义title,但title标签显然是在layout中的 在真正建站的时候,使用jade模板将解决所有问题,没错,就是所有问题 我如此青睐jade主要是它提供了三个父子模板关系的标识`block`, `include`, `extends` 这三个标识看上去特别熟悉,它是django模板中的功能,我在使用django模板的时候就觉得真心碉堡了,一直想做一个有这样功能的nodejs的模板引擎。 看到jade后才知道自己想多了,jade早就已经完美,解决了我长久以来所有的问题 奇怪的是jade的官网并没有提到这方面的功能,这让人很不解,我甚至都忘了当时是怎么发现jade有这个功能的 来看下使用jade和使用ejs的一段html代码  没有尖三角,没有结束标签看上去简洁不少,jade的优点实在太多,光是注释用起来这么爽就足以完爆其他模板 可以这么说,制作论坛本意是搞mongodb的,但最大的收获不是mongodb也不是bootstrap,就是jade模板的使用