月盾的博客

TortoiseGit提交到远程仓库时git did not exit cleanly (exit code 128)

月盾

虽然出现git did not exit cleanly (exit code 128)的情况各有不同,不过其中一种是提交时的读写权限有问题,如果本地代码连接的是SSH仓库,那么可能是服务端没有配置SSH Key。github有两个地方配置sshkey,有一个是全局的,另一个是针对单个仓库的,如果给某个仓库配置了Deploy keys(其实和SSHkey一样),提交另一个代码时就会出现git did not exit cleanly。对于我这种不熟练的人来说就想着再添加一个Deploy keys,但是又提示Key already in use,这时就要看看是不是其他仓库单独配置了ssh key。如果仓库太多具体哪个配置了也不太清楚,有个简单快读的办法是在命令行执行 ssh -T -ai .\id_rsa git@github.com,会告诉你哪个仓库在使用本地的id_rsa内容。删掉Deploy keys,配置为全局SSH Keys就行了

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

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