友情链接做手脚 - 这里面水还挺深

这个世界总需要一些人来制定规则,然后另外一些人想办法去破坏规则,当然这部分人会受到一定惩罚.比较圆滑的一部分是钻规则的空子.就像出现搜索引擎以后,自然就出现了seo这个职业,人们就在使用各种各样的手段.所以搜索引擎定义了 白帽,黑帽及灰帽 .白帽是按照搜索引擎中规中矩去优化.黑帽是走捷径,seo作弊.灰帽就类似上面转空子的那拨人.这里面的水好深哦.今天就简单说下常常遇到的 友情链接交换.互联网也是一张网,所以我们把搜索引擎去收录页面的自动化程序比作蜘蛛,蜘蛛在网上爬来爬去,从A节点到B节点需要一条蛛丝相连,而互联网之间的相连全靠链接,就是 a 标签.链接在互联网世界中非常重要,搜索引擎的好多算

request 模拟post提交表单

node.js环境下,利用request 模拟post提交表单 需要 formstream 插件配合使用.npminstallrequestformstreamvarrequest=require('request') ,FormStream=require('formstream') var form = FormStream()   .field('name', '一介布衣')   .file('head_image', '100x100.png') var upload = request.post('http://yijiebuyi.com/page',

修改阿里云ssh默认22端口

站长都应该有服务器安全意识,虽然很少有人会盯上我这个小博客,但是害人之心不可有,防人之心不可无.如果遇到个好奇心很重的访客,他会试探你服务器上的端口.而我们常常使用的ssh 默认端口是22,一般站长修改的不多.也难免会有人想去暴力破解下密码.所以为了保护自己,我们可以修改ssh默认端口,提高被攻击的门槛.今天我就是要把阿里云vps默认ssh端口改掉.ssh的配置信息存放在这里 /etc/ssh/sshd_confignano/etc/ssh/sshd_config打开配置文件,你会密密麻麻看到罗列好处好多配置项,现在需要把鼠标移动到10-20行之间,找到 #Port 22这个注释是提示你当前s

我的vps运行4个站点,512M内存1M带宽下博客依然秒开不卡顿的原因是什么? - 站长必看

我从统计后台常看到有人site我的站,一部分是打算做友链的,另外还有一部分观望的站长,他们会发现一个固定IP上竟然绑了4个站,而且我的博客反应还足够快,一页列出40篇图文博客几乎是秒出,无延迟无等待,所以我收到一个站长的Email,大概就是问下我阿里云vps花了多少钱.站点加载速度快大概有下面几个因素:此blog是node.js开发的,异步IO处理还是有优势的.可以查看我的另外一篇博文,node.js和其他语言相比的优点在哪里?2.此blog没有用特别复杂的数据库,而且选择了小众化的google推出的kv型nosql数据库 levelDB.此数据库简约而不简单,它强悍的读写能力可以支撑十亿级别

userAgent判断客户端浏览器来自PC还是移动端

今天在三思悦网站通过微信上分享了一篇关于婴幼儿教育的帖子,等来到公司自己点进去一看,彻底凌乱了,看上去很多余的页头,样式完全错乱了,还有画蛇添足的页脚....移动浏览器可视化范围很小,所以充分利用有限的空间去展示有价值的东西,页头,页脚,侧边栏都是可以弱化,甚至不显示效果更佳.下面进行优化改造,我打算采用js来分辨pc浏览器还是移动端浏览器,pc端浏览器和移动客户端浏览器是通过 userAgent 来分辨,直接上代码:navigator.userAgent.match(/Android/i)//安卓客户端浏览器 navigator.userAgent.indexOf('iPhone&#

[转] Node.js一分为二:开源项目真需要“大管家”吗?

猎云网12月15日报道 (编译:西洲豹)Node.js作为服务器编程语言的后起之秀,常用来构建和运行Web应用,近日却爆出其社区出现分裂。由于对官方运营商Joyent公司在Node.js管理上的长期不满,多位核心开发者另立门户,创建了分支Io.js。从GitHub得知,Io.js的第一个版本(1.0.0 alpha1版)将于2015年1月13日发布。Node.js开源社区组织者Mikeal Rogers也是“另立门户”中的一员,他说:“我们不想被另外一家公司任命的管理人员牵着鼻子走,而是想让Node.js的贡献者拥有更多的控制权,并寻求更多的共识。”Io.js与Node.js的分离,再一次凸显

Express 3.x升级到4.x 优缺点

Express 是Node.js Web应用框架,他集成了一整套完善的api,让您能够快速搭建一套Web应用.安装Expressnpminstall-gexpress创建一个启动文件 index.jsvarexpress=require('express'); varapp=express(); app.listen(8000);nodeindex.js既可以成功运行起来应用创建一个路由app.get('/',function(request,response){ response.send("HelloWorld!"); });Expres

node.js cookie 操作

cookie是保存着http头信息中的.所以最原生的方法就是通过node.js的原生方法setHeader来设置.response.setHeader(name, value)方法接收key,value键值对获取 header 里面设置的值通过另外一个方法:response.getHeader(name)根据name 获取 value如下:设置cookieresponse.setHeader("Cookie", ["type=user", "name=一介布衣"]);获取cookieresponse.getHeader("C

AngularJS双向绑定 - 免费入门教程

angular.js快速开始在这一步你会增加一个让用户控制手机列表显示顺序的特性。动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情。请重置工作目录:git checkout -f step-4你应该发现除了搜索框之外,你的应用多了一个下来菜单,它可以允许控制电话排列的顺序。步骤3和步骤4之间最重要的不同在下面列出。你可以在GitHub里看到完整的差别。模板app/index.htmlSearch:<inputng-model="query"> Sortby: <selectng-model="orde

通过url跳转参数实现百度站内搜索

自google退出后,国内主流搜索引擎必须是百度,好多站长也抛google于脑后,一心针对百度优化.今天和大家分享一个百度站内搜索.(一)如果你用了百度的站长工具,左侧其他工具-->站内搜索就可以申请定制自己的站内搜索框.(二)之前三思悦站内搜索用google搜索,但是现在根本打不开的状态,让人很难堪,由于页面UI不想去变动的情况下如何用url跳转实现百度站内搜索呢.之前的google搜索是这样的跳转链接:https://www.google.com.hk/#hl=zh-CN&q=site:sansiyue.com+' + key上面的参数key是通过url编码后的关键词

Error: invalid csrf token

当你的Express 升级到4.0+版本后,有没有遇到过下面这个问题.{ [Error:invalidcsrftoken] expose:true, code:'EBADCSRFTOKEN', statusCode:403, status:403 }上面的错误是在node.js 运行环境的命令行报出来的.页面直接返回了500服务器错误.我执行了什么操作?这是我的一个新站 三思悦 ,此站有个功能是邀请注册,不对外公开注册的.所以管理后台有个页面用来显示 邀请码,同时有个按钮,用来生成验证码,一次生成唯一不重复的50个.所以这个页面对应2个相同的url ,只不过get方式用来呈现为

jquery链式操作,dom操作,事件操作- 基础训练第二篇

jquery选择器之基础训练第一篇链式操作jQuery允许把一系列的操作像链条一项写出来,比如下面的形式$('select').find('[class=city]').find("option:selected").val(); 上面的表达式分步显示是这样的:$('select') 找到所有下拉列表$.find('[class=city]') 过滤class=city的下拉列表$.find('option:selected').val() 找到下拉列表被选中的项的值之所有jquery支持这种极

jquery选择器之基础训练第一篇

jquery是前端开发者最喜欢的javascript开发框架之一,就像他的宣传语一样,写更少的代码,做更多的事情,现在拥有一大波开发者粉丝,甚至微软将它作为官方库,这一切说明jquery在开发者心中确实有很高的地位.jquery有一个强大的构造函数jQuery() 也就是我们常常简写的 $ ,这个构造函数强大之处在于,它能识别复杂的选择表达式进而找到你想要的元素.所以使用jquery的前提是会使用他的选择表达式,下面几种类似css选择器$(document)//选择整个文档对象 $('#documentID')//选择ID为myId的网页元素 $('a[name=me

主域名权重在搜索引擎看来最高

seo的摸索一直进行中,所以这个博客就成了个牺牲品,当初因为nginx做代理同时支持 www.yijiebuyi.com和 yijiebuyi.com 2个域名,熟不知在搜索引擎中这是2个完全不同的站点,所以决定把不带www的站点挑战到带www的站点当时看来百度权重1,www.yijiebuyi.com的收录略高于yijiebuyi.com 所以在nginx做了301跳转,当 yijiebuyi.com 过来的路径全部301跳转到www.yijiebuyi.com经过2个月的观察,发现了下面的问题:百度权重没有变化,goole pr值依旧没变yijiebuyi.com 的收录不亚于 www.y

levelDB前置匹配查询方法

上一篇简单说了levelDB存储复杂数据结构里面介绍了nosql 方式下kv数据如何存储复杂数据结构.今天用实例的方法说明下调用levelDB api的方法,因为一介布衣博客就是就是使用node.js 和 levelDB搭建而成,所以今天还是用此博客来举例说明.需要结合上一篇来学习,关于levelDB的api我简单做了一个封装,看这篇文章 levelup的使用方法 里面的 get ,put ,delete 都非常好理解,就是根据key去查询value ,插入一对key和value ,根据key删除value.createReadStream方法可能不是特别好理解,在levelDB存储复杂数据结

levelDB存储复杂数据结构

levelDB是一种轻量级kv类型数据库,且自己本身并不去维护索引.你可以理解成,levelDB数据库中只有其中的一对kv是有关系的,和其他任何数据没有关系.就拿 一介布衣 博客举例说明一下:博客中有nosql分类,点击nosql应该加载此分类下的所有博文并分页.首先,博文的存储类型如下key: blog.fse89fw8fwe89fwe98fweiwe9fvalue:{_id:'fse89fw8fwe89fwe98fweiwe9f',title:'levelDB存储复杂数据结构',content:'省略500字',category:'n

node.js 用函数实现 setTimeout 的效果

程序中常常有回到一种需求"等一等",就是让当前线程延时等待一下.之前发过一个帖子就是关于 node.js定时器setTimeout(function(){//实现内容},时间值)确实可以起到这样的效果,用起来也非常方便,匿名函数里是你的逻辑实现,后面的时间值是多少毫秒.我们可以自己实现一个方法来模拟setTimeout 函数functionmySetTimeout(ms){ varcurrentTime=newDate().getTime(); while(newDate().getTime()<currentTime+ms); }如何使用:console.log(&

node.js使用leveldb

上一篇简单说到leveldb数据库,此开源项目目前是支持处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库。那么问题来了,node.js环境下如何使用leveldb数据库呢?node.js下需要第三方npm包 levelup 和 leveldown 来支持.安装依赖环境:npminstalllevelupleveldown提醒:levelup 版本最好用0.10.0或者更低版本,最新版本和leveldown编译时出问题.npm 安装指定版本依赖包npminstalllevelup@0.10.0或者你也可以这样npminstalllevel使用起来也非常简单.varlevelup

MongoDB连接字符串格式参数及说明

MongoDB的标准连接字符串格式及参数分析说明标准格式如下:mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]mongodb:// 是一个必填的前缀,它标识当前字符串是标准连接格式。{{username:password@}}可选。给出用户名和密码后,驱动将在连接到数据库后尝试登录。host1 uri里唯一的必填项,数据库的连接地址。:portX 可选。默认连接到27017端口。/database 是希望连接到的数据库名,只有在提供 use

高性能kv数据库levelDB

LevelDB是google公司开发出来的一款超高性能kv存储引擎,以其惊人的读性能和更加惊人的写性能在轻量级nosql数据库中鹤立鸡群,下面简单说下这个文件存储引擎。次存储引擎是google公司2位大神级工程师开发而成.Jeff Dean其人:http://research.google.com/people/jeff/index.html,Google大规模分布式平台Bigtable和MapReduce主要设计和实现者。Sanjay Ghemawat其人:http://research.google.com/people/sanjay/index.html,Google大规模分布式平台GF

jquery 常用小功能收集

在新窗口打开链接$(document).ready(function(){ //全部链接新页面打开 $('a[href^="http://"]').attr("target","_blank"); //部分链接新页面打开,比如class='menu'的链接 $('a[class='menu']').click(function(){ this.target="_blank"; }); });<a href="http://www.op

markdown 语法总结学习

markdown 这种轻量级编辑工具确实给像我这种不会排版的人带来很多亮点,你只需要注重你的内容书写即可,语法也非常简单,常用就是下面这几种,好记好使唤,简单归纳总结一下:文字:*斜体***加粗**_斜体___加粗__上面2种方式都适用.删除线 (像这样 ~~悲剧啊,我被删除了~~)链接:[一介布衣](http://www.yijiebuyi.com)Headers:从#到######表是\<h1>到\<h6>#This is \<h1>##this is \<h2>###### this is <h6>List:1. 1112. 2

mac下非常好用的命令行工具 iTerm2

今天要说的 iTerm2 应该是mac系统中不可多得的命令行工具之一.简单列出几点给我们带来方便快捷的功能点.选中即复制我们之前用过的命令行要么是不能使用常规复制快键键来复制操作,要么是选中后再按键复制,iTerm2很特殊,选中就自动复制成功.去你需要粘贴的地方按下 command + v 即可粘贴成功. 更多mac相关快键键全文查找功能,就和我们在文本编辑器中编辑文字一样,只需要command + f 输入要查找的内容,即可在当前命令行页面查找并高亮显示,如图所示:搜索 register 在界面查找并全部高亮显示,点击搜索框右侧箭头可以循环逐个定位分隔屏幕显示,水平分隔 command +s

angular基础入门学习 迭代器

我们的应用现在有了一个搜索框。注意到页面上的手机列表随着用户在搜索框中的输入而变化。步骤2和步骤3之间最重要的不同在下面列出。你可以在GitHub里看到完整的差别。控制器我们对控制器不做任何修改。模板app/index.html<divclass="container-fluid"> <divclass="row-fluid"> <divclass="span2"> <!--Sidebarcontent-->       Search: <input ng-model="

node.js使用mocha自动化测试程序

之前有过一篇比较简单的关于 mocha 做自动化测试的帖子, mocha测试今天稍晚详细点说下.常见的开源项目你都会发现test目录,当然我们自己创建的项目建议也加上此目录,在这个目录下做自动化测试.目前node.js下做自动化测试的工具也很多,今天我们主要来介绍下如何使用mocha进行自动化测试.安装 mochanpminstall-gmocha这样你就可以创建测试脚本了,如下:varassert=require("assert"); describe('Array',function(){ describe('#indexOf()',fu

node.js自动化测试断言包assert的方法说明

Assent 断言模板包含如下方法:assert.fail(actual, expected, message, operator)assert.ok(value, [message])assert.equal(actual, expected, [message])assert.notEqual(actual, expected, [message])assert.deepEqual(actual, expected, [message])assert.notDeepEqual(actual, expected, [message])assert.strictEqual(actual, ex

linux内核 rename 命令批量修改名称

开头:Linux的 rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C语言版本的了,由于历史原因,在Perl语言大红大紫的时候,Linux的工具开发者们信仰Perl能取代C,所以大部分工具原来是C版本的都被Perl改写了,因为Perl版本的支持正则处理,所以功能更加强大,已经不再需要C语言版本的了。如何区分系统里的rename命令是哪个版本的?输入 man rename 看到第一行是RENAME(1) Linux Programmer’s Manual RENAME(1)那么 这个就是C语言版本的。而

2014年12月28日北京地面交通全线涨价拼车服务必火

写在2014年11月27日,为迎来北京地面交通涨价做纪念.也许某些年以后我会怀念起来曾经4毛钱坐上300路公交绕着三环狂奔.也许以后会拿出当年珍藏的2元地铁通票在孙子面前炫耀.作为一个漂在北京的地铁通勤族,地面交通涨价和我关系很大,但是似乎又和我没啥关系,因为在整个过程"我们"一直是处于被代表,被论证的角色.也许鄙人还没有站到一个高度上去看待这个宏观调控,多出的几百元公交费还是承担的起的(接受,接受,被接受,好像只能这样了,还有别的办法吗,哈哈)进入下一话题:涨价会面临更多的人选择买车,但是面对摇号的门槛,黑车师傅表示愿意为您全心全意服务,可惜脑中羞涩,这样既帮车主补贴了油

mongoose 连接查询控制副本集等操作引导

引用自:https://cnodejs.org/topic/5206581b44e76d216aae072e之前已经有朋友总结了mongoose的一些内容,推荐他的文章,包含了主干部分,这是接着后面写的。接下来是翻译自mongoose guide#Queries文件可以通过一些静态辅助模型的方法检索。任何涉及 指定 查询 条件的模型方法,有两种执行的方式:当一个回调函数:被传递,将立即执行的操作结果传递给回调。未被传递,返回一个查询的实例,它为您提供了一个特殊的QueryBuilder接口。让我们来看看在传递一个回调时会发生什么:varPerson=mongoose.model('Pe

You have not concluded your merge (MERGE_HEAD exists) git拉取失败

今天获取git线上仓库代码报了这个错误:zhangzhi@moke:~/code/ktsg-api$gitpull Youhavenotconcludedyourmerge(MERGE_HEADexists). Please,commityourchangesbeforeyoucanmerge.错误可能是因为在你以前pull下来的代码没有自动合并导致的.有2个解决办法:1.保留你本地的修改git merge --abortgit reset --merge合并后记得一定要提交这个本地的合并然后在获取线上仓库git pull2.down下线上代码版本,抛弃本地的修改不建议这样做,但是如果你本地修

回到顶部