﻿<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
<channel>
	<title>Xiaoxia[PG]</title>
	<link>http://xiaoxia.org</link>
	<description>Yesterday is history, tomorrow is mistery, today is a gift!</description>
	<lastBuildDate>Tue, 07 Feb 2012 19:10:16 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	<!-- generator="WordPress/3.2.1" -->

	<item>
		<title>转换M8的XML通讯录为通用的VCard(VCF)格式</title>
		<description><![CDATA[自从2011年某月某日，在广州大学城的公交上丢了手机之后，就一直用者同学的旧手机。过年后，钱够了，就打算买手机！于是，把以前M8的通讯录转换为Android可以导入的VCF文件。 Android2.3使用的VCard版本为3.0，我导出了一个样例用于分析： BEGIN:VCARD VERSION:3.0 N:黄;小虾;;; FN:黄小虾 TEL;TYPE=CELL:13800138000 TEL;TYPE=WORK:02010086 EMAIL;TYPE=WORK:xiaoxia@xiaoxia.org ADR;TYPE=WORK;CHARSET=UTF-8:;;c12-151;广州;广东;510006; URL:xiaoxia.org PHOTO;ENCODING=B;TYPE=PNG:iVBOR(... 此处省略编码后的图片数据)CYII= X-QQ:10000 END:VCARD 从上面样例可以猜出VCard的大致格式。使用(\r\n)换行表示多个键，冒号(:)把键名和键值分开。分号(;)用来加入参数。 Name[;Attribute=AttributeValue]:Value[;MoreValue] 对上述样例中用到的键名的解释： BEGIN:VCARD 用于开始一个VCard记录。 VERSION:3.0 VCard的版本。 N:姓氏;名字;中间名;尊称（先生、女士、小姐）;不知道 FN 格式化的显示全名 TEL 电话号码 EMAIL 电子邮件 URL 网站 ADR 地址 PHOTO 个人照片 X-QQ QQ号码 X-TWITTER Twitter用户名 END:VCARD 一个VCard记录的结束。 再来研究一下M8里备份的通讯录的格式，下面是我抽取的一个示例。 文件名 mycontact.xml &#60;?xml version="1.0" encoding="UTF-8" standalone="yes" ?&#62; &#60;ContactTable&#62; &#60;Contact&#62; &#60;FileAs&#62;楚中天&#60;/FileAs&#62; &#60;FirstName&#62;中天&#60;/FirstName&#62; &#60;LastName&#62;楚&#60;/LastName&#62; &#60;Phone&#62; [...]]]></description>
		<link>http://xiaoxia.org/2012/02/08/m8-xml-contact-to-vcard-vcf/</link>
			</item>
	<item>
		<title>帮菜汤弄的《有字有谋》网页小游戏</title>
		<description><![CDATA[RT! 菜汤要写活动策划，里面有一个小节目，我出的鬼主意，也用到了这个小网页作为工具。 一开始不知道用啥工具写比较好，我会点VB，但是又不能在Linux写。.Net先排除了，发布了还要别人安装框架，更麻烦。Python嘛，对它的图形处理还不是很熟悉，写起来也不怎么容易。选什么GUI库也是一个难题。 所以，最后选择了一窍不通HTML5。用网页写比较容易跨平台，所以我在Linux下写好，别人也可以用她的Win7来用了。HTML5的入门也不难，花了一个小时看了一篇教程，就开始写了（因为我只用到Canvas）。 我的第一个HTML5写的网页哦。 展示地址： http://xiaoxia.org/upfiles/2012/02/index.html 源码下载： 直接保存页面即可。 玩法很简单，自己摸索吧！！！]]></description>
		<link>http://xiaoxia.org/2012/02/05/characters-and-skills-web-game-for-jessica/</link>
			</item>
	<item>
		<title>读ThinkPHP的Example有感</title>
		<description><![CDATA[前几天下载了ThinkPHP的代码来看，给我的印象没有CodeIgniter(CI)的那么好。或许是因为我下载的是最新的RC版本吧！里面的Examples不全，打开几个提示404，因为比较关心数据库操作方面的代码。另外，跑了一下里面的Blog的Example，功能都挺完善的。不过花了十几分钟看了一下代码，就害怕了。不大喜欢的原因有下： 1、代码很大，这么一个小blog在用了框架之后，还需要敲那么多代码，开发时间也不短吧。 2、把HTML、CSS、Script写在controller里，让controller变得很臃肿，代码也有点混乱。为何不写到View里面去呢？ protected function ajaxUploadResult($info) { // Ajax方式附件上传提示信息设置 // 默认使用mootools opacity效果 //alert($info); $show = '&#60;script language="JavaScript" src="' . WEB_PUBLIC_PATH . '/Js/mootools.js"&#62;&#60;/script&#62;&#60;script language="JavaScript" type="text/javascript"&#62;' . "\n"; $show .= ' var parDoc = window.parent.document;'; $show .= ' var result = parDoc.getElementById("' . $info['uploadResult'] . '");'; if (isset($info['uploadFormId'])) { $show .= ' parDoc.getElementById("' . $info['uploadFormId'] . '").reset();'; [...]]]></description>
		<link>http://xiaoxia.org/2012/01/30/codeignter-thinkphp-example-problems/</link>
			</item>
	<item>
		<title>用CodeIgniter写了第一个企业网站</title>
		<description><![CDATA[某个晚上，发现使用PHP Web Framework来开发一些功能比较一般的商业网站效率挺高的。因此，有兴趣接触一下这方面的东西，免得我每次给自己的应用编写站点都Copy一大堆重复使用过的代码。搞Web的人太多了，同时涌现出来的Web框架也太多了，不知道选择哪一个好，怕选到一个不适合自己的，就浪费了不少时间了（虽说也能从中学到一些东西）。 上网搜索了一下，国外很多人推CakePHP，Zend Framework，Yii，Symfony，CodeIgniter等。在某论坛上看到有很多人推ThinkPHP（TP）的，好像人气挺高的。之前有个同学跟我推荐过ThinkPHP，我当时对基于别人的基础上开发站点还不怎么依赖，没多大兴趣。这次上官网看了一下，没找到在线的Example代码，所以没有理会。 后面看到有人推荐CodeIgniter（CI），听起来也挺不错的，于是上官网看了一个20分钟建博客的视频教程。从此就感觉到用它的框架的确比我之前自己写的那个框架方便多了！虽然要遵循一些规矩比较多，但是功能很强大，很全！点这里可以观看视频“Create a Blog in 20 Minutes"。 第二天在家里，就把CodeIgniter下载下来，为了学习一下，开始写一个新的小站来连连手。第一时间想到的是，给以前初二的时候帮亲戚写的一个家俱网站改版！需求比较简单，就是一个类似CMS的站点，能够支持对新闻、产品信息的CRUD基本功能就行了。 接触新的东西总是兴趣很大，劲头十足的。所以花了不到三天时间，实现了基本功能，就罢工了。目前仅作练习而已。在Coding的过程中，基本上可以脱离网络，因为下载的CodeIgniter压缩包里已经包含了完整的HTML的用户文档，每个功能都给出了具体示例，所以用起来得心应手。特别是数据库操作、分页、上传和图片处理方面，直接从例子里copy代码，稍微改动一下就很足够了。 三天Coding在controller、model上的代码行数大概为500行左右。包括一个200行左右代码的controller以及每个数据库表对应的model。 网站的版面如下： 可以访问此站点，测试各方面的功能。感觉CI写出来的东西，应该没有多少漏洞的吧～特别是这种小站 http://furshop.xiaoxia.org/]]></description>
		<link>http://xiaoxia.org/2012/01/29/use-codeigniter-for-my-first-framework-based-website/</link>
			</item>
	<item>
		<title>2012</title>
		<description><![CDATA[在这新的一年来临之际，我谨代表Panda Group全体成员祝大家新年快乐，事事顺心。 新的一年，新的开始，Panda Group也已经步入了第四个年头。感谢大家对我们的关注和支持，也希望大家和我们一起，记住过去一年来的美好时光，忘记过去的不快与烦恼，从新的起点出发，创造新的传说！ root@xiaoxia-pc:~/project/icmptun# cowsay 'Happy New Year!!!' ___________________ < Happy New Year!!! > ------------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ &#124;&#124;----w &#124; &#124;&#124; &#124;&#124;]]></description>
		<link>http://xiaoxia.org/2012/01/23/2012/</link>
			</item>
	<item>
		<title>手动创建ICMP Tunnel实现VPN上网（附Python实现代码）</title>
		<description><![CDATA[其实这是一篇讲解利用中国移动CMWAP的一些特性来实现免费上网的博文，但是没有以这个为标题，因为 1、用的是2G的EDGE网络，跟2G手机上网一样，速度有限. 2、各地区的移动设备有差别，例如在广州，这种方法行不通。但是广州的移动Wifi是可以通过UDP建立VPN来免费使用的。 3、不想吸引太多人的注意。 我见过很多公共网络都对UDP和TCP有不少限制，以致于我们不能自由地访问互联网。为了摆脱这种束缚，很多人都为此付出了很多努力，例如各种代理软件，各种隧道，各种VPN等。本文介绍的是一种比较罕见的ICMP隧道方式建立VPN。 背景 一年前，因为在县城里没有网络使用，又不想晚上跑到外面上，所以经常使用笔记本连接手机的GPRS网络来上网。打开一些网页或者聊天工具之类的，网速的快慢并不是很重要。但是流量有限，当时开通了300MB的套餐也很快被消耗尽了。有一次，在Ubuntu下创建了一个cmwap网络，cmwap是需要设置代理IP为10.0.0.172才能上网的。但是奇怪的是，我竟然可以ping通我自己博客服务器的IP。所以我想cmwap对外网IP的访问只是限制了TCP和UDP类型的数据包进出而已。 为了验证我的想法是否正确，我在网上查找到了一些现成的Ping Tunnel工具，例如ptunnel。ptunnel至今还可以使用，但是问题很多， 1、ptunnel只支持TCP。 2、我使用了ptunnel之后，我ping不了自己的服务器了。显然ptunnel截获了所有ping包。（或者我用的版本太低？） 3、速度不稳定，可能是因为自己实现的可靠协议不是很完善？ 用cmwap连接后，我使用ptunnel从我博客上下载一个5MB大小的文件。然后用手机查询流量，发现没有少。 由此说明，移动的cmwap是不计算ping的流量的。同时可以大胆猜测，流量计费功能应该是在10.0.0.172的代理服务器上进行的。这就是为何访问移动的一些服务（例如飞信网站）不会收流量费的原因。 我在国内似乎还没有搜索到有文章关于这方面的介绍。同时我在广州用cmwap连接后，无法发送ping包，难道是这个漏洞修补了？有兴趣的朋友可以在自己的地区测试一下。先把连接方式更改为cmwap，然后连上后，ping一下8.8.8.8，看是否收到pong！！！如果能收到，恭喜！你可以利用此特性免费上网。（另外，移动的路由很多，每次连接后得到的IP都不一样，路由也不一定一样。多换几次IP，可以得到能够ping的路由。——2012年1月29日补充） 我发现这个问题后本来打算发博文的，后来不知道为何忘记了。只是偶尔跟身边一些朋友说了一下。 原理 回到主题上！ 前段时间使用UDP隧道建立了一个VPN，把我学校里的一个VPS跟美国的VPS接入了同一个网络。参考了这篇文章《SSH_VPN》，有兴趣的同学可以看一下如何使用系统工具手动建立一个VPN。 这次要做的是，让从笔记本输出的IP包，使用ICMP协议封装后，像ping包一样发送到我的服务器，然后我的服务器解除ICMP的封装，把得到的IP包写入本地路由。接着，把捕获到的发送给笔记本的IP包，使用ICMP封装，像pong包（ping的reply）一样发送到我的笔记本。到达笔记本之后，接触ICMP封装，把得到的IP包写入本地路由。这样就在两个机器之间建立了点对点网络了。在此基础上，使用ip，iptables命令设置一下规则，就建立了一个VPN。 模拟一个网页请求流程， 1、Firefox在笔记本发出一个请求。 2、内核使用默认路由发送这个请求的IP包。 3、因为默认路由的设备设置的是tun0，所以被tunnel程序捕获。 4、tunnel程序读取ip包后，用icmp封装，发送到远程vps。 5、icmp无障碍地通过cmwap网络，发送到远程vps上。 6、远程vps收到后，被服务器端的tunnel程序捕获（tunnel程序捕获所有的icmp数据包）。 7、tunnel程序读取icmp包，获取里面的ip包，写入到本地网络中。 8、因为通过iptables设置了nat，所以该ip包的源地址被改为vps ip后，发送到了所请求的服务器上。 9、一个IP包从请求的服务器上返回到vps，经过nat后，进入tunnel程序建立的网络，被tunnel程序捕获。 10、tunnel程序读取ip包后，用icmp封装，发送到笔记本。 11、icmp回应包无障碍地通过cmwap网络，发送到笔记本上。 12、笔记本接收到该icmp包，被笔记本上的tunnel程序捕获。 13、tunnel程序读取icmp包，获取里面的ip包，写入到本地网络中。 14、内核得到这个ip包，通知指定的应用程序响应。 15、Firefox收到了回应。 很详细吧！！！完整的工作流程就是这样。但关键需要解决的是封装ip包和解除封装。 步骤 需要解决以下一些问题： 1、如何捕获与发送icmp包 用socket的RAW模式即可。 2、如何不影响vps上正常的ping回应 给icmp里的code字段设置一个固定值，默认是0，这个值可以随便设置。例如86。这样我们只捕获与发送code值为86的icmp数据包。跟普通的ping区别开来，互不影响。 同时，避免vps的内核回应我们的icmp包。添加下面的iptables规则。使用到--icmp-type type/code选项。type的值中，8是ping请求，0是ping响应，所以只针对响应包屏蔽。但是为了让服务器端的tunnel程序的icmp能发出去，服务器端在发送的时候，可以把code+1，也就变为87，发送出去。 iptables -A OUTPUT -p icmp --icmp-type 0/86 -j DROP [...]]]></description>
		<link>http://xiaoxia.org/2012/01/16/cmwap-vpn-over-icmp-tunnel-python-code-2/</link>
			</item>
	<item>
		<title>图形学作业：是女人就下50层，是男人就下100层</title>
		<description><![CDATA[这个是我从这个学期的计算机图形学（PS：选修课）的其中一个实验（2DGame）改编而来的一个3DGame。 Windows编译好的游戏与源代码下载：50levels.zip 游戏画面很简单，我不想花太多的心思在图形特效方面，只要可以玩就行。更多的是，积累一些零零碎碎的经验，以后做三维场景的游戏就容易上手。因为没有什么复杂的计算，所以在我的电脑上，CPU的占用几乎总是0。很小巧～！ 游戏内容模仿自曾经玩过的一个被人成为“是男人就下100层”的小游戏，游戏人物的构思参考自“盒子先生”。 在Jessica的指导下，改成了“盒子小姐”！ 玩法很简单： 运行游戏之后，使用空格键开始游戏，用左右键控制人物行走。踩着梯级直下50层即可，不可碰到顶部的刺。游戏时使用空格可以暂停和继续游戏。玩到50层之后，按空格键仍然可以继续玩后面的关卡。]]></description>
		<link>http://xiaoxia.org/2012/01/04/down-50-levels/</link>
			</item>
	<item>
		<title>1000轮渲染，华丽景深诞生了</title>
		<description><![CDATA[续上一篇《三维茶壶与景深》 本次改用disc pattern, disc与jitter稍有不同。两者指的都是摄像机偏差的范围，但是形状不同。因此渲染出来的虚化效果也稍有不同。要了解具体原理，请参考 http://screamyguy.net/DepthOfField/ jittered disc 为了指定渲染轮数所使用的disc pattern，写了下面的函数， #define DISK_SIZE 256 jitter_point disk[DISK_SIZE]; void init_disk() { int i; for(i=0; i&#60;DISK_SIZE; i++){ disk[i].x = (double)(rand()%1000 - 500)/1000; disk[i].y = (double)(rand()%1000 - 500)/1000; if(disk[i].x*disk[i].x + disk[i].y*disk[i].y &#62; .5*.5){ --i; continue; } } } 生成每个点的范围在(-.5, +.5)之间，而且为了保证是disc形状，判断忽略半径大于.5的点。 下面开始测试不同次数的渲染产生的不同效果。 首先从2轮开始测试渲染效果， 看不出是虚化效果，但像近视眼。 8轮渲染， 66轮渲染， 512轮渲染，接近完美！ 接着，玩一下1000轮渲染效果，同时切换不同的景深。 1000轮渲染在我core i3处理器上，耗时10秒左右。 这张截图比较大，点击图片可以放大查看效果！ 更浅的景深，增强背景虚化效果， [...]]]></description>
		<link>http://xiaoxia.org/2011/12/24/1000-times-accumulate-beautiful-depth-of-field/</link>
			</item>
	<item>
		<title>Again: 三维茶壶与景深</title>
		<description><![CDATA[临近考试，忙于复习，发博文只能用简单的语言描述。 模拟景深效果原理（注意，只是模拟，并不是照相机真正景深原理） 通过多次偏移一定的角度来观察同一物体，然后积累合成的画面，就类似照相机的景深效果。 原始渲染画面如下， 使用Accumulation Buffer实现的抗锯齿， 使用Accumulation Buffer实现的景深效果，同时保留抗锯齿， 焦点在第一个茶壶上。 下面尝试更加浅的景深，背景更加虚化。 再虚化一些，类似人注意力高度集中或者高度近视， 景深变浅时，虚化效果越来越差了。 首先，焦点处不清晰，可能是抗锯齿跟景深效果产生了冲突（两者使用了同一张表），也可能是jitter表有问题。 然后，背景虚化也很差。上面使用的都是66轮的jitter积累产生的效果，虽然在我电脑上渲染时间已经超过1秒，但是需要更好的效果，可能起码要有1000轮的Accumulate。 要改善此情况需要一张更大的jitter表! 打算考完试再玩，自己生成一张超大的jitter表 下面尝试把焦点转移到第二个茶壶上。 下面尝试把焦点转移到倒数第二个茶壶， 下载实验代码： dof.tar]]></description>
		<link>http://xiaoxia.org/2011/12/24/again-3d-teapot-and-depth-of-field/</link>
			</item>
	<item>
		<title>复习复习复习，景深景深景深</title>
		<description><![CDATA[今年跟上年一样，圣诞节第二天起床就要进考场。而且还是连考3门期末。。。 复习计算机图形学，把ppt看完了，写了我第二个OpenGL小程序。有一个光源绕着中心的球在转，同时观察者也在转，你可以用鼠标旋转或者缩放来观察。 代码不贴，直接上传附件。不知道为何，升级了wp后，不给我直接上传cpp文件了。。。 test1.cpp.tar 这两天把OpenGL红宝书看完了，感觉要做出我想要的实时景深效果（depth of field）还是需要用GLSL来写，这又涉及到硬件的支持了。 下面是red book上的一段代码，使用j66的时候可怜的FPS不到1，jitter8的时候16左右，但是效果比较差。 前天收到CSDN DB一个，查了一下发现我身边很多同学都中招了。我想各大邮件服务网站都注意一下，发现有用户的邮箱在此列表中，可以给用户发送一个邮件进行提醒。 很少用CSDN，除了下资源。这个DB里没我的帐号…… 试试grep一下你的帐号在不在（周末过后删除链接，有兴趣做密码统计学或者社会工程学者自行电驴下载）： http://lab.xiaoxia.org/www/passmatch]]></description>
		<link>http://xiaoxia.org/2011/12/24/revision/</link>
			</item>
</channel>
</rss>

<!-- Dynamic page generated in 0.343 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-08 03:10:32 -->

