生日一直是过阴历的,所以老婆也不知道我具体是哪一天。
反而,一大早老爸电话过来说生日快乐 .一下子心情感到激动又羞愧,他们生日的时候,我却也只是一个电话过去而已。
本来约定要吃穷某人的,结果因为老丈人、丈母娘发烧,小朋友拉肚子,老婆身体不舒服,所以放弃了这个伟大的计划,回家带小孩了。当然,照顾完小孩睡觉后。去楼下的小摊上叫了瓶啤酒,点了两个菜。算是过了生日。
然而,令人震精的事情发生了。。某些人居然在微博上炫耀:
你说说看, 这个素质 .。。。真不厚道
Submitted by gouki on 2012, October 11, 10:03 PM
生日一直是过阴历的,所以老婆也不知道我具体是哪一天。
反而,一大早老爸电话过来说生日快乐 .一下子心情感到激动又羞愧,他们生日的时候,我却也只是一个电话过去而已。
本来约定要吃穷某人的,结果因为老丈人、丈母娘发烧,小朋友拉肚子,老婆身体不舒服,所以放弃了这个伟大的计划,回家带小孩了。当然,照顾完小孩睡觉后。去楼下的小摊上叫了瓶啤酒,点了两个菜。算是过了生日。
然而,令人震精的事情发生了。。某些人居然在微博上炫耀:
你说说看, 这个素质 .。。。真不厚道
Submitted by gouki on 2012, October 10, 9:50 PM
一般来说测试磁盘的IO功能时都是用的:dd if=/dev/zero of=/root/zerofile bs=1M count=256
这样生成出来的文件大约是268M
为什么是/dev/zero,那是因为:/dev/zero文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。因此可用来创建新文件和以覆盖的方式清除旧文件。
当然dd还有另外一个参数:oflag=dsync
但是有人和我说:
Submitted by gouki on 2012, October 10, 1:54 PM
在项目中遇到点小问题。。。
比如:1.4.0与1.4.1对比。还有1.2与1.21对比
在初期的时候,我都是直接使用version_compare来对比的,但这时候就出现了问题
在国人眼中,1.21其实是1.2的后续版本,它是比1.3小的一个版本。但。。。version_compare即不认的。它认为1.21>1.2,当然1.21也>1.3。。。
好纠结啊。。。
后面没办法,对于1.4.0这种用version_compare了。对于1.21的,直接浮点数来比较了。NND
以后对版本号还是需要有一个规划,不能乱写啊
Submitted by gouki on 2012, October 10, 10:39 AM
之前有在自己博客上介绍怎么样安装PPTP的VPN,但很多人说l2tp其实更安全,所以在想办法升级到l2tp...
随便google了一下,结果文章倒是很多,但几乎都打不开,难道这已经是一个关键字了??
还好google 有cache,所以,打开cache看了一下,并且复制回来,等会我就试试:
第一部分:如何用 Debian / Ubuntu 服务器上架设 PPTP VPN服务器
如果你有一台linux主机,通过putty.exe 或苹果电脑的teminal用SSH登录到主机后要用文本编辑器,若是上传下载编辑好的配置文件就太麻烦了。 我先简单介绍一下VI编辑器的用法,学会VI了就不且上传下载编辑好的配置文件了:
vi /etc/ilovezola.conf 这是进入编辑ilovezola.conf的模式,然后hjkl四个键是方向键,分别是左下上右,按字母x可删除一个字符。按a进入插入模式,hjkl就 不能当方向键用了。退出插入模式按ESC键,保存文件输入命令冒号加字母:w 退出输入命令:q 退出并保存就是 :wq
有了这些基础就可以安装PPTP VPN服务器了。下面绿色的字就是可以复制到命令行里执行的,蓝色的字是需要你对比或复制到文件中的,懒人办事效率高,复制吧,不会错的。
先登录你的主机:
ssh root@114.114.114.114
vi /etc/apt/sources.list
然后删除所有deb前面的#号 ,你按照这里操作就行,我直接引用,这不算抄袭:
接着用下面的命令更新你的软件包数据库
apt-get update
现在我们可以正式安装VPN server了。这里我们选择pptp(vpn 协议的一种),因为简单,一条命令搞定。剩下的无非是一些配置。
apt-get install pptpd
pptpd安装完成后,编辑这个文件,
vi /etc/pptpd.conf
去掉下面两行的注释或者直接添加这两行(在文件的最后).这一步是配置ip地址的范围。
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
然后在编辑这个文件,
vi /etc/ppp/chap-secrets
在这个文件中添加vpn用户,按照下面的格式,每个用户一行。
username pptpd password *
为了让你的用户连上VPN后能够正常地解析域名,我们需要手动设置DNS. vi /etc/ppp/options,找到ms-dns这一项,设置你的DNS.这里我推荐的是Google 最近发布的Public DNS,原因是因为好记。
ms-dns 8.8.8.8
ms-dns 8.8.4.4
vi /etc/sysctl.conf文件,找到"net.ipv4.ip_forward=1"这一行,去掉前面的注释。
net.ipv4.ip_forward=1
运行下面的命令让配置生效。
sysctl -p
重启pptpd服务
/etc/init.d/pptpd restart
最后开启iptables转发
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
ok,安装完毕。
附:使用PPTP VPN的方法:
第二部分:如何用 Debian / Ubuntu 服务器安装成L2TP / IPSec VPN 服务器
Ubuntu 10.04 LTS(Lucid)自带的OpenSwan有NAT的BUG。10.10 openswan无此问题(但是10.10的xl2tpd有问题,不分配IP,需要手动指定,解决方案见下文,本文都是指使用Ubuntu 10.04 LTS)可以从OpenSWAN下载最新版本(2.6.24+)才可以。也可以使用非官方PPA源
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:openswan/ppa
sudo apt-get update
然后查查看是否是已经跟更新到最新
apt-cache policy openswan
openswan:
Installed: 1:2.6.23+dfsg-1ubuntu1
Candidate: 1:2.6.31-1xelerance1
Version table:
1:2.6.31-1xelerance1 0
500 http://ppa.launchpad.net/openswan/ppa/ubuntu/ lucid/main Packages
*** 1:2.6.23+dfsg-1ubuntu1 0
500 http://us.archive.ubuntu.com/ubuntu/ lucid/universe Packages
100 /var/lib/dpkg/status
可见源里面已经获得2.6.31+的版本
apt-get install openswan就可以可以开始配置了
安装的时候一律回车即可
vi /etc/ipsec.conf,改成这样:
version 2.0
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
oe=off
protostack=netkey
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=YOUR.SERVER.IP.ADDRESS
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
vi /etc/ipsec.secrets,改成这样:
YOUR.SERVER.IP.ADDRESS %any: PSK "zhimakaimen"
(别忘了把红色的「YOUR.SERVER.IP.ADDRESS」这部分换成你的服务器的 IP 地址,把「zhimakaimen」部分换成随便一个字串,例如你喜欢的一句话如 ilovemoney,等等。)
运行以下命令,这下有点复杂了,前面的知识不够用了,继续补课,先
vi run.sh
然后复制下面的内容到run.sh并保存
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
然后
./run.sh 这样就执行上面的循环命令了。
检查一下 IPSec 能否正常工作:
sudo ipsec verify
如果在结果中看到「Opportunistic Encryption Support」被禁用(disable)了,没关系,其他项 OK 即可。
重启 openswan:
sudo /etc/init.d/ipsec restart
安装 L2TP。常用的 L2TP 后台软件包是 xl2tpd,它和 openswan 是同一帮人写的。
运行以下命令:
sudo aptitude install xl2tpd
vi /etc/xl2tpd/xl2tpd.conf,改成下面这样,或复制进去就好了
[global]
ipsec saref = yes
[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
;require chap = yes
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
这里要注意的是 ip range 一项里的 IP 地址不能和你正在用的 IP 地址重合,也不可与网络上的其他 IP 地址冲突。你照抄就不会错了。
安装 ppp。这是用来管理 VPN 用户的。
sudo aptitude install ppp
检查一下 /etc/ppp 目录里有没有 options.xl2tpd 这个文件,没有的话就建一个
vi /etc/ppp/options.xl2tpd
文件内容如下,把下面的内容复制进来 :
require-mschap-v2
ms-dns 208.67.222.222
ms-dns 208.67.220.220
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
注意 ms-dns 两行我填的是 OpenDNS。如果你想用其他的 DNS 服务器(例如谷歌的公共 DNS 8.8.8.8 8.8.4.4 ),请自行更换。
现在可以添加一个 VPN 用户了。用文字编辑器打开chap-secrets 文件
vi /etc/ppp/chap-secrets
# user server password ip
test l2tpd testpassword *
如果你之前设置过 PPTP VPN,chap-secrets 文件里可能已经有了其他用户的列表,如上面那个密码为gfw的fuck用户,就既可登录PPTP VPN,也可以登录l2tp的VPN,因为他的server没有指定为l2tp,而是用星号代替了。你只要把 test l2tpd testpassword * 这样加到后面即可。记得要有空格。
重启 xl2tpd
sudo /etc/init.d/xl2tpd restart
设置 iptables 的数据包转发,下面是两行命令哦:
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
因为某种原因,openswan 在服务器重启后无法正常自动,所以我们可以在 /etc/rc.local 文件里写入如下语句:
vi /etc/rc.local
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart
到这里,设置工作已经基本完成。你可以用 iPhone 或 iPad 试着连一下。记得在「Secret」中填入你在上述第三步里填的 zhimakaimen。
如果连接成功,上网也没问题的话,恭喜你,大功告成。我就是这么在linode的Ubuntu 10.04 LTS上搞定VPN的,我之前走了些弯路是因为openswan没安装到最新版,Apple4.us的文章提供的安装方法失败,还好有另一篇文章提供了安装openswan到最新版的方法。所以合并经验,让其他人少走弯路,可以节约学习的时间哦。
L2TP的VPN的使用方法:
我参考了以下文献,综合了一下,写出以上修正版,由于 Apple4.us 保留一切权利,所以我等他们通知我删除这篇派生的文章吧,因为他们仍然保留让我派生的权利,也保留不让我基于他们的文章派生作品的权利。
Submitted by gouki on 2012, October 9, 4:06 PM
Emoji,原来的项目中没有遇到,因为从未想过别人会从网页里发送表情(表情 信息是从iphone手机上发出来的),查了一下资料,果然很多人遇到了这个问题。不过也幸好有了解决方案了。。。
一 什么是Emoji
emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)
表情符号现已普遍应用于手机短信和网络聊天软件。
emoji表情符号,在外国的手机短信里面已经是很流行使用的一种表情。
手机上如何使用emoji:
1.iphone、ipad系统:安装emoji free,再设置-通用-键盘-国际键盘-添加新的键盘,然后把emoji添加在里面即可在发短信和一些输入文本的文本框中输入表情。
IOS 5用户可直接从通用中添加emoji 键盘,无需再安装emoji free
2.android系统:安装“GO输入法国际版”后,在输入法里面点选安装emoji插件可以使用。另外“百度输入法”也自带emoji表情
3.Windows Phone : 安装此 Emoji Keys,在其中输入之后复制粘贴到需要输入表情的地方即可
<此段摘自百度百科 http://baike.baidu.com/view/2631589.htm>
二 Emoji表情符号问题
1 问题:
IOS版本之间发送的Emoji表情符号不兼容,只看到方块
不同IOS版本在数据库存数据时,有时会发生系统错误
2 现象:
IOS 4 输入Emoji表情符,在IOS5.01 显示正常,在IOS5.1中(大陆版)显现为方块, 但IOS5.01/5.1输入的表情符号,显示正 常
IOS5.01/5.1 输入表情符,在IOS5.01/5.1中显示正常,但在IOS4.X显示为方块
输入Emoji入帖子正文, 可正常存储。 但用户昵称在IOS4.X 输入Emoji,系统正常, 而IOS5.01/5.1则提示系统错误。
3 本质:
iOS 5 and OS X 10.7 (Lion) use the Unicode 6.0 standard ‘unified’ code points for emoji.
iOS 5 Emoji 采用Unicode 6 标准来统一code points
iOS 4 on SoftBank iPhones used a set of unofficial code points in the Unicode Private Use Area, and so aren't compatible with any other systems
iOS 4 采用SoftBank Unicode, 一种非官方的, 采用私有Unicode 区域。
4 举例:
one emoji symbol "tiger", it is "\U0001f42f" in iOS5, but "\ue050" in earlier iOS version
虎脸Emoji符号在iOS5 为Unicode:\U0001f42f;而在IOS4.x 为:\ue050 (SoftBank 编码)
另外: 按理讲, 从iOS5 应该兼容以前版本的emoji, 但现在出现5.01版本完美兼容(无论大陆版,美版,还是港版), 而5.1 大陆版出现了不兼容现象(腾讯微信也出现了同样的问题)。
三 问题分析
1 系统存储错误问题(如昵称,帖子内容)
原因:
由于IOS5.X 采用新的Unicode, 其UTF8 编码大多为4个字节, 而由于昵称/帖子内容column并没设成utf8mb4,因此存储会 发生错误。
解决方法:
将昵称/帖子内容设成utf8mb4
2 不同iOS 之间Emoji 不兼容的问题。
原因:
iOS 5 到4 不兼容的问题,很简单,unicode6 和softbank编码的不同
iOS 4 到 5,按理说应该兼容,也就是说,iOS应该自动判断如果是softbank编码,自动转成unicode6。但现在看来, iOS5.1(大陆版)好像只支持unicode6, 而不支持softbank.
解决方法:
客户端发送emoji-encoding: Softbank或unicode6, 由服务端分别给出相应的编码表。
四 解决方案
1 数据存储(MySQL varchar 数据类型对UTF8 支持问题)
MYSQL 5.5 之前, UTF8 编码只支持1-3个字节, 从MYSQL5.5开始,可支持4个字节UTF编码,但要特殊标记。例如我们的帖子内容项,我们加上了这个支持。服务端mysql统一存储为ios5.x也就是Unicode编码。
对应alter语句:
2 编码转换:
iphone手机方案
客户端输入内容时候,统一存储为unicode编码(这里需要从softbank编码转换为unicode编码)。客户端请求内容的时候,需要根据不同的客户端给出不同的编码,ios4采用softbank编码做替换,ios5采用unicode编码直接支持。
android或wp其他手机方案:
如果没有emoji表情库,将无法输入。针对输入问题,将统一采用unicode编码存储。客户端请求内容的时候,将统一用softbank编码,客户端需要把emoji表情符号内置到客户端,做对应的编码和img替换。
web解决方案:
参考android或wp其他手机方案
五 部分代码
1 sql代码
2 java代码
六 参考资料
1 Emoji 全编码表:(我参考的这个)
http://punchdrunker.github.com/iOSEmoji/table_html/flower.html
2 Emoji全编码表
http://code.iamcal.com/php/emoji/
3 iOS5/4 Emoji 兼容性:
http://stackoverflow.com/questions/7856775/how-to-convert-the-old-emoji-encoding-to-the-latest-encoding-in-ios5
4 MySQL emoji问题
http://dropblood.com/archives/ios-mysql-emoji
5 Emoji 中文对应表
http://www.iapps.im/wp-content/uploads/2012/02/emoji-pinyin.png?r=010
七 下载资源
emoji图片和编码表 http://download.csdn.net/detail/qdkfriend/4309051
包括emoji文件表,emoji数据编码表(Unicode编码,UTF8编码,UTF16编码,SBUnicode编码)