月盾的博客

Git SSH Key在windows下生成过程

月盾

切换到C:\Users\\.ssh

执行命令:ssh-keygen -t rsa -C “邮箱地址”

Generating public/private rsa key pair.

Enter file in which to save the key (//.ssh/id_rsa):

第一次生成由于没有id_rsa文件和id_rsa.pub文件,所以需要生成这两个文件,然后手动输入:./id_rsa

Enter file in which to save the key (//.ssh/id_rsa): ./id_rsa,虽然要求输入//.ssh/id_rsa,但这种方式不是在当前目录下

接下来两部是要求输入密码,不输入直接回车就完成了。

PS C:\Users\admin\.ssh> ssh-keygen -t rsa -C "myemail@163.com"

Generating public/private rsa key pair.

Enter file in which to save the key (//.ssh/id_rsa): ./id_rsa

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in ./id_rsa.

Your public key has been saved in ./id_rsa.pub.

The key fingerprint is:

9c:cc:db:3e:72:82:73:2e:41:0e:17:f4:3c:ea:70:4a myemail@163.com

The key"s randomart image is:

+--[ RSA 2048]----+

| .o |

| + |

| . o + |

| O o . |

| E S |

| . = = |

| . * = + |

| = = . |

| . |

+-----------------+

最后将.ssh目录下id_rsa.pub文件中的内容复制并添加到github或其他支持资源库中就可以使用ssh的协议clone资源了,没有添加进去是不能克隆的。

nokia诺基亚XL4g开不了机

月盾

昨天用了一天的手机,晚上用着突然就黑屏了,死活开不了机,以为是没电了,充电时也开不了机。奇怪的是用了一天一直显示满电,怎么突然就坏掉了。抠电板试试,还是开不了机。扣电板充电,总算有点反应了,但是还是开不了机,不过这种情况遇见过,就是刚买回来试试有没有问题时没装电池充电一闪一闪的震动就是开不了机。后来才发现要装了电池才能开机,但是这次为什么装了电池也开不了机,反而是一点反应也没有。今天早上起来用数据线连接电脑打算刷机试试,刚连接电脑也是开不了机,就把电池扣掉,这时出现了充电的反应,原来是一点电量都没有了。充了一会总算是开机了。所以,如果突然开不了机可能是一点电都没有了,建议先充一会电再开机试试。

无插件实现动态瀑布流加载数据

月盾

以前在页面中动态加载帖子数据使用了waterfall.js插件,当初折腾了不少时间才搞定,这次又有一个页面需要动态加载数据,自然想到了waterfall插件,但是结果很不理想,waterfall的很多参数不管是什么用处,反正看着很头疼,最麻烦的是它会改变页面样式和布局,实在不想调整了,还是自己实现这个功能吧!

首先看下面代码:

var pageIndex = 2;

(function loadmore() {

    //绑定滚动事件  
    $(window).bind("scroll",  function() {

        if ($(this).scrollTop() + $(window).height() + 40 >= $(document).height() && $(this).scrollTop() >= 40) {

            $(window).unbind("scroll"); //到底后先移除滚动事件  
            $.get("/portal/getTopic?pageIndex=" + pageIndex + "&pageSize=3",  
            function(data) {

                $("#container").append(data);

                pageIndex++;

                loadmore(); //数据加载成功重新绑定滚动事件  
            },  
            "html");

        };

    });

})();

没错,就这么点,这已经是实现功能的最简单版本了。代码的基本流程是给页面绑定滚动事件,判断是否滚动到最底部,然后加载数据。但实际上并不是这么简单就能行的,有很多意外情况需要解决。

先来说明如何判断页面是否滚动到最底部,$(this).scrollTop()用来计算滚动条顶端距离窗口顶部的距离,整个滚动条高度大约等于整个页面高度。当滚动条滚动到最底部的时候,滚动条顶端距离窗口顶部并不是整个页面的高度,还需要加上当前窗口所占高度才是整个页面正真的高度。所以就是$(this).scrollTop() + $(window).height()=$(document).height(),但是我们为什么还要加40呢?因为一般滚动到底部加载并不是完全要滚动到最低端才加载,而是差不多已经到底的时候就要开始加载,既然是差不多到底那么$(this).scrollTop() + $(window).height()就是还不完全等于整个页面高度,因为还有40没有滚动,所以加上了才是整个页面高度。此时滚动到距离最底部还有40像素的时候,再滚动一点就会大于页面高度,就该加载数据了。代码中还有&& $(this).scrollTop() >= 40是为了监听有滚动发生,总不能在没有滚动事件发生时就加载。

已经能够监听到是否滚动到底部了,但是滚动事件是稍微滚动一点就能触发好多次,就会请求好多次数据,就算数据没有返回稍微滚动就会继续发送同样请求,所以在数据没有返回之前要把监听滚动移除掉,$(window).unbind("scroll");等数据添加到页面以后再重新绑定滚动事件。

检测网站中未使用的css样式

月盾

网站的css样式文件在多次修改后会有很多样式废弃不再使用,使得维护起来困难,还可能出现重名样式,后面的覆盖掉前面的效果,所以有必要清除掉不再使用的样式。可以使用的工具很多,不过在使用了Dust-Me Selectors觉得足够了。

https://addons.mozilla.org/en-US/firefox/addon/dust-me-selectors/

打开上面网址安装

直接点击这个小扫把会检测当前页面没有使用的样式,不过这样的结果还不是我们想要的,因为当前页面没有使用不代表其他页面也没有使用。我们更需要的是找出整个网站中未使用的样式。

选择第一项“Spider Sitemap”,就像是百度蜘蛛爬取整个网站数据一样。

输入网址,本地网址和网络地址都可以检测,点击“Start”后很快就有结果了,如果页面较多会费时些。

可以看到有橘黄色部分就是没有使用的样式,但是这也不能完全代表就是没有使用过,上面三个未使用的样式是我对于博客内容的图片和引用块使用的样式,因为本地的测试内容中的确没有使用这三个样式,但是线上的网站却使用了,遇到这种情况就需要仔细甄别了。

再看一下扫描的页面日志

基本的页面都有扫描过了。此时可以手动删除掉没有使用的样式,这个插件对于简单的网站够用了,但是大型网站就不准确了,当然有些其他工具还可以导出检测后的结果。有必要的可以去下载。

linux下添加svn用户名密码

月盾

首先需要知道配置文件的位置,比如我们的服务器中我就找到很多关于svn的目录,甚至分不清哪个目录下才是真正的配置文件

root@handou:~# find / -name subversion

/home/handou/workspace/subversion-1.8.11/subversion

/home/handou/workspace/subversion-1.8.11/subversion/bindings/javahl/src/org/apache/subversion

/home/handou/workspace/subversion-1.8.11/subversion/bindings/javahl/src/org/tigris/subversion

/home/handou/workspace/subversion-1.8.11/subversion/bindings/javahl/tests/org/apache/subversion

/home/handou/workspace/subversion-1.8.11/subversion/bindings/javahl/tests/org/tigris/subversion

/etc/bash_completion.d/subversion

/etc/subversion

/usr/share/doc/subversion

查找所得结果可以确定应该是在 /etc/subversion下,切换到subversion下有多个文件:

config config.dpkg-dist dav_svn.authz dav_svn.passwd passwd servers

可能需要一一查看下都是什么内容,其实主要是dav_svn.authz dav_svn.passwd这两个文件,一个存放用户名,一个存放密码,dav_svn.authz内容包含账号和权限:

[groups]

apiadmin=yuedun

[handou:/]

@admin=rw

@apiadmin=rw

可以编辑这个文件添加账号,然后添加密码,但是不能直接编辑dav_svn.passwd,这里面是加密数据,需要使用Apache的htpasswd命令添加。

htpasswd /etc/subversion/dav_svn.passwd <用户名>

然后会提示输入密码,就此完成svn账号设置。

使用sublime开发node.js快速跳转到变量函数声明处

月盾

开发中最常用的操作之一就是快速跳转到变量,方法声明处,比如在eclipse中按住Ctrl键鼠标点击变量或方法就能跳转到对应的位置或文件中,开发nodejs程序当然也需要这样的功能,比较强大的开发工具有webstorm,也是支持这种操作的。不过webstorm太占内存,4G的内存下总是提示内存不足,需要关闭占用内存程序,而首当其冲的就是webstorm,所以最近试了试另一款被大家熟知和推荐的开发神器sublime。虽然sublime是个文本编辑器,还不能算的上IDE,不过它可以安装各种插件来丰富功能,最重要的是它占用内存少,速度快。

所以,我要介绍的是在ST下如何做到跳转到变量或方法声明处。

首先在uses.js文件中有一个函数

//我是一个测试方法

router.get("/commeHere", function(req, res) {

});

然后我要从其他文件中跳转到这个函数。先关掉这个文件,打开其他文件。

st2.jpg

可以双击或鼠标选中commeHere这个关键词(才发现单词打错了),键盘按下Ctrl+shift+F就会出现类似搜索框,选中的关键字会填充到find框中,需要手动选择where框,选择Add Open Folders,文本框中填充的就是,然后回车就可以了,很快就会搜索出我们需要的关键字所在的文件。

双击就可以跳转到对应的文件和行上。

当然,不可能像eclipse中那么方便,但其实只有两步操作,第一ctrl+shift+F搜索关键字,第二双击搜索结果跳转到对应文件位置。如果你习惯使用ST的话肯定很满足这样的设计,根本不会觉得繁琐。

windows下使用脚本快速启动nodejs服务

月盾

每次启动node服务都要先打开cmd命令行,或者在win8下先打开文件资源管理器>文件>打开命令提示符,然后执行node命令,这样的过程真的很烦人,当然需要一个简单粗暴的方式启动了,就像用bat文件双击启动。
首先,建一个空白文件,输入以下内容:

E:  
cd E:\\NodejsWorkSpace\\app-node  
nodemon ./bin/www

就像我们平时要依次输入这些内容一样,不过还有更简单的方式:

E: && cd E:\NodejsWorkSpace\app-node && nodemon ./bin/www

使用&符号连接各个命令也可以

数据表索引如何建立?多列索引还是单列索引

月盾

数据库优化第一想到的应该是建立索引,而且是最快速有效的优化方式,一般是对where子句中的字段建立索引,但是并不是越多越好,对于基数(区分度)越大的效果越好,比如唯一索引。对于一些表示状态的,比如值为0,1这类区分状态的字段就算数据再多索引的基数也很小,这类字段并不是非要加索引,加的索引越多越占磁盘空间,每次写入数据都要更新大量索引,反而成为累赘。但是不要以为真的没必要加,初学者对索引的认识浅薄,要么不加索引,要么在建表时就妄自推断加了很多索引。那么如何加索引才是正确的做法呢?

数据库中有一种是单列索引,一种是多列索引,要怎么加需要搞清楚这两者的区别,当查询条件有多个字段时,单列索引和多列索引有很大的区别。
如果使用多列索引,where条件中字段的顺序非常重要,需要满足最左前缀列。

最左前缀:查询条件中的所有字段需要从左边起按顺序出现在多列索引中,查询条件的字段数要小于等于多列索引的字段数,中间字段不能存在范围查询的字段(<,like等),这样的sql可以使用该多列索引。

mysql多列索引适合的场景

  1. 全字段匹配
  2. 匹配部分最左前缀
  3. 匹配第一列
  4. 匹配第一列范围查询(可用用like a%,但不能使用like %b)
  5. 精确匹配某一列和和范围匹配另外一列

order by操作中出现的字段同样适用于按值查找的规则,where+order by中出现的字段需可以建立满足如上五种规则多列索引。 使用多列需要按照最左索引列查找;不能跳过中间列;如果某一列是范围查询,那么其右边所有列无法使用索引。 IN什么情况下是范围查询,什么情况下是多个等值查询?如果有order by排序时,多个等于条件查询就是范围查询,没有order by排序就没有限制。 例如,建立多列索引(name, age, id), 只能使用索引的前两列。in是范围查询 … where name=“nginx.cn” and age in(15,16,17) order by id 可以使用整个索引,in是按值查询 … where name=“nginx.cn” and age in(15,16,17) and id =“3”