html meta description

突然发现一个问题,前几天把网站 _layout/default.html 中的添加了HTML>META[description]属性,
这导致了一个比较严重的问题,Google收录网站,Google搜出来的所有描述,
都变成了设置成的description信息。

查了一下HTML>META[description]的使用场景。

description用于定义网页简短描述
description出现在name属性中,使用content属性提供网页的简短描述

不能每个页面的描述信息都一样,尤其是文章页。最后加上了判断,只有首页有完整的描述信息。
别的界面没有描述信息。

- 完 -

访问谷歌

访问Google成了一个技术活了。

试法多种,唯SSH隧道法最简单,具体步骤不多说,自己搜索。

使用软件:Firefox(如果是Chrome需装插件) + SSH

1
ssh -D 8822 -f -C -q -N [email protected]

备案

具有中国特色的备案,是很麻烦的事情,不多说。
但是,如果域名不备案,国内很多服务不能绑定自己的域名。


后记:提交各种资料,耗时2礼拜左右,终得通过。

gitlab install

说实在,gitlab的体验真是不错,安装也挺简单,就是有一点运行需要的内存不小,512M内存都无法运行。
以阿里云 CentOS6 为例简单的说一下安装过程。

一、下载社区版 Gitlab安装包

gitlab比较厚道,社区版已经够用了,下载地址:https://www.gitlab.com/downloads/
文件名名称类似gitlab-x.y.z.rpm

二、安装

sudo yum install openssh-server

// sendmail or exim is also OK
sudo yum install postfix     
sudo rpm -i gitlab-x.y.z.rpm

// 设置gitlab访问URL
vim /etc/gitlab/gitlab.rb
external_url "http://git.xxxx.com"

// 初始化配置
sudo gitlab-ctl reconfigure

// 启动postfix
sudo service postfix start

初始化配置可能比较慢,需要几分钟。完成后
打开浏览器,访问http://git.xxxx.com就可以了。

默认帐号root, 密码 5iveL!fe

三、关于postfix发邮件

gitlab默认可以发邮件,不需要SMTP配置,只要系统启动了postfix就行了。
因为这个折腾了好久,配置smtp还是比较麻烦的,最后还是采用postfix发邮件。

四、关于80端口

默认gitlab自带nginx,使用80端口启动,如果要修改,把 /etc/gitlab/gitlab.rb
里的external_url 修改为http://git.xxxx.com:18080,\\
然后执行 sudo gitlab-ctl reconfigure

这样就可以使用已有的nginx来proxy gitlab了。


其他版本的Linux,参考gitlab的官方Wiki
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

commit log of first word

5.28日更新,大写关键词
12.01日更新,修改关键字,改为英文

俗话说『无规矩不成方圆』在提交代码到仓库(git或svn)中时,要遵循一定的格式,
所有的log以固定的引导词开始,之后简明扼要的说明,然后空一行,写上详细的说明(非必须),
这样做的好处是,方便从commit log中知道本次提交做了什么变更, 不用再去diff文件,省时省力。

整理了一下常用的commit log引导词:


Added ( 新增加的功能 )

Fixed ( 修复bug )

Changed ( 完成的任务,需求变更,任务发生变化 )

Updated ( 完成的任务,由于第三方模块变化而做的变化 )

Improved ( 功能改进,完善 )

Finished ( 完成某项功能 )

Packaged ( 客户端打包构建结果,并标记版本号 )

从spmjs github上看到关键词都是大写的,遂觉得关键词大写,更容易区分。
故都改成大写了。


ADDED ( 新增加的功能 )

FIXED ( 修复bug )

CHANGED ( 完成的任务,需求变更,任务发生变化 )

UPDATED ( 完成的任务,由于第三方模块变化而做的变化 )

IMPROVED ( 功能改进,完善 )

FINISHED ( 完成某项功能 )

PACKAGED ( 客户端打包构建结果,并标记版本号 )

最新修改,改为中文关键字

增加 ( 新增加的功能 )

修复 ( 修复bug )

修改 ( 完成的任务,需求变更,任务发生变化 )

更新 ( 完成的任务,由于第三方模块变化而做的变化 )

改进 ( 功能改进,完善 )

完成 ( 完成某项功能 )

打包/发布 ( 客户端打包构建结果,并标记版本号 )

如:完成:出租车1.6,结束行程后推送抽奖界面

如果改的地方比较多,不能确认使用什么关键词,
可以拆分成多个功能点进行提交。(git推荐的方式)

------

后记:

commit log注释分为三段:动词,功能模块,变更说明。如:完成(动词):出租车1.6(功能模块),结束行程后推送抽奖界面(变更说明)


读一份好的git commit log,就像读一部长篇小说,一部鲜活的历史。

app seo seed

周末花时间把一个想法变成了代码

主要让前端和后端开发藕合性降低,让网站或APP开发变为和手机移动开发类似的模式,
一般后端开发的人都不怎么熟悉前端交互开发,所以让专业的人做专业的事情,资源最优配置嘛

如果前端交互和渲染从服务器端移动到客户端,虽然减轻了服务器端的压力,\
但带来了一个比较严重的问题 —— SEO \
如何解决这个问题?现在的技术发展已经不是问题了

解决的办法主要有:

  1. 服务器提供特殊模板来渲染给搜索引擎蜘蛛
  2. Google #! URL的解决办法
  3. 服务器渲染启动浏览器实例,渲染前端界面抛给搜索引擎

第一种方法,提供特殊的模板,增加了工作量。第二种方法,google only\
所以我采用了第三种办法,来做一个尝试。 做了一个seed,源码见 github.com/wangxian/seo-express-seed \
后端服务器使用express, 使用phantomjs来渲染前端界面(好像还有一个webloop,也可以做同样的事情)\

主要思路是,后端SERVER URL 路由,如果是 / 判断是不是Spider, 启动phantomjs来渲染,
如果不是则正常 Server一个 static HTML给浏览器,其他的所有URL,
判断判断Spider\
是:启动phantomjs来渲染\
否: 301到前端去渲染(http://hostname/#!/article/2)

测试

使用Chrome打开: 
view-source:http://hk.wangxian.me/

使用curl命令: 
curl -A "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" http://hk.wangxian.me/

比较返回结果中 #index.panel > ul 文章列表UL中的内容;

后记:虽然这样做,不用定义特殊模板来渲染给Spider,但phantomjs较慢,\
可以在用缓存的方式解决,蜘蛛也不会每时每刻都去访问你的站点,是吧;

写完收工了! (写一篇技术文,还真累!)


(配图来自Bing)

换皮

折腾,换皮了!

不得不说,我是一个喜欢折腾的人, 但是不太喜欢写文字,比如这次修改博客的主题,断断续续的
花费了2天时间。 像我这种年纪的人,本该过了折腾的年纪的啦,可还是废寝忘食的折腾一个软件或技术,
比如折腾 sublime 的一个插件, 也常常因为这个原因,延迟了睡觉,挨媳妇说(唉,一声叹息!)

生命不停,折腾不止!

回到主题,这个 theme 是fork rusty shutter 的主题,这位博主也是一个折腾的人,人好像在日本,看好多照片
都是日本的风景,博主比较大度,允许别人fork,博主博客

然后又拿我原来的主题,和新主题做了merge, 之后修改了一些主题上的错误(HTML标签的问题),
删除注释,修改链接,把评论系统从Disqus改为多说

最后增加了多iPhone的响应式支持,表现的还不错,还不快用手机试试。 http://wangxian.me


封面图,借了 rusty shutter 的一张封面图 (盗版啊)

Hello World

第一篇文章,必须是 Hello World !\
和学一门开发语言一样,一如既往。

Style h1 ~ h6

Big title (h1)

Middle title (h2)

Smaller title (h3)

and so on (h4)

and so on (h5)
and so on (h6)
1
2
3
def what?
450
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$valeurs = range(1, 40);
$proba = array_fill(1, 40, 0);
for ($i = 0; $i < 10000; ++$i)
{
$tirage_tab = array_rand($valeurs, 10);
foreach($tirage_tab as $key => $value)
{
$proba[$valeurs[$value]]++;
}
}
asort($proba);
echo "Proba : <br/>\n";
foreach($proba as $key => $value)
{
echo "$key : $value<br/>\n";
}
?>