• #5 楼 @huopo125

    hash 杂凑函数 或者 散列函数 是不可逆的(在密码学里面的 hash 函数,基本上不但是不可逆的,而且是对于冲突有抗性 - 也就是给定一个输入和输出的 pair,很难找到另外一个不同的输入可以生成相同的输出)。而加密的话需要是可逆的。

    几个例子: 对于 etag 而言,目标是:如果两段内容内容不同,需要生成不同的特征码,所以使用 hash。md5/sha1 等等都可以 对于保存的密码,也是一样,需要验证密码是否符合,所以也使用 hash。如果是用加密的话,那就是作死的节奏。 那么如果我写一封邮件给你,不想 NSA 看,但是我又希望你看见内容,那么我就发送一封“加密”邮件给你。如果我是发送的 hash 给你,除非我们有预先预定,否则你也看不懂。

    希望这几个例子能帮助你轻松理解。


    写到这里我突然想起来个事情,bcrypt & scrypt 都是杂凑函数,而非加密算法。

  • 赞。

    有一个小问题,

    并根据生成的响应内容生成 MD5 加密的 ETag

    MD5 不是加密,所以这里应该是 MD5 散列

  • 求 Ember.js 开发经验的分享 at 2015年03月15日

    我们最近做的帮推客,是一个 P2P 的个人影响力交换平台,开发过程中用的就是前后端分离,Ember.js 和 Python Flask 的 API 搭配。我来说说我们的吐槽与经验吧。开发时间是 2 月中旬。


    这些吐槽与经验,有可能不对或者有更好的解决方案,请大家指教。

    • 能使用 Ember CLI 就尽量使用 Ember CLI。我们刚刚开始的时候,用 Yeoman 生成的 webapp,然后手动增加的 Ember.js 框架,到后面的话增加测试之类的就比较难受。
    • 我曾经在有些别的项目中尝试使用 Ember.js,后来效果不是很好。我觉得是因为对比 ng,Ember.js 更加霸道,属于顺我者生,不顺我者我让你很难受类型的。
    • 在本地开发,对 promise 求值的时候非常快,所以感觉不到延时。但是部署上生产环境,如果网络比较慢的情况下,延时会让 UI/UX 很受伤。我们最后的解决方法是加入 NProgress 给用户一些视觉反馈。
    • 用户登陆和认证部分,我们最后没有使用 session/cookie直接验证,而是直接使用了token,通过 Ember.$.ajaxPrefilter 加进了 ajax 请求头。
    • 开发速度当然是非常快了,我对 Ember.js 其实不熟,但是两天的 Hackathon 也就把帮推客的原型做出来了
    • 页面体积那是一个巨大,打开的话比较慢,后来我们就加上了一个 Loading... 页面,告诉客户正在努力加载,然后等 Ember 初始化结束之后,再把这个页面替换掉。
    • 为了帮助客户使用,我们很多地方都用了实时的通知系统,比如注册邮件不可送达,或者管理员通过了审核等等,都通过 socket.io 将事件实时的发送到浏览器。但是有的事件需要子Route来处理,有的是中间的 Route 需要处理,这样的话 socket.io 和 Ember.js 的通信比较坑,后来我们用了这样一种方式解决
      1. ApplicationRoute 中,加入 socket.io 的初始代码
      2. 初始代码包括 dispatch,当 socket.on('some_event') 触发的时候,找到对应的 container 并且通过 send 发送事件
    App.ApplicationRoute = Ember.Route.extend({
        init_io_dispatcher: function () {                                                                                                                                                                                               
            var me = this; 
            socket.on('friend_count_update', function (data) {
                var friend_count_checks_route = me.container.lookup('route:friend_count_checks');
                if (friend_count_checks_route) {
                    friend_count_checks_route.send('update_friend_checks');
                }
    
                var dashboard_route = me.container.lookup('route:dashboard');
                if (dashboar_route) {
                    dashboard_route.send('update_friend_checks');
                }
            });
        }).on('init')
    });
    

    上面写的比较乱,我会总结一下写出来。

  • 我们在用 papertrail,uclogs 有什么特色吗?

    • Ctrl-L 重绘界面就应该好了
    • 不用或者用 screen/tmux 试试看
    • 升级 Emacs
    • 局域网可以开 X 不用-nw
  • @qsun IE 没有么