coolicer

Let's embrace the future together.

2014 年 03 月 16 日
by Ryan
关于Coolicer已关闭评论

这个博客,
是一个特别的名字。
暂时由 Ryan & Lemon 更新,
我们不一定会是发表技术相关,技术在世界上只是一个小目录。

我们喜欢结交各种朋友。

2015 年 04 月 20 日
by Ryan
node.js – stream笔记1已关闭评论

node.js – stream笔记1

这些日子跑去学了一下OC,但是还没有学成。离转行的时间还有很长,顺便回顾一下node的知识。

每种语言来来去去的人很多,但我就离不开node。我并不是使用它开发,只是使用js相对多一些,因此还是研究node比较好,stream在node的地位是很高的。闲时也来看看这个内容,在node的路上,我还是新手。

今天下载了nodeschool的课程看,其中有一个例子。(我修改了一点点)

var concat = require('concat-stream');
var http = require('http');
var qs = require('querystring');
    
    var server = http.createServer(function (req, res) {
        if (req.method === 'POST') {
            req.pipe(concat(function (body) {
                body = qs.parse(body.toString())
                res.end(Object.keys(body).join('\n')); 
            }));
        }
        else res.end();
    });
    server.listen(5000);

这题的意思是,让你把post数据反转,我就不做了,原理是一样的,只是需求不同。我们利用concat这个插件,当表单提交时,就把数据流导向concat,这个例子是取from表单post的数据。

为了测试,我使用request库。

var request = require('request')

request.post('http://127.0.0.1:5000', {form:
		{ 
			"name": "ryan",
			"age" : 23
		}
	}, function(err,res,body){
	console.log('接收成功:')
	console.log(res['body'])  // name  age
})

启动server,然后运行测试,可以看到我们把这个对象post过去了。concat-stream这个模块主要是做buffer的连接,我的理解是,当你以buffer的形式传输,这样就可以传输任何的类型了,在npmjs,它传输的是一个图片,由于我们接收完之后,就得到了这个图片的数据,我们就可以利用这个做上传,复制,道理都相通的。

2015 年 03 月 03 日
by Ryan
包袱已关闭评论

包袱

人随着岁数慢慢增加,想的东西就会越来越多。当我发现,想着有关钱的事就烦的时候,我就跟他们说不要跟我说钱。因为不谈钱的话,真的感觉轻松了不少。我是一个理想主义者,我知道钱是重要,但是我也知道钱也不是必需的。结合二者,就是钱到用时方恨少。钱的作用就是不时地提醒你,你走的路还是为了要赚钱。我也不知道为什么人类要设计这种模式,或许只有过上原始人的生活才不需要跟钱有关系。再说深层次,也是社会的问题。我们老说我们国家很强大,但是为什么辛苦劳动之后,得到的这么少。大部分都是到了谁的手里?

最新想着要转型,做IOS开发。但是为了学好一点,还要先复习一下C语言,或者说学习吧,毕竟当年也是没学C语言。有了语言的基础学起来其实没有什么难度,主要是经验吧,就是你写一门语言写了几年,你学习一门新语言,你可以很快写得出来,但是你少了很多东西,这些东西叫坑或者叫经验。再说回工作,工作也是一个问题,整天想着升级。回到公司不想做事,这样两头不到岸不好受。我觉得是时候要转变一下想法,上班时候还是尽量做工作的事情,然后下班时间充实自己。

去年买了一个跑步机,当时很坚定要锻炼好身体。结果跑了一个月左右就没有坚持了,今晚回去就要重新开始了。没有好的身体怎么继续下去,会生活会工作才是好的样子。我们都好习惯把包袱全部丢一边或者全部带上,做这样的事情都会慢慢让我们感觉到疲惫,人累心疲惫。迟早都是要放弃的,那样就是要前功尽弃了。我做人喜欢随性,但是后来发现随性也要有度,而且可能做的不好就会倒入万劫不复的深渊。最后下场就是极端的,没有才能的人是没有办法游走到好的极端,结果是相反的。

总结前言:
1.公(工作)私(生活)分明
2.身体是革命的本钱,要注意身体。
3.成功不是一天的事,要坚持。

2015 年 02 月 09 日
by Ryan
密码的简单保存策略 – KeePass已关闭评论

密码的简单保存策略 – KeePass

今年QQ好友已经有2个被盗,这里说的是直接影响到我的。目前被盗的大部分都是叫你付款的,一般智商没问题的都不会去付款。但是,从另一个角度来说,为什么你的QQ密码如此不堪一击。你有没有想过,是你的密码有问题。如果密码跟其他的帐号是相同,很大可能密码已经被公开了。通过这种撞库的方法,他们已经成功开启了很多人的各种帐号。

你可以在网上搜54社工库,这个网站可以查到你用过什么密码。

下面介绍一个比较简单的密码保护的方法:

在地球上有几个帮你管理密码的工具,我这里只选了几个说说。第一个是1password(1p),也是最方便的一个。功能强大,几乎没有什么不好的,它加密后的文件是保存在本地,所以不会上传你的密码。尽量不要用破解版,也就是说它其实是要钱买的。价格还有点小贵,mac和win两大平台一起买,要$70左右。如果你不喜欢花钱的,那么可以使用lasspass和keepass,前者因为是加密后上传网络,大部分人都不使用了,我也用过,很难用的一个工具。感觉跟1p比起来就是渣渣,剩下的你只能选keepass了。

下面我们来说说keepass,它有什么好?它是开源的,所以跨平台,移动端都是优点。但是有一个不好的是它没有像1password可以做到密码自动填充,其实我深有体会,太方便了,也许是一个漏洞。说是漏洞其实也是一种疏忽吧,其实用哪个软件都会出现。keepass相对于1p来说,只是少了浏览器填充的功能。因为我本来是要买下1p。钱总是不够花,所以还是用免费的吧。从1p切换过来,我竟然没有发现很难用。这也是写这篇文章的目的,然后就说这个软件我的用法吧。

新建一个数据库,跟1p一样也有一个主密码,就是用来打开你的数据库的,里面是各种密码。我推荐你使用密钥,密钥就是一把你自己知道的钥匙。少了它有密码也是打不开的。这就涉及到了密钥的保存了,方法有很多。你可以把它放在其他目录或文件夹,伪装成其他的名字,例如LICENSE,LICENSE是大部分软件都有的。还可以伪装成README,这个也是大部分软件有的。总之你可以把它藏好就对了,一个主密码+密钥。你的密码已经足够安全了,就算密码数据库被别人拿了也是没用的。

最后就说说密码的共享,密码不能共享给其他人。1p似乎有这个功能,但我这里说的共享只是共享给自己。如果你有mac、windows、手机等设备,你可以很方便的通过使用一个数据库就能得到所有密码。也就是说,只要同步这个数据库就好了,可以通过dropbox,或者其他网盘。但是你的网盘帐号一定不能是以前使用过的,原因前面已经说了。因为keepass是开源的,mac上可以使用Macpass,windows可以使用keepass2。移动端我没有试过,应该也是非常多实现的版本了。

2015 年 02 月 08 日
by Ryan
2014将去,2015将至已关闭评论

2014将去,2015将至

2月7号,中了人生第一个一等奖。奖金只有去年的3分之一,但是运气却让我无比兴奋,能在70人中选2个人,2个中最后才叫到我,真是非常幸运。虽然后面加了4个一等奖,但是我觉得还是很好运。

2014年最后的一个月,我入了macbook pro,终于用上了这个系统。接下来可以好好折腾了,如果说linux的桌面发行版不够完善,mac os x也许是另一个回答。但是某些地方还是有不足,例如还是没有win平台软件的多样,有些游戏玩不了。对于发开,大部分都是在*unix下会好,但是有些时候你一定要用上c#,现在的想法是在virtualbox跑一个win server,最好是简单的界面就可以了。

还有一个星期就放假了,期待新的一年能够有新的进步。

2015 年 02 月 06 日
by Ryan
Node.js Day完结已关闭评论

Node.js Day完结

就如我前面所说,如果只是API我是不打算写的的。像fs,http这些常用模块,API有详细用法。node.js对于前端来说,是很方便。但其回调还是让人有点失望,回调不会让程序慢,只是node.js一直解决不好。

前端入门node.js,只要熟悉异步,熟悉API就差不多了。练习是少不了,在今年自己写node看来,nodejs的生态确实很好,各种工具库。在正式版发布之后,可以使用生成器。这个不能说很好解决了回调,但是是一个很好的方案。因为它是一个良性的延续。

无论是node.js或是fibjs,都能让一个前端快速做出一个网站。你还有什么理由不学习呢?

2015 年 01 月 18 日
by Ryan
Node.js-day-four-认识buffer已关闭评论

Node.js-day-four-认识buffer

Node.js day 系列,我发现我并不能每天一篇。这就是坑,呵呵。

今天,来学习学习有关buffer的知识。buffer是二制格式的数据,是node.js引入的,之前js并没有。在这里我并不打算讲API的使用,因为文档里面有了,我的一系列都不会打算讲文档API的,因为我不是骗稿费的人。

大神有一篇关于buffer的文章,我们直接可以从上面学习。这里我主要讲一下,最后的那一段代码。由于处理中文,处理不好会出现乱码。所以,文中给了一个很好的方案,就是在req的end时详细处理。

var buffers = [];
var nread = 0;
readStream.on('data', function (chunk) {
    buffers.push(chunk);   // [1]
    nread += chunk.length; // [2]
});
readStream.on('end', function () {
    var buffer = null;
    switch(buffers.length) {  // [3]
        case 0: buffer = new Buffer(0);  [4]
            break;
        case 1: buffer = buffers[0];     [5]
            break;
        default:
            buffer = new Buffer(nread);  [6]
            for (var i = 0, pos = 0, l = buffers.length; i < l; i++) {
                var chunk = buffers[i];
                chunk.copy(buffer, pos);
                pos += chunk.length;
            }
        break;
    }
});

大概讲一下原理,这里有一个关于流的概念。我们下一篇再来学习,这里有一个流,当它读入数据时,由于它继承了eventEmitter,就有了事件这个属性。并且,这个流就像水一样,可以发一波一波的。在[1]的时候,这里接受的是chunk,是把每次传过来的数据push到一个数组中。同时,在[2]的地方记录读入的长度。当接收完数据,就会触发end事件,在[3]的地方我们判断接收了几段数据。

[4] 如果是空的,则没有接收到数据,给它一个0。
[5] 如果接收到一段,这里就不涉及到分段,不会产生乱码,所以也不用处理。
[6] 如果多了多段,可能会出现有乱码。这里用了一个循环,把buffer一段一段接起来,而是设置了pos,这些就能准确地把它组装起来,解决了乱码。

2015 年 01 月 16 日
by Ryan
fibjs模板,用handlebars就行了已关闭评论

fibjs模板,用handlebars就行了

fibjs这个新网页开发框架,出来的时候短,而且到目前为止。连包管理都没有,那要开发一个网站我们至少需要一个模板啊。今天,我教大家怎么去使用现在的资源。

说起来,fibjs有自己的模块目录.modules。不太清楚为什么要隐藏起来,这时我们如果要使用npm的包,必须做一个映射到这里。才能使用require('package'),但是为了方便。我们不这样做,这样要付出的代价是要把路径写全。这是根据模块的机制得出来的。

想要在fibjs使用handlebars,我们需要2个东西[handlebars,handlebars-layouts]。然后肯定是要下载它们,从npm上下载。

首先,我们为了跟其他的模板框架一样,也封装成一个方法。

// help.js
var util = require('util')
var path = require('path')
var fs = require('fs')

// get handlebars
var Handlebars = require('../node_modules/handlebars/lib')
// Register helpers
require('../node_modules/handlebars-layouts')(Handlebars)

var dir = path.join(path.fullpath('.') + '/views')

// Register partials
Handlebars.registerPartial('layout', fs.readFile(path.join(dir, 'layout.html')));

module.exports = {
    render: function(filename, data) {
        // Compile template
        var template = Handlebars.compile(fs.readFile(path.join(dir, filename)));
        // fill data
        return template(data);
    }
}

有了这个工具函数之后,我们只要在controller那里把要渲染的模板和数据丢进去就完成了。

var help = require('../lib/help')

function index(r) {
    var res = r.response
    var data = {
        title: 'Layout Test',
        items: [
            'apple',
            'orange',
            'banana'
        ]
    };
    res.write(help.render('test.html', data))
}

module.exports = index;

这样就完成了,layout.html可以来这里查看https://www.npmjs.com/package/handlebars-layouts。我是直接从上面复制的,好的,今天就这到这里了。

2015 年 01 月 15 日
by Ryan
Node.js-day-three-再来点session已关闭评论

Node.js-day-three-再来点session

session是一个看起来简单,但是并不简单的东西。我花了一些时间,找了很多资料,下面就以这段文字开头。

在web服务器端,session是以散列表的方式存在,但在session这个散列表中有一个字段类似于sessionID的东西,是用来记录对应的客户端的,每一个客户端发来请求服务器都会在session中检测该客户端是否携带了sessionID,如果有,表示该客户端与服务器曾经发生过关系。没有,则会为其建立一个sessionID,不过这个sessionID会在客户端这次请求完之后带回去,保存。下一次该客户端再来请求,请求中自然就携带了该sessionID。
sessionID,它是唯一标识的字符串,所以只要保证是唯一就可以。通过设置cookie的过期时间,可以保证sessionID的存储时间。当cookie失效,则失去sessionID,下次再发送请求时就要重新验证。

cookie与session的关系

Continue Reading →