写一个爬虫:SuperAgent VS Selenium

以前研究模拟登录的时候用superagent搞过一点,权当教务处的API,这次准备用Selenium做全套,主要还是实验室一直在吹Selenium怎么怎么好用,解决了多少多少难题,实际上!并没有!

这篇文章默默的来分析一下一些遇到的问题以及为什么我得出了以上的结论。

- 阅读剩余部分 -

Selenium Cookie跨域详解

实际上也不能说是严格意义的跨域,因为我们的跨域只针对同源策略中的部分情况,也就是在host为不同子域的情况,这类问题其实是比较常见的,在大型网站中使用到的单点登录等技术的情况下,我们才会遇到诸如登录页面为login.codesy.me,而我的目标页面是admin.codesky.me。

那么此时如果我简单的设置Cookie,实际上设置的是login.codesky.me的Cookie,对于admin.codesky.me是不起作用的,而又不能直接通过Selenium去设置(因为本质上就是一个浏览器嘛)。

但是尽管不能设置在admin.codesky.me,我们可以把Cookie设置在.codesky.me中,这样会匹配到全部的子域。

- 阅读剩余部分 -

MySQL 子查询使用LIMIT

昨天在帮受泽写一句查询的时候才发现MySQL在子查询中是无法直接使用Limit的,不仅低版本没法用,官方手册表明连最新版(5.7)依旧不能用:

https://dev.mysql.com/doc/refman/5.7/en/subquery-restrictions.html

当然,实在想要搞也是可以的,在子查询里再嵌套一层就行了。

比如原句:

select * from table where id in (select id from table limit 10);

- 阅读剩余部分 -

WangTrans 开发手记

WangTrans,汪星语翻译机开发其实已经一个多月了,也就是在半天里消极怠工写的东西,尽管依旧no star,不过发布在npm之后竟然也有莫名其妙的下载量,当晚就想总结一下学到的一些东西,但是由于每天回家都是——好累,不想动的循环,所以就拖到了现在。

想法的来源是因为单身狗每次都要手动输入汪汪汪+拼音,在虐狗节就非常的麻烦!说干就干……所以这是个非常标准的玩具。

第一段废话完:https://github.com/csvwolf/WangTrans

- 阅读剩余部分 -

JavaScript Debouncing与Throttling

这周还遇到了一个问题,在遇到了overflow坑之后,我准备自己实现以下滚动效果,第一是滚动条太难看,第二是overflow无法达成我要的效果。

所以就找到了wheel事件想要借此来自己实现滚动,结果一监听就坑了,我发现只要稍微移一下就会触发一次事件,那样一秒可以触发上百次了吧,尤其是使用触摸板的时候还有惯性——根本停不下来。

之后就接触到了解决方案:

参考:http://stackoverflow.com/questions/3515446/jquery-mousewheel-detecting-when-the-wheel-stops

- 阅读剩余部分 -

vue-router修改Title的姿势

这周在写的时候发现不知道怎么改变Title,因为Vue注册的作用域是body,覆盖不到head的title部分,之后查了一下,有人提议说可以把作用域注册到html,试了之后似乎报了一个Warning,看着也不是什么靠谱的解决方案,作为一个英语渣就随便抽象的查了一下,GitHub有讨论:Accessing route VM within router hooks for updating document.title

现在应该算是比较官方的做法是:

首先加:

- 阅读剩余部分 -

Integer缓存策略

这篇文章其实是讲Java和Python的,其他的语言并不知道。

在Java里你可能会遇到这样一个问题:

public class JavaIntegerCache {
    public static void main(String... strings) {

        Integer integer1 = 3;
        Integer integer2 = 3;

        if (integer1 == integer2)
            System.out.println("integer1 == integer2");
        else
            System.out.println("integer1 != integer2");

        Integer integer3 = 300;
        Integer integer4 = 300;

        if (integer3 == integer4)
            System.out.println("integer3 == integer4");
        else
            System.out.println("integer3 != integer4");

    }
}

那么问题来了,答案是什么,首先,我们应该比较的是地址,这是引用类型,那么应该两个都不等吗?

运行结果是:

integer1 == integer2
integer3 != integer4

- 阅读剩余部分 -

CSS overflow visible的坑

标题好难……这周遇到了一个坑,就是overflow-x:hiddenoverflow-y:visible连用的时候x轴和y轴都出现了滚动条,调了很久都是然并卵,后来查了一下查到了。

http://stackoverflow.com/questions/6421966/css-overflow-x-visible-and-overflow-y-hidden-causing-scrollbar-issue

在Gecko,Safari和Opera中当其中一根轴设为非visible时,另外一根轴会被设为auto。

换句话说,除非两个都是visible,否则的话两个都不会是visible。

JavaScript 确定一个字符串的所有字符均不同

上次去Google Girls送了我一本面试金典,前天无聊就看了起来,看到的部分目前还是比较基础也有些意思的,在我看到第一堆算法题的时候我说了一句,这个题看着有点简单啊……然后秒被打脸,可以说,所有的题都是想简单就简单,想难就难,主要看你考虑了多少。

今天就拿其中一道题来说说上面的观点。

实现一个算法,确定一个字符串的所有字符是否不同,假设不允许使用额外的数据结构,又该如何处理。

- 阅读剩余部分 -

说说Promise

标题不知道怎么拟定比较好,总之是讲Promise的吧,基本上算是第一次讲Promise,以前Rails+Angular的时候曾经说过,不过那个时候对于callback hell和Promise解决的东西理解的并不深刻,所以解释的也很肤浅(不明明这次依旧是肤浅的解释)。

首先……V8的Promise性能实在不靠谱,都没有第三方的快,bluebird有一篇性能比较(反正大致是想说自己快吧):http://bluebirdjs.com/docs/benchmarks.html

慢归慢,基本上一些对于性能需求不太迫切的项目还是可以用自带的Promise的,Node6对于ES6的支持已经相当全面了,这一点可以用npm install es-checker检查一下。(毕竟回调地狱恶心到吐血)。

- 阅读剩余部分 -