## 了解和筛选

早就听说过广告联盟,最近又建立了博客,就想着能在自己的网站上面也引入广告,在意淫了一下以后广告点击量飙升之后,开始了解了下广告联盟的相关信息。百度百科里面的“广告联盟”词条,解释的很清楚,我也就不献丑了。

仔细看了下,我的主机是国外的,没有备案,国内的很多广告联盟如`搜狗联盟`、`discuz联盟`、`网易联盟`就没法进;`阿里妈妈`的那种淘宝味感觉跟我网站的风格不太搭配;`百度联盟`对于没备案的很难通过;剩下的`骆驼网站联盟`、`凡客联盟`、`脉动联盟`和`888广告联盟`实在没接触过,不太想冒险。所以最后`谷歌联盟`算是最好的选择了,虽然很难申请到,可一旦申请到,那绝对是很有好处的

## 了解Google AdSense的相关信息

同样还是很给力的百度百科的词条“Google AdSense”,里面很详细的介绍了Google AdSense的情况,申请的条件,优化广告块的意见,Google提供的各项服务,要遵守的规则。

其中让我比就担心的就是申请条件里面的域名注册满6个月,可是我这域名注册才一个星期没到….有点成功希望渺茫的感觉,不过还是试试看,没准人品就爆发了一会。

## 开始申请

申请的网址是https://www.google.com/adsense/home, 如果你已经登录了Google账号,别简单的以为输入密码就能登录的,得需要同意Google的一个协议才行。正规的进入这个同意协议的页面的路径我不知道了,但是可以通过点密码框下面的“why I can’t acccess”链接,进入后右上角有个Create a Adsense Account的按钮,点击之。进入后可以选择使用Google账号或者新建一个账号用来进入Google AdSense

后面的一些填写资料的过程就不详述了,但是是熬夜干这些的,具体的流程也记不清楚了。

填写资料完毕之后,Google会提示你网站正在审核,大概一个星期之内用邮件通知你审核的结果。我的运气很好,第二天早上就收到了审核通过的邮件.而且我还发现我的博客第一篇文章被一个叫做“1”(不包括引号)的人评论过了,也许Google是通过这个方式来判断网站是否具有交互性的吧。
Google AdSense 初审通过 邮件
## 初审通过之后

初审通过之后,后面就是开始在网站放置测试的广告代码了。很高兴的是初审通过的邮件是用中文写的,所以可以很清楚的跟着上面提示的步骤流程走。

因为只是放置一个测试用的广告代码,所以广告样式的设定,要应用的广告渠道的设定,这些都可以不用关注。拿到代码之后,这个时候就是放置了。

打算放置广告的位置是博客的右边栏。我的博客是用的wordpress,这个里面的模版设定也还算简单,在外观->编辑 里面试过几次之后就很明确的知道对应右边栏的模版–sidebar.php。Google的广告代码是两块JavaScript代码,会在执行之后在这两块JavaScript代码之后插入广告块。

打开一篇博客的文章,用chrome的控制台初略的看看右边栏的页面结构,所有侧边栏的模块都是在div#secondary里面

        
                
        

而其他的模块都是通过一个函数调用的,是一个整体

        

所以广告块只能是在其他所有模块的上面或者下面,当然这只是刚接触wordpress还没能深入的进行个性化的修改的时候。对我这样一个wordpress菜鸟来说,能做到这样的地步已经很得瑟了

## 最终审核失败了

放置完广告代码之后,一切就只能听天由命了。然后很不幸的,一天之后我就收到邮件说我的最终审核没能通过:

********************** 以下是邮件内容 **********************

您好!

正如我们在欢迎邮件中介绍的那样,我们的审核分为初步审核和最终审核。随着您的网站开始投放广告,我们也会开始进行最终审核。您的帐户由于以下原因没有通过我们的最终审核。

问题:

– 内容不足

更多详情:

内容不足:要获得加入 AdSense 计划的批准并在您的网站上展示相关的广告,您的页面上必须要有足够多的文字,以便我们的专家进行审核,也让我们的抓取工具能够确定网页的主题。

要解决此问题,请按以下提示操作:

– 确保您的网页上有足够多的文字,以图片、视频或 Flash 动画为主的网站是无法获得批准的。
– 您的内容应包含完整的句子和段落,而不仅仅只是标题。
– 在您申请加入 AdSense 计划之前,确保您的网站已经完成构建和发布,请勿在网站尚处于测试阶段、建设阶段或者仅包含一个网站模板时申请。
– 将广告代码放到网站上的有效页面中。这个页面不需要是首页,但也不能是除了 AdSense 广告代码之外空空如也的测试页面,否则将无法获得批准。
– 请为访问者提供清晰的导航系统,以便他们轻松找到您网站上的所有版块和页面。
– 如果想要通过 YouTube 视频创收,请申请加入 YouTube 获利计划 (http://support.google.com/youtube/bin/answer.py?&answer=2490020)。请注意,只有视频内容的博客和网站是无法获得批准的。

在您完成必要的修改后,我们将非常乐意重新审核您的申请。

********************** 以上是邮件内容 **********************

起初担心会因为域名注册时间的问题而没法通过,最后却原来是因为内容不足的原因。不过如果只是这个原因,那解决起来到也方便,多写些文章,相信很快内容就能丰富起来

## 后话

乱七八糟扯了很多,这次申请虽然失败了,可如果没有这次申请,那也不会知道自己的网站需要什么、有什么不足。所以,凡是虽然看着麻烦,可行性低,可总要试试看的。希望下次申请能够通过,哈哈

新博客开通

昨天跟一同事帮人copy了一个国外网站,一人分得75元大洋,然后就把内心那股子搞网站的热情激发了。在西部数码上面注册了现在这个域名www.shuizhongyueming.com, 也还便宜55块钱一年,反正这钱花的不心疼。

然后就是找空间了,本来打算买个香港主机(虚拟机),然后听人说亚马逊有个E2C能免费一年。可是折腾了一整天,被那个信用卡,虚拟信用卡,VISA,MasterCard,PayPal之流弄的头晕脑胀,准备放弃,老老实实的花钱买个空间。这个时候,偶然翻了邮箱里面的垃圾邮件,有人推荐个什么免费空间,索性死马当活马医,注册申请了个,到最后就成了现在这个域名所在的空间了。

这个所谓的免费也只是免费一个月,之后可以邀请好友注册,成功一个就延期一个月,可是看了看空间的价格,一年也才30,顿时没了注册账号到论坛贴的心思了。不过在这里也贴上吧,想建个网站玩玩的朋友可以试试

超级云-国内首家无限容量空间,即时开通

申请地址:http://www.mk8888.com/free.html

(shuizhongyueming26132838)超级云,免费无限容量空间,全国首家

老博客搬家

以前有段时间在cnblog上面写了几篇文章,乘着今天也一起搬了过来,可是发现移过来之后的样式很有问题,没法子,就自己改了wordpress里面的主题样式style.css,弄成了个“宽屏版”,这样文章里面贴了代码之后就不会产生一个横向的滚动条了。

感觉这wordpress还有很多东西够折腾的,比如右边侧边栏的自定义什么的,看了下模版,wordpress提供了相关函数的说明,不过很奇怪的是有几个函数竟然没有官方说明,是主题本身也能够提供一些函数的吗?

最近在看《JavaScript权威指南(第六版)》,里面有个例子,是说的

"a" < "b"     // => true

然后我就想了,那中文字符可以进行这样的比较吗,然后就在Chrome的控制台里面测试了一下

"大" < "小"     // => true
"小" < "大"     // => false

那它们是如何比较的?

书里面有这样一句话:

Unicode允许使用多种方法对同一个字符进行编码。比如,字符“é”可以使用Unicode字符u00E9表示,也可以使用普通的ASCII字符e跟随一个语调符u0301。在文本编辑器中,这两种编码的显示结果一模一样,但它们的二进制编码表示是不一样的,在计算机里也不相等。Unicode标准为所有字符定义了一个首选的编码格式,并给出了一个标准化的处理方式将文本转换为一种适合比较的标准格式,JavaScript会认为它正在解析的程序代码已经是这种标准格式,不会再对其标识符、字符串或正则表达式作标准化处理。

对这句话不是很理解,看的很晕。是说的在JavaScript解析之前,已经有程序把它的所有代码转变成了另一种格式的编码吗,而且还不是二进制的

后来偶然看到有encodeURICompent()这样个函数,一般是用来处理URI里面的数据,把一些特殊字符和中文等等进行十六进制编码,以便在不同平台上面数据都能很好使用

然后我就试了下

encodeURIComponent("大");        // =>%E5%A4%A7
encodeURIComponent("小");        // =>%E5%B0%8F

很明显,转化成十六进制之后,”小”的值是大于”大”的

我想,是不是在JavaScript解析之前,浏览器就根据Unicode标准用类似的方式把代码进行了编码,所以等到JavaScript解析的时候,比较”大”>”小”,实际上是类似于在比较”%E5%A4%A7″>”%E5%B0%8F”

不知道有人能跟我讲解一下这方面的知识不,感激不尽

今天工作上面需要对一个表单进行验证,需要判断中文。在网上看到了很多的方式

1. GBK (GB2312/GB18030)
x00-xff  GBK双字节编码范围
x20-x7f  ASCII
xa1-xff  中文
x80-xff  中文

2. UTF-8 (Unicode)
u4e00-u9fa5 (中文)
x3130-x318F (韩文
xAC00-xD7A3 (韩文)
u0800-u4e00 (日文)
ps: 韩文是大于[u9fa5]的字符

 

x是十六进制,u是Unicode编码,这种理解对吗

两者之间有什么区别和联系呢

 

2012年8月15日补充

JavaScript的字符串是使用Unicode编码的,每个字符占用两个字节。编码的方式是Unicode 16,具体是Little-Endian还是Big-Endian则要看操作系统了。所以在针对JavaScript的字符串使用正则时,针对中文使用u4e00-u9fa5

参考文章:http://demon.tw/programming/javascript-unicode-utf-8.html

关于Unicode 16的Little-Endian和Big-Endian,可以参看维基百科:https://zh.wikipedia.org/wiki/%E5%AD%97%E8%8A%82%E5%BA%8F

一直以来,但凡涉及到getElementById,getElementsByTagName,总是会习惯性的在前面加上document对象。就像昨天写的一个博客里面,有个关于清空指定id的后代节点中input type=”text”的内容的函数(传送门)。当我通过document.getElementById()获取指定的ID的对象之后,就开始很傻的一步步的遍历每个节点,看它是不是input type=“text”的;还看改节点有没有子节点,有的话,有几个,然后再考虑是否遍历查找。

代码如下:

 /**
  * [clearUserInput 根据元素的ID找到其子节点(包括子节点的子节点)
中的input元素并且type="text",将其value设为空]
  * @param  {[type]} id [DOM对象或者字符串表示元素的id值]
  * @return {[type]}    [description]
  */
 function clearUserInput(id){
     //参数校验
     if(id === undefined){consoloe.log("参数必须");return 1;}//判断参数是否存在
     id = ((typeof id) === "object")?id:document.getElementById(id);//获取对象
     if(id === null){consoloe.log("未知对象"); return 2;}//typeof null === "object"

     var childrens = id.childNodes,len=childrens.length; i=0;
     for(i;i<len;i++){
         if(childrens[i] === undefined){return;}//到达边界
         if(childrens[i].nodeType === 3){continue;}
         if(childrens[i].childNodes.length !== 0){
             arguments.callee(childrens[i]);//循环遍历        
         }
         if(childrens[i].nodeName === "INPUT" && childrens[i].type === "text"){
             childrens[i].value = "";//内容设为空
         }
     }
 }

 

最后,功能上面实现了,可是每次点击清除的时候,整个浏览器和卡机了差不多…..遍历的计算次数太多了

后来我偶然一下突然想了,既然document对象有getElementsByTagName()之类的方法,那其他的节点和document对象理论上应该是没差的,那它们是不是也应该有这些方法?

我就测试了下,果然一个div对象是有getElementsByTagName()的方法,可是没有getElementById()的方法

元素类型 节点类型
元素 1
属性 2
文本 3
注释 8
文档 9

document.nodeType == 9

一般的HTML标签,如div,p等等,他们的DOM对象的nodeType == 1

就我所知的,nodeType == 1的DOM对象仅有getElementsByTagName()的方法

之后我根据这个修改了一下代码

 /**
  * [clearUserInput 根据元素的ID找到其子节点(包括子节点的子节点)中的input元素并且type="text",将其value设为空]
  * @param  {[type]} id [DOM对象或者字符串表示元素的id值]
  * @return {[type]}    [description]
  */
 function clearUserInput(id){
     //参数校验

     //判断参数是否存在
     if(id === undefined){return 1;}
     //获取对象
     id = ((typeof id) === "object")?id:document.getElementById(id);
     //typeof null === "object"
     if(id === null){return 2;}
     //找到后代节点中的所有input标签
     var inputs = id.getElementsByTagName("input"),
     len=inputs.length, i=0;
     for(i;i<len;i++){
         //到达边界
         if(inputs[i] === undefined){return 3;}
         if(inputs[i].nodeName === "INPUT" && inputs[i].type === "text"){
             inputs[i].value = "";//内容设为空
         }
     }
 }

效率果然显著提升

一直以来都有这样一个属于程序员的意淫:开通一个博客,设计一个很炫的界面,写很多技术方面的文章,然后会有人说谢谢分享、会有人跟你讨论文章里面的一个又一个细节。

今天,这个想法踏出一小步了!

希望自己能够坚持维护这个博客,让它伴随着我一同成长,XD