给VPS添加IPV6

[| 2010/06/05 21:11]
今天在网上看到一个文章,是讲关于给VPS添加IPV6地址的,其原理就是利用一台既具有IPV4,又具有IPV6地址的服务器作为代理服务器,通过虚拟一块网卡并将其流量转发至代理服务器,来实现VPS添加IPV6地址的。


实现原理,首先开启TUN,像ramhost是默认开启的,burst.net可以在控制面板里手动开启。假如没有开启的可以联系客服,这里不再赘述。

下载源码并编译:
wget http://tb-tun.googlecode.com/files/tb-tun_r14.tar.gz
tar zxf tb-tun_r14.tar.gz
gcc tb_userspace.c -l pthread -o tb_userspace

这个源码只有一个源文件,代码很短,粗看一下大概是封装和转发的一些东西。

去tunnelbroker.net注册个号,然后Create Regular Tunnel。在IPv4 Endpoint内填入VPS的IP。

建好后,查看Tunnel,Routed /64就是被分配的IPv6地址段。可以从中随便选个IP。

添加虚拟网卡,设置IP等信息。
setsid ./tb_userspace tb [Server IPv4 address] > /dev/null

ifconfig tb up

ifconfig tb inet6 add [你选的IPv6地址]/64

ifconfig tb mtu 1480

route -A inet6 add ::/0 dev tb

一切完成后,ping6 ipv6.google.com测试一下。


原文网址:http://qiaodahai.com/personal/article/2010/openvz-virtual-machine-configuration-ipv6-with-tunnelbroker-net.htm


不过在tunnelbroker.net里是提供Linux下的设置方法的,不依赖外部程序,没有测试,但是原理相同,应该也是好用的。

办港澳通行证

[| 2010/06/03 23:15]
今天准备去办港澳通行证。中午下了课吃了一点饭就急忙回宿舍收拾。拿了证件和钱后跑去坐校车。顺便带上GPS和智器,看看好用不。

去的挺晚,但是有幸在校车上弄到一个座,打开智器和GPS,发现只能搜到两个星。车厢很热,一会就有点晕车,于是不玩了。一直坐到校部。此时1点40左右。

找到公安处,借了户口出来,去凌水派出所照相,租个三轮,过去照了出来。

打车去火车站,途中和司机闲聊,司机很有想法,也是干过实业的。2点半左右到火车站,去坐轻轨。

十几分钟后轻轨到站,下车三轮,到达出入境管理局。

进门拿表,照相,填表,复印证件人很少,不用排队。

填好表后办理,速度很快,几分钟的事,期间用摄像头还照了两次像,不知为何。

交费,办EMS,交回执。

原路返回,4点36到校还户口,郁闷的是发现周四下午只工作到两点半。

找孙BO和江MM吃饭,饭后23路去火车站。小客回校。小客上开GPS,由于靠窗,信号相当好,大概知道小客走的路线是什么了。导航仪挺有意思。

回来,种菜,看新闻,睡觉。坐车太多,头疼。

总体来说这次办理比较顺利,接触到的人态度普遍比较友善。和哈尔滨之行产生鲜明对比。

哈尔滨之行给我留下的印象还是很恐怖的。出租车师傅,家乐福服务员,全都是一副官僚像,感觉像是30年前一样,一个个爱答不理的。


蓝牙GPS模块使用手记

[| 2010/06/01 00:19]
首先感谢国家,再感谢Google。感谢各英文论坛,不感谢中文网站。

今天拿到GPS模块,跑回来试用一下。本来想连接到智器上用的,但是城际通什么的不是动辄上G就是不好使,我急着尝鲜,于是用电脑连接一下。看看能定位不。

以前没玩过GPS,不知道是怎么通信的,上百度搜下,全是广告,剩下的若干结果全都是同一个内容互相抄。无语,只能求助GOOGLE,使用英文搜索(GOOGLE用中文搜索也全是垃圾结果),搜出来一堆结果,看了下,有收获。


Linux下电脑连接蓝牙GPS是把GPS模块映射到串口上,然后有个叫GPSD的服务,从串口读入GPS模块发的信息进行封装,其他导航程序通过读取GPSD提供的数据来分析位置等信息。

首先要解决映射到串口的问题。

首先用Gnome上的蓝牙小工具对GPS模块进行配对。认证码是0000

运行hcitool scan,搜索一下附近蓝牙设备。能搜出GPS模块的MAC。记下来。

有人说要用sdptool browse “你的GPSMAC” 来显示下模块信息看看CHANNEL,我的模块什么也不显示,就使用了默认值,也好用。

修改/etc/bluetooth/rfcomm.conf文件。这就是要映射到的串口的配置文件

rfcomm0 {
bind no; #是否启动时绑定,默认值是no,那就no。
device < GPS MAC ADDRESS>; #模块的MAC
channel 1; #默认是1,由于我只连了GPS模块,所以一般模块就用的channel1
comment "Serial Port"; #随便起个名子,没用
}

然后使用rfcomm connect 0,连接。

假如告诉你已经被占用,就先rfcomm release 0一下。

假如提示*****in process 。那就重启模块,重启蓝牙服务什么的试试,我刚开始遇到这个问题,后来过了会莫名其妙就好了。

假如没问题的话,会提示你已经连上了,说按CTRL+C可以退出。不要退出。退出后映射的虚拟串口就又没了。

下面启动gpsd,没装的要装上。gpsd /dev/rfcomm0

下面就可以启动其他gps客户端来定位导航什么的了。如果只是想测试一下模块是否好用,就使用xgps,可以显示星图,和当前位置等一些信息。
xgps是存在于gpsd-clients软件包里的。



在宿舍窗台上能搜到的星:点击在新窗口中浏览此图片

模块是淘宝买的,鼎天2100。三个指示灯,红灯在电量不足时闪烁。蓝灯标识蓝牙连接状态,连接上后长亮,否则闪烁,绿灯标识定位状态,可有效定位时长亮,反之闪烁。

上几个图,手机拍的,图片不清晰,呵呵。在目录中显示的是缩略图,大图会在文章阅读页面显示。

点击在新窗口中浏览此图片
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片


中国乒乓球一直独孤求败,记得小时候男乒还算不上绝对第一,老瓦那会经常给中国搞点惊险时刻。女乒一直就是绝对第一。这不是什么好事,冠军都被你包揽了一点意思没有。没人和你玩了。这次假如赢了又能怎么样?都赢过那么多次了,不过是连胜数字加了一。再说了,女乒赢了房价能降下来不?通胀能平息不?什么事都不頂。不要拿什么民族自豪感来说事,你赢了人家老外能高看你一眼?回回都你赢,人家早都不看这了,没意思。

再说个不好听的,什么人老追求民族自豪感啊?答案是除了这个什么都没有的人,看人家朝鲜,老追求民族自豪感了,又是建设强盛大国,又是解放全世界的。没办法,物质没有,只能精神上追求胜利了。体育这东西是强身健体用的,不是高考,重点是过程和自身收获。结果对我们不重要,当然对乒协领导那就另当别论了。

这次输得还不彻底,新加坡那几个也是中国去的,没看点。输给欧洲人就好了,可以刺激刺激已经比较萎靡的乒乓球。世界杯和NBA为什么这么火?一方面因为身体对抗较激烈,但主要是因为有悬念,有悬念才有观众。半夜有球赛,很多球迷会爬起来看,因为不知道谁赢啊。乒乓球就算了,绝大多数又是中国赢,没意思。

为了用用博客新添加的图片功能,贴个图。
点击在新窗口中浏览此图片

Blog今日更新:图片显示

[| 2010/05/30 01:25]
最近几天在搞博客的图片显示,之前去面试的时候面试官就提出过“你的博客只是一些文字的东西,不能显示图片啊”。不能显示图片确实是个硬伤,是博客功能的一大缺失,今天终于搞完了。顺利实现了图片显示功能。


首先就是考虑图片的存储位置和在表示方式。

某些博客程序把图片放到mysql里,这确实很方便,易于管理。但是效率实在不敢恭维,数据库服务器本来就是系统瓶颈,还把图片都扔进去,无疑加大了数据库服务器的负载。并且也不利于分开部署,所以我决定把图片以文件的格式存放。

然后需要考虑图片在文章中的表示方式。最后展示给用户的时候肯定是html了,但是存储到数据库的时候假如存储成html标签的话既不安全,也对兼容性有影响。所以决定使用UBBCode方法,用“[”代替“<”,在显示时再转换。转换过程很简单,正则表达式即可。

这时又出现了一个问题,就是在首页显示的时候,由于要截取文章的前端部分显示,很有可能将img标签截断,这样影响显示。想了好几天,今天终于找到了一个比较好的方法:先用preg_split把文章按“img标签对”作为分隔符分开,这样其他文字就被分成了几大段,通过判断这些段落的起始位置和结束位置可以很简单的判断是否有“img标签对”跨越分界线。若有,则把分界线左移即可。

实践中还发现另外两个问题,一是正则匹配贪婪性问题,若不配置成非贪婪,那么在有多张图片的时候,会匹配第一个img开始标签和最后一个img结束标签。会导致问题,所以要加上问号设置为非贪婪匹配。问题二是img标签对不成对的问题,有可能文章中为了说明[img]而写了一个,这样的话匹配时会从该[img]开始匹配,直到遇到一个【/img】为止,显然会破坏文章,所以匹配img标签对时正则表达式应写成“以[img]开始,中间是非[img]的任意值,以【/img】结束”,这样可以保证匹配的图片url是正确的。



作为一个网站,首页速度非常重要,假如打开首页的时候加载了一大堆巨大的图片,会严重浪费带宽,也会因为页面打开过慢而造成不好的用户体验,所以我决定在首页显示缩略图,在正文中显示原图。这样就遇到了一个问题,就是在用户上传图片的时候可以自动生成缩略图。由于图片处理是比较耗费资源的,所以我决定使用C语言来做这件事。

OpenCV是一个很好用的图形库,很容易就做了个生成缩略图的小程序出来。在用户上传图片后自动调用该程序生成一个缩略图。不过每次生成缩略图都会调用该程序。进程创建和切换的开销太大,稍后会改装成服务来运行。


由于首页上显示缩略图,所以url和正文的不同,需要做相应修改,这里使用了preg_replace_callback,自己写了回调函数,将url进行相应的转化。


至此,图片功能就实现了。下一步要做的就是优化功能,在显示大图时像其他网站一样,先下载缩略图显示一个模糊的图像,再一点一点下载大图替换成清晰图像等功能。


贴个图,呵呵:
点击在新窗口中浏览此图片

左侧钟表做成iframe的好处

[| 2010/05/25 00:50]
本来是为了方便,所以把左侧的那个表搞成iframe包含进来,今天看了下日志,发现这样做还有其他好处。

由于搜索引擎在爬取网页的时候往往不会将iframe的权重算入当前页面,所以搜索引擎对于爬取iframe内的内容并不热心。这样无实际内容并且包含占用流量的图片的表就不会被搜索引擎们抓取太多。节省了双方流量。降低了服务器的负载。
博客有段时间没有更新了,简陋的界面一直为人所诟病,今天决定加点动态的挂件:时钟和消息框。

消息框前两天做好了,今天主要做钟表。

首先是遇到一个问题:时钟单独作为一个页面显示的时候IE,FF,Chrome均正常。但是用require将代码require进主页面后Chrome和FF无法正常工作,IE中表针形状错误。改来改去,不知道问题到底出在哪里。于是直接用iframe包含钟表的方式。解决了。

然后是时钟刷新问题,怎样控制表针每秒移动一个格呢?两种方法:
一,读取服务器时间,使用setInterval隔1000ms刷一次。
二,读取服务器时间,获取脚本载入时间。求时间差,每次刷新时取得当前系统时间并加上时间差。


首先我用了方法二,这种方法的缺点就是在钟表载入后不能修改系统时间,曾经尝试修改了次,IE随着时间的修改表针也移动了,Chrome在修改后表针照旧走,走半分种后就停住再也不动了。。用Chrome里的JavaScript调试器查看了下,系统时间修改后Chrome里Date方式得到的时间并没有随之改变。这可以解释为什么修改了系统时间表针不做相应移动。但走半分种就停住就不知道为什么了。好在一般没有人天天调时间玩,所以这也不是个问题。

然后又试了试方法一,由于setInterval的问题,间隔1000ms并不精确,使用Chrome和IE进行对比,每隔一分钟两者中的钟表要相差1秒。当然不同机器表现不同。总之这种方法计时是相当不准确的,解决方法就是间隔一段时间向服务器请求新的时间,但这样会增加服务器负载。后来研究了下其他网站的一些倒计时,大多是setInterval,这样的准确度是没有方法二高的,好在这些应用对时间精确度要求不高,有些误差也可以接受。这种方法不依赖于客户机时间,避免了一些兼容性问题和出现诡异结果的可能性。

最后选用了方法二。

把代码整理了下,上传。升级成功

右下角弹框的实现

[| 2010/05/19 00:44]
今天想做个在右下角弹框的功能。

首先找了一些成品。发现居然都不能随着页面的滚动而移动。

解决方法:
一,使用window.scroll事件动态调整位置。缺点:快速滚动页面时明显抖动。故不用。
二,css中position:fixed。但顾及IE6的兼容性,需加:
* html #winpop {position: absolute; top: expression(offsetParent.scrollTop+document.documentElement.clientHeight-this.offsetHeight); }

其中* html规则只对IE有效。

我采用了方法二。完美。

准备设计成如下动作:打开页面时,框自下而上移动上来,停留一段时间,隐藏到只剩标题。鼠标移上,挪出;鼠标离开,隐藏。

刚开始就是很简单的的设计,检测到onMouseOver 就调用挪出函数,检测到onMouseOut就调用隐藏函数。挪出函数(show)和隐藏函数(hide)都用setInterval来实现渐渐移出/隐藏的动态效果。达到移动效果后使用clearInterval结束循环。但是很快发现框发生了颤抖,陷入死循环。

去网上查了下资料,发现JavaScript是单线程运行的,所有系统事件触发的回调函数都放到消息队列中依次执行。这样的话在框上升过程中鼠标移开,那么show和hide同时运行,各自不停的向消息队列插入挪出和隐藏消息。结果框始终不能完全隐藏或完全挪出。于是不停上下颤动。陷入死循环。

解决方法:调用hide函数时首先使用clearInterval结束一下show函数的循环,同理,调用show函数时也结束hide函数的循环。这样就不会产生两循环同时运行的结果了。



总结:JavaScript使用单线程模型固然省去了很多同步互斥问题,但是也影响了其实时性,消息队列的使用使函数从被调用到真正运行存在一定延迟,导致设置同样的延时,不同浏览器上实际延迟时间不同,给用户的体验也不同。Chrome中框的运动速度要明显快于IE8。
水木社区转一转,感慨。牛人都在为了offer取舍发愁:我是去微软呢还是**公务员还是IBM。


学校的好坏师资并不重要,还是环境重要啊。这几天都开始沾沾自喜了。跟牛人比其实什么也不是。

scp--依赖于openssh-client

[| 2010/05/13 16:59]
今天想用scp往vps上传点东西,结果告诉我vps上没有装scp,yum search scp,没有靠谱的结果,搜了会,发现scp是依赖于ssh的,所以需要安装openssh的客户端,即openssh-client,然后就有scp了。

注:scp传文件的时候需要客户端和服务器都有scp。否则就会失败
分页: 15/23 第一页 上页 10 11 12 13 14 15 16 17 18 19 下页 最后页 [ 显示模式: 摘要 | 列表 ]