Fork me on GitHub

在线广告系统架构变迁 2013-02-28

Overview

(未完)

广告按业务划分有以下几类:

  1. 展示广告(Banner广告)
  2. 搜索广告(关键词广告)

按计费模式有:

  1. CPT: 按有效广告展示天数计费,可定价或竞价;
  2. CPM: 按有效广告展现次数计费,可定价或竞价;
  3. CPC: 按有效点击次数计费;
  4. CPS: 按效果计费,如,按成交订单额,按流量带来的有效下载或安装次数计费;

广告系统按结构可划分为以下子系统:

在Pi和Github上搭建自己的个人博客 2013-02-27

方法如下:

本站同时托管在家里的Raspberry PiGithub Pages上,并同步保持更新,海外用户会访问Github,国内用户则会访问Pi,不同线路解析域名hugozhu.myalert.info到不同的服务器是通过DnsPod的服务实现的,这么好的服务还是免费的,这里推荐一下。

因为Github Pages只能支持静态网页,你需要一个能生成静态网页的博客生成引擎。我使用的是gor , 也可以使用ruhohGoogle一下还有很多

静态页面博客的好处:

  1. 性能是最好的,很合适用Raspberry Pi来做服务器,节省资源;
  2. 文章可以用Markdown格式来编写,采用Github来做版本控制,我的Blog仓库在 http://github.com/hugozhu/blog ,数据安全很好,误删除也不担心了;
  3. 很容易找到托管环境,方便迁移;
  4. 用Gor在Pi上生成速度很快;再用Nginx提供Web服务,可以直接在Pi上写Blog;
  5. 大繁至简

Github设置

  1. 在你的仓库里增加一个your_github_id.github.com,比如我的github ID是hugozhu,相应的仓库名就是hugozhu.github.com,这个仓库也就是网站的根目录了,在这里放生成好的静态文件
  2. 如果你需要用自己的域名,而不是Github提供的,可以在根目录下增加一个CNAME文件,文件内容则是你的域名,在DnsPod上需要建一个CNAME记录,将你的域名指向your_github_id.github.com. 也就是github原来分配给你的,完成这个设置后,访问your_github_id.github.com会跳转到你的域名;
  3. 每次更新后,Github会在10分钟内生效。

使用Github合作开发项目 2013-02-27

本文大部分内容来自: https://help.github.com/categories/63/articles

Github上合作开发最好的方式是“Fork + Pull Request”。比如我最近需要一个静态Blog生成器,市面上有很多Ruby实现的,但我想要一个Go语言的实现,Github上找到了一个 https://github.com/wendal/gor ,测试了一下已有的功能基本能满足了,就用上了。

但实际使用过程中发现了一个问题,如果在URL中有中文,生成的URL如下没有做URL安全编码:

http://hugozhu.myalert.info/2013/02/27/在Pi和Github上搭建自己的个人博客.html

还有一种情况是如果URL中有空格,如:

http://hugozhu.myalert.info//2013//02/25/Java properties to enviorment variables.html

浏览器遇到这种URL时,会主动进行编码,但这里有两个问题:

  1. 遇到中文时,浏览器是用GBK还是UTF-8还是其它字符集编码后再发送给服务器呢?
  2. 遇到空格时,编码成+还是%20呢? 不同浏览器实现可能不一样,在不同操作系统上也可能不一样(可能和用户设置的缺省语言有关),这样有些用户可能会遭遇404错误了,实际上我在服务器的错误日志上的确看到这样的错误

日志:

系统调试和分析工具 2013-02-26

Linux下的调试和分析工具集


动态DNS程序 2013-02-26

动态根据宽带public ip更新dnspod登记的域名

按照 https://gist.github.com/833369 逻辑重新用Go实现了,用更少的内存开销在Raspberry Pi上跑。

替换上你的Email,密码,域名ID,记录ID等参数,就可以运行了。 会在后台一直运行,每隔30秒检查一遍IP,如果修改了就更新IP。

获得domain_id可以用:

curl curl -k https://dnsapi.cn/Domain.List -d "login_email=xxx&login_password=xxx" 

获得record_id:

curl -k https://dnsapi.cn/Record.List -d "login_email=xxx&login_password=xxx&domain_id=xxx"

将Java的Properties文件转换成环境变量 2013-02-25

Overview

在Java程序中使用properties文件很方便,但有时候需要和脚本配合使用时,需要把properties文件内的多个变量转换成环境变量,本文提供一个转换脚本示范:

比如env.properties如下(=附近可以有空格,也可以有空行)

MYSQL_URL = jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=gbk
MYSQL_USER = root
MYSQL_PASS = 

执行下面的脚本后就相当于

export MYSQL_URL="//localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=gbk"
export MYSQL_USER="root"
export MYSQL_PASS="" 

env.sh脚本代码

#!/bin/bash

我的第一篇博客 2012-12-22

感谢使用Gor编写博客

本文位于 posts/first-blog.md , 你可以任何删掉,修改这个文件

文件开头是当前文章的元数据

  1. date为自动生成, 当然,你可以修改,这是你的自由
  2. permalink 可以是固定地址,也可以由gor为你自动生成
  3. categories 就是分类, 可以多个
  4. tags 同理,多个标签也是很常见的

请确保文件使用UTF8 without BOM编码

你可以通过执行下面的语句来新建一篇博客:

gor post 文章标题