<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>山大芋折腾志</title>
	<atom:link href="http://spud.in/feed" rel="self" type="application/rss+xml" />
	<link>http://spud.in</link>
	<description>The world is a ... 〇</description>
	<lastBuildDate>Sat, 31 Dec 2011 13:37:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Good bye，Good luck</title>
		<link>http://spud.in/diary/good-bye-good-luck.html</link>
		<comments>http://spud.in/diary/good-bye-good-luck.html#comments</comments>
		<pubDate>Sat, 31 Dec 2011 13:28:59 +0000</pubDate>
		<dc:creator>spud</dc:creator>
				<category><![CDATA[日记]]></category>

		<guid isPermaLink="false">http://spud.in/?p=488</guid>
		<description><![CDATA[过去的一年是自身发生不少变化的一年。 开始了期待已久的工作生涯。去南京看鸡鸣寺的樱花。在上海谜底热情拥抱陌生人。独自出远门去了重庆和泸沽湖。潦草完成坑爹的毕业论文。迎来了一些人，送别了一些人。认识到了自己过去的种种愚蠢。明白了对待很多事情的正确方式。一些情景现在回想，哪怕最后扑街是必然，但若早些知道更好的方式，或许能有个好看些的姿势。 感谢一年来遇见的美丽的人们和一直陪伴的朋友们。许多收获，都是缘分，不过顺势而为，保持真实与自由，做自己认为应该的事情，并未太多投入。虽然结局并不都与预期相同，也留下些许烂肠困惑，但想起来终归还是会感到欣喜。这些都让我对未来怀抱信心与期待。 希望来年能够少些杂念与杂事，多一些自己计划中的有趣事情，有一些积累和沉淀。其他一切依旧随缘，如果世上真的有神明，他似乎还蛮喜欢我的嘿嘿。祝你我都能好运。新年愉快 :)]]></description>
			<content:encoded><![CDATA[<p>过去的一年是自身发生不少变化的一年。</p>
<p>开始了期待已久的工作生涯。去南京看鸡鸣寺的樱花。在上海谜底热情拥抱陌生人。独自出远门去了重庆和泸沽湖。潦草完成坑爹的毕业论文。迎来了一些人，送别了一些人。认识到了自己过去的种种愚蠢。明白了对待很多事情的正确方式。一些情景现在回想，哪怕最后扑街是必然，但若早些知道更好的方式，或许能有个好看些的姿势。</p>
<p>感谢一年来遇见的美丽的人们和一直陪伴的朋友们。许多收获，都是缘分，不过顺势而为，保持真实与自由，做自己认为应该的事情，并未太多投入。虽然结局并不都与预期相同，也留下些许烂肠困惑，但想起来终归还是会感到欣喜。这些都让我对未来怀抱信心与期待。</p>
<p>希望来年能够少些杂念与杂事，多一些自己计划中的有趣事情，有一些积累和沉淀。其他一切依旧随缘，如果世上真的有神明，他似乎还蛮喜欢我的嘿嘿。祝你我都能好运。新年愉快 :)</p>
]]></content:encoded>
			<wfw:commentRss>http://spud.in/diary/good-bye-good-luck.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>《黑客与画家》摘录</title>
		<link>http://spud.in/share/excerpts-from-hackers-and-painters.html</link>
		<comments>http://spud.in/share/excerpts-from-hackers-and-painters.html#comments</comments>
		<pubDate>Sun, 04 Sep 2011 09:09:59 +0000</pubDate>
		<dc:creator>spud</dc:creator>
				<category><![CDATA[分享]]></category>
		<category><![CDATA[书摘]]></category>

		<guid isPermaLink="false">http://spud.in/?p=407</guid>
		<description><![CDATA[《黑客与画家》是我今年看到过的最好的非技术类书籍，没有之一。有机会的情况下我会向每个朋友推荐这本书。其中探讨了一些有趣但一直被忽视了的事情：青少年与所处世界的关系、黑客与其他创作者相似的地方、对于分配不均的再认识、如何保持观点又不惹恼他人、怎样创造出优美可靠的软件等等。 无论你是程序员，创业者，设计师或者对这个世界的运作存在着疑惑，都能够在其中找到答案。 当时一时头脑发热，才看了一半就把它放上了摆摆书架。之后就不断收到有人想要向我借阅的通知，并且目前只有我这么一本可借。现在看完了，发现有点儿舍不得，但是既然都做了这种决定了还是贡献出来吧。 于是我决定对这本书做一些摘录，把其中较为普适，值得与大部分人分享的部分记录分享一下，也希望后续的读者们可以继续进行这个事情，一本书只有被人们反复阅读，其价值才能够得以不断升华。 1.在任何社会等级制度中，那些对自己没信心的人就会通过虐待他们眼中的下等人来突显自己的身份。 &#8230; 正是因为这个原因，在美国社会中低层白人是对待黑人最残酷的群体。(p6) 2.一起攻击一个外人，所有人都因此成了自己人。这就是为什么最恶劣的以强凌弱的事件都与团体有关的原因。(p7) 3.我认为，真实世界的关键并非在于它是由成年人组成的，而在于它的庞大规模使得你做的每件事都能产生真正意义上的效果。学校、监狱、上流社会的女士午餐会，都做不到这一点。这些场合的成员都好像关在封闭的泡沫之中，所作所为只对泡沫内部有影响，对外部没有影响。(p9) 4.凭什么说13岁的小孩自己有问题。如果这是激素过多的生理问题，那就应该普遍存在。可是，蒙古的游牧民族在13岁时难道也是这么空虚吗？我读过许多历史资料，找不到任何一条20世纪之前的历史事实支持这个理论上应该普遍存在的现象。(p11) 5.如果存在对于真正能力的外部测试，待在等级关系的底层也不会那么痛苦。球队的新人并不会怨恨老队员的球技，他希望自己也能如此 &#8230; 最重要的是，老队员的地位是通过他们本身出色的能力获得的，而不是通过排挤他人获得的。(p14) 6.现行体系中没有什么事是必然的。他是现在这个样子，大部分是因为没人去改变它。(p16) 7.黑客与画家的共同之处，在于他们都是创作者。&#8230; 他们本质上都不是在做研究，虽然在创作过程中，他们可能会发现一些新技术。(p18) 8.计算机科学就像一个大杂烩，由于某些历史意外，很多不相干的领域被强行瓶装在一起。这个学科的一端是数学家&#8230;中间部分是计算机博物学家&#8230;另一端则是黑客，志向写出有趣的软件，对于他们来说，计算机知识一种表达的媒介。(p18) 9.你把整个程序想清楚的时间点，应该是在编写代码的同时，而不是在编写代码之前，这与作家、画家和建筑师的做法完全一样。(p22) 10.一种好的编程语言，应该向油画颜料一样，能够使得我们很从容地改变想法。动态类型语言在这一点上就是赢家，因为你不必提前就设置好各种变量的数据类型。 &#8230; 优美的软件也要求对美的狂热追求。如果你查看优秀软件的内部，就会发现那些预料中没有人会看见的部分也是优美的。(p28) 11.事实表明，从他人的角度思考问题正式成功的奥秘所在。 &#8230; 了解别人对于事情的看法，并不代表你为他的利益服务。某些情况下，比如打仗的时候，了解对手正是为了打击对手。&#8230; 判断一个人是否具备“换位思考”的能力有一个好方法，那就是看他怎样向没有技术背景的人解释技术问题。(p31) 12.（当主流的声音与自己认为正确的意见相背时，如何与对方辩论）一种方法就是逐步把辩论提升到一个抽象的层次 &#8230; 公鸡它的“元标签”。 &#8230; 另一种反击的方法就是使用隐喻。 &#8230; 所有反击方法中，最好的一种可能就是幽默。狂热分子都有一个共同特点：缺乏幽默感。(p49) 13.盗版实际上是一种价格歧视，只不过针对的是最底层的消费者。 &#8230; 有些服装品牌的目标客户是“都市青少年”，这些品牌的专卖店对店内偷窃行为就睁一只眼闭一只眼，因为在它们的目标市场中，那些在店内行窃的“顾客”也是流行风尚的带头人，可能会带动本品牌的销售。(p76) 14.真正重要的是做出人们需要的东西，而不是加入某个公司。(p98) 15.波音747飞机驾驶员的收入大概是商场收银员的40倍，但前者不是贵族，后者也不是奴隶，这种收入差距只是因为前者的技能比后者的要值钱得多。&#8230; 现代社会的收入差距扩大是一种健康的信号。&#8230; 如果不得到报酬，人们是否愿意创造财富？唯一个可能是，工作必须能提供乐趣。(p121)]]></description>
			<content:encoded><![CDATA[<p>《<a href="http://book.douban.com/subject/6021440/" target="_blank">黑客与画家</a>》是我今年看到过的最好的非技术类书籍，没有之一。有机会的情况下我会向每个朋友推荐这本书。其中探讨了一些有趣但一直被忽视了的事情：青少年与所处世界的关系、黑客与其他创作者相似的地方、对于分配不均的再认识、如何保持观点又不惹恼他人、怎样创造出优美可靠的软件等等。</p>
<p>无论你是程序员，创业者，设计师或者对这个世界的运作存在着疑惑，都能够在其中找到答案。</p>
<p>当时一时头脑发热，才看了一半就把它放上了<a title="摆摆书架" href="http://bookfor.us" target="_blank">摆摆书架</a>。之后就不断收到有人想要向我借阅的通知，并且目前只有我这么一本可借。现在看完了，发现有点儿舍不得，但是既然都做了这种决定了还是贡献出来吧。</p>
<p>于是我决定对这本书做一些摘录，把其中较为普适，值得与大部分人分享的部分记录分享一下，也希望后续的读者们可以继续进行这个事情，一本书只有被人们反复阅读，其价值才能够得以不断升华。</p>
<p>1.在任何社会等级制度中，那些对自己没信心的人就会通过虐待他们眼中的下等人来突显自己的身份。 &#8230; 正是因为这个原因，在美国社会中低层白人是对待黑人最残酷的群体。(p6)</p>
<p>2.一起攻击一个外人，所有人都因此成了自己人。这就是为什么最恶劣的以强凌弱的事件都与团体有关的原因。(p7)</p>
<p>3.我认为，真实世界的关键并非在于它是由成年人组成的，而在于它的庞大规模使得你做的每件事都能产生真正意义上的效果。学校、监狱、上流社会的女士午餐会，都做不到这一点。这些场合的成员都好像关在封闭的泡沫之中，所作所为只对泡沫内部有影响，对外部没有影响。(p9)</p>
<p>4.凭什么说13岁的小孩自己有问题。如果这是激素过多的生理问题，那就应该普遍存在。可是，蒙古的游牧民族在13岁时难道也是这么空虚吗？我读过许多历史资料，找不到任何一条20世纪之前的历史事实支持这个理论上应该普遍存在的现象。(p11)</p>
<p>5.如果存在对于真正能力的外部测试，待在等级关系的底层也不会那么痛苦。球队的新人并不会怨恨老队员的球技，他希望自己也能如此 &#8230; 最重要的是，老队员的地位是通过他们本身出色的能力获得的，而不是通过排挤他人获得的。(p14)</p>
<p>6.现行体系中没有什么事是必然的。他是现在这个样子，大部分是因为没人去改变它。(p16)</p>
<p>7.黑客与画家的共同之处，在于他们都是创作者。&#8230; 他们本质上都不是在做研究，虽然在创作过程中，他们可能会发现一些新技术。(p18)</p>
<p>8.计算机科学就像一个大杂烩，由于某些历史意外，很多不相干的领域被强行瓶装在一起。这个学科的一端是数学家&#8230;中间部分是计算机博物学家&#8230;另一端则是黑客，志向写出有趣的软件，对于他们来说，计算机知识一种表达的媒介。(p18)</p>
<p>9.你把整个程序想清楚的时间点，应该是在编写代码的同时，而不是在编写代码之前，这与作家、画家和建筑师的做法完全一样。(p22)</p>
<p>10.一种好的编程语言，应该向油画颜料一样，能够使得我们很从容地改变想法。动态类型语言在这一点上就是赢家，因为你不必提前就设置好各种变量的数据类型。 &#8230; 优美的软件也要求对美的狂热追求。如果你查看优秀软件的内部，就会发现那些预料中没有人会看见的部分也是优美的。(p28)</p>
<p>11.事实表明，从他人的角度思考问题正式成功的奥秘所在。 &#8230; 了解别人对于事情的看法，并不代表你为他的利益服务。某些情况下，比如打仗的时候，了解对手正是为了打击对手。&#8230; 判断一个人是否具备“换位思考”的能力有一个好方法，那就是看他怎样向没有技术背景的人解释技术问题。(p31)</p>
<p>12.（当主流的声音与自己认为正确的意见相背时，如何与对方辩论）一种方法就是逐步把辩论提升到一个抽象的层次 &#8230; 公鸡它的“元标签”。 &#8230; 另一种反击的方法就是使用隐喻。 &#8230; 所有反击方法中，最好的一种可能就是幽默。狂热分子都有一个共同特点：缺乏幽默感。(p49)</p>
<p>13.盗版实际上是一种价格歧视，只不过针对的是最底层的消费者。 &#8230; 有些服装品牌的目标客户是“都市青少年”，这些品牌的专卖店对店内偷窃行为就睁一只眼闭一只眼，因为在它们的目标市场中，那些在店内行窃的“顾客”也是流行风尚的带头人，可能会带动本品牌的销售。(p76)</p>
<p>14.真正重要的是做出人们需要的东西，而不是加入某个公司。(p98)</p>
<p>15.波音747飞机驾驶员的收入大概是商场收银员的40倍，但前者不是贵族，后者也不是奴隶，这种收入差距只是因为前者的技能比后者的要值钱得多。&#8230; 现代社会的收入差距扩大是一种健康的信号。&#8230; 如果不得到报酬，人们是否愿意创造财富？唯一个可能是，工作必须能提供乐趣。(p121)</p>
]]></content:encoded>
			<wfw:commentRss>http://spud.in/share/excerpts-from-hackers-and-painters.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>耍两个css3小trick</title>
		<link>http://spud.in/tech/flip-and-shake-with-css3.html</link>
		<comments>http://spud.in/tech/flip-and-shake-with-css3.html#comments</comments>
		<pubDate>Sun, 28 Aug 2011 08:02:05 +0000</pubDate>
		<dc:creator>spud</dc:creator>
				<category><![CDATA[折腾]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[rotate]]></category>

		<guid isPermaLink="false">http://spud.in/?p=466</guid>
		<description><![CDATA[介绍两个css3做的小效果。都是在webkit下做着玩的，完全没考虑浏览器兼容什么的。 效果一：摇晃 用过iphone的同学应该知道，当你要调整图标顺序或者删除app的时候，长按之，然后所有图标都会很萌的在那里打颤，并且脑门上会多出来一个小叉让你点。 仔细看了一下，其实这种小颤的效果就是图标在左右小幅度摇摆而已，当中或许还加入了一些很细微的随机位移吧。 好，我现在想把这种效果用到web页面上要怎么弄嘞。 一开始我想到的是css3 transition这个属性。transition，顾名思义就是过渡的意思，语法如下： transition:prop duration timingfunc delay [reference] 这样就会在某个property改变的时候先delay一段时间，然后从原状态通过timingfunc所代表的缓动方程，经过duration的时间，过渡到目标状态。 我们要用它来完成shake的效果，就需要用setInterval反复的把元素旋转的角度正负来回设，中间状态会由transition来完成。 目的是达到了，但是transition表示压力很大，人家只是个做过渡的，循环动画什么的有点儿hold不住啊。setInterval第一次执行的时候肯定会有停顿，而且元素一多，不断的设置一堆dom元素的属性，肯定会慢得要死的啊笨蛋！ 有木有更好的办法嘞？答案是有的。不就是做循环动画咩，有专门干这活儿的家伙。就是我们的css3 animation属性集啦。 写起来就像这样： .elem{ &#160;-webkit-animation-name: shake;//自己定义的动画名字 &#160;-webkit-animation-duration: .15s; &#160;-webkit-animation-timing-function: linear; &#160;-webkit-animation-direction: alternate; //顺着放完后倒带放回来 &#160;-webkit-animation-iteration-count: infinite; //就这样直到永远 &#125; &#160; @-webkit-keyframes shake { &#160;from &#123;-webkit-transform:rotate&#40;-5deg&#41;;&#125; &#160;to &#123;-webkit-transform:rotate&#40;5deg&#41;;&#125; &#125; 效果不错，丝般顺滑。猛击这里看下效果对比。 效果二：翻转 这个效果需要用到的几样东西说明一下。 -webkit-transform: rotateY(180deg); 这个属性之前也有用到。3d旋转有xyz三根轴，x轴从左到右，y轴从上到下，z轴从屏幕里戳出来。rotateX,rotateY,rotateZ可以分别使元素围绕其旋转。上一例中的普通rotate就可以想象成围绕z轴的旋转。此外还有translate,scale等属性可以用来作平移啊缩放啊等事情。[reference] -webkit-transform-style: preserve-3d 这个属性有两个值，preserve-3d&#124;flat。前者可以使其子元素能够在他的3d空间的基础上应用3d变换。 设为flat的话子元素就都跟他贴在一个平面上了。默认值似乎是前者，所以可以省略。[reference] -webkit-perspective: 500 定义了元素进行3d变换时的透视程度，可以想象成镜头距离物件的距离，默认是无限远，就是看起来完全没有透视感。火影忍者里的很多打斗就大量运用了夸张的透视效果。 -webkit-backface-visibility: [...]]]></description>
			<content:encoded><![CDATA[<p>介绍两个css3做的小效果。都是在webkit下做着玩的，完全没考虑浏览器兼容什么的。</p>
<p><strong>效果一：摇晃</strong></p>
<p>用过iphone的同学应该知道，当你要调整图标顺序或者删除app的时候，长按之，然后所有图标都会很萌的在那里打颤，并且脑门上会多出来一个小叉让你点。</p>
<p>仔细看了一下，其实这种小颤的效果就是图标在左右小幅度摇摆而已，当中或许还加入了一些很细微的随机位移吧。</p>
<p>好，我现在想把这种效果用到web页面上要怎么弄嘞。</p>
<p>一开始我想到的是css3 transition这个属性。transition，顾名思义就是过渡的意思，语法如下：</p>
<p>transition:prop duration timingfunc delay [<a href="http://www.w3schools.com/css3/css3_transitions.asp" target="_blank">reference</a>]</p>
<p>这样就会在某个property改变的时候先delay一段时间，然后从原状态通过timingfunc所代表的缓动方程，经过duration的时间，过渡到目标状态。</p>
<p>我们要用它来完成shake的效果，就需要用setInterval反复的把元素旋转的角度正负来回设，中间状态会由transition来完成。</p>
<p>目的是达到了，但是transition表示压力很大，人家只是个做过渡的，循环动画什么的有点儿hold不住啊。setInterval第一次执行的时候肯定会有停顿，而且元素一多，不断的设置一堆dom元素的属性，肯定会慢得要死的啊笨蛋！</p>
<p>有木有更好的办法嘞？答案是有的。不就是做循环动画咩，有专门干这活儿的家伙。就是我们的css3 animation属性集啦。</p>
<p>写起来就像这样：</p>
<div class="geshi no css">
<div class="head">.elem{</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;-webkit-animation-name<span class="sy0">:</span> shake<span class="sy0">;</span>//自己定义的动画名字</div>
</li>
<li class="li1">
<div class="de1">&nbsp;-webkit-animation-duration<span class="sy0">:</span> <span class="re1">.15s</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;-webkit-animation-timing-function<span class="sy0">:</span> linear<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;-webkit-animation-<span class="kw1">direction</span><span class="sy0">:</span> alternate<span class="sy0">;</span> //顺着放完后倒带放回来</div>
</li>
<li class="li1">
<div class="de1">&nbsp;-webkit-animation-iteration-count<span class="sy0">:</span> infinite<span class="sy0">;</span> //就这样直到永远</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">@-webkit-keyframes shake {</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;from <span class="br0">&#123;</span>-webkit-transform<span class="re2">:rotate</span><span class="br0">&#40;</span>-5deg<span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;to <span class="br0">&#123;</span>-webkit-transform<span class="re2">:rotate</span><span class="br0">&#40;</span>5deg<span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>效果不错，丝般顺滑。<a href="http://spud.in/demo/shake/" target="_blank">猛击这里</a>看下效果对比。</p>
<p><strong>效果二：翻转</strong></p>
<p>这个效果需要用到的几样东西说明一下。</p>
<p><em>-webkit-transform: rotateY(180deg);</em></p>
<p>这个属性之前也有用到。3d旋转有xyz三根轴，x轴从左到右，y轴从上到下，z轴从屏幕里戳出来。rotateX,rotateY,rotateZ可以分别使元素围绕其旋转。上一例中的普通rotate就可以想象成围绕z轴的旋转。此外还有translate,scale等属性可以用来作平移啊缩放啊等事情。[<a href="http://www.w3.org/TR/css3-3d-transforms/#transform-property" target="_blank">reference</a>]</p>
<p><em>-webkit-transform-style: preserve-3d</em></p>
<p>这个属性有两个值，preserve-3d|flat。前者可以使其子元素能够在他的3d空间的基础上应用3d变换。</p>
<p>设为flat的话子元素就都跟他贴在一个平面上了。默认值似乎是前者，所以可以省略。[<a href="http://www.webkit.org/blog-files/3d-transforms/transform-style.html" target="_blank">reference</a>]</p>
<p><em>-webkit-perspective: 500</em></p>
<p>定义了元素进行3d变换时的透视程度，可以想象成镜头距离物件的距离，默认是无限远，就是看起来完全没有透视感。火影忍者里的很多打斗就大量运用了夸张的透视效果。</p>
<p><img class="aligncenter size-medium wp-image-468" title="naruto" src="http://spud.in/wp-content/uploads/2011/08/naruto1-300x181.png" alt="" width="300" height="181" data-markzhi="registered" /></p>
<p><em>-webkit-backface-visibility: hidden</em></p>
<p>这个属性也是两个值initial和hidden。前者的话我们的元素就相当于一张塑料薄片，翻转之后上面的内容还是可见的，设置为hidden它就变成了一张卡纸，翻过去就不可见了</p>
<p>最后你可以在源码中发现翻转的hover写在了最外层的元素上，这是因为翻转的时候实际上改变了元素的大小，这样，动画一开始元素缩小了，hover状态就没有了，这显然不是我们希望的，放到一个透明的外层容器上去就没事情喽。</p>
<p><a href="http://spud.in/demo/flip/" target="_blank">猛击这里</a>看demo吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://spud.in/tech/flip-and-shake-with-css3.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>如何设计用户登录</title>
		<link>http://spud.in/tech/how-to-design-a-login-module.html</link>
		<comments>http://spud.in/tech/how-to-design-a-login-module.html#comments</comments>
		<pubDate>Sun, 28 Aug 2011 05:08:27 +0000</pubDate>
		<dc:creator>spud</dc:creator>
				<category><![CDATA[折腾]]></category>
		<category><![CDATA[safety]]></category>

		<guid isPermaLink="false">http://spud.in/?p=461</guid>
		<description><![CDATA[这篇文章是对自己实践的一份总结，未必靠谱，牛人看了觉得有误请别吝惜手中板砖。 第一种：最简陋的方法，直接在用户名密码与数据库中的记录匹配后设置一个session，浏览器一关它就没了，需要重新登录 第二种：将用户名密码存在cookie里，保存一段时间，期间访问网站时就尝试用他们登录。成功后设置session，避免每次重复访问数据库作检查。但是如果有坏朋友来用你的电脑，翻下cookie就能知道你的密码了。 第三种：所以在之前的基础上，我们把密码用md5或者sha1加密一下。每次不是直接匹配用名和密码，而是通过用户名找到密码，再把密码加密一下看是否与你提供的一致。坏朋友又来了，这回他不知道你的密码了，但是他把这对cookie拷回去，又可以冒充你来登录了。 第四种：所以我不但要避免别人得到我登录信息，还要防止别人拿到cookie后可以伪造登录。 于是现在的做法是登录成功后把sessionid，用户id，ip信息，浏览器信息等一起保存在服务器这边。cookie里只保存这个sessionid，以及其他信息一起加密后的字串，相当于一个信物。 登录的时候服务器就可以拿到它保存着的信息，然后获取你正在使用的ip与浏览器信息，用相同的办法加密出来和你手里的结果一比对就知道是不是你了。坏朋友把你的cookie带回家，但是他登录时的ip或浏览器与你使用的不同就不管用。 当然他可以把这些也记下来，回去也一并伪造了，还可以猜测信息连接的顺序，所使用的加密算法等，也就是几十种组合，狗屎运的话还是可以试出来。 那就在加密的时候再加一个只在服务器这边记录的字串，道理上，他就彻底没辙了。这样做就相当于以前我为了开个门一直把钥匙留在身边，大多情况够用了。但别人可以偷过去复制一把。所以我们只保留一个信条，每次要开门的时候出示一下，然后保管员会看一下你的面容啊，指纹啊什么的再去和资料库里比对一下，然后帮你把门开了。 总结： 当然用户登录这种事情其实还要麻烦很多，比如绑定第三方账号啊（说白了就是多配几把能开门的钥匙），多账户切换啊，跨域问题啊等等（这些就不是很明白了，还没亲手接触到），要保证正确的人随便怎样都能简单快速的登录，想干坏事的随便怎样都登录不了，难度还是有点的。 事后试了一下几个主流网站，就在本本上记录个cookie再跑去台式机上设一下，结果大多数时候不鸟你，不过也有少数妖怪情况会成功，不高兴仔细琢磨了，总之不鸟你才是对的。如果本文有说的不到位的地方欢迎补充啊。 Updata 2011-08-29： 写完之后才发现几天前coolshell上有一篇更为详尽，前后端都有涉及的文章，非常不错。点此。]]></description>
			<content:encoded><![CDATA[<p>这篇文章是对自己实践的一份总结，未必靠谱，牛人看了觉得有误请别吝惜手中板砖。</p>
<p><strong>第一种：</strong>最简陋的方法，直接在用户名密码与数据库中的记录匹配后设置一个session，浏览器一关它就没了，需要重新登录</p>
<p><strong>第二种：</strong>将用户名密码存在cookie里，保存一段时间，期间访问网站时就尝试用他们登录。成功后设置session，避免每次重复访问数据库作检查。但是如果有坏朋友来用你的电脑，翻下cookie就能知道你的密码了。</p>
<p><strong>第三种：</strong>所以在之前的基础上，我们把密码用md5或者sha1加密一下。每次不是直接匹配用名和密码，而是通过用户名找到密码，再把密码加密一下看是否与你提供的一致。坏朋友又来了，这回他不知道你的密码了，但是他把这对cookie拷回去，又可以冒充你来登录了。</p>
<p><strong>第四种：</strong>所以我不但要避免别人得到我登录信息，还要防止别人拿到cookie后可以伪造登录。</p>
<p>于是现在的做法是登录成功后把sessionid，用户id，ip信息，浏览器信息等一起保存在服务器这边。cookie里只保存这个sessionid，以及其他信息一起加密后的字串，相当于一个信物。</p>
<p>登录的时候服务器就可以拿到它保存着的信息，然后获取你正在使用的ip与浏览器信息，用相同的办法加密出来和你手里的结果一比对就知道是不是你了。坏朋友把你的cookie带回家，但是他登录时的ip或浏览器与你使用的不同就不管用。</p>
<p>当然他可以把这些也记下来，回去也一并伪造了，还可以猜测信息连接的顺序，所使用的加密算法等，也就是几十种组合，狗屎运的话还是可以试出来。</p>
<p>那就在加密的时候再加一个只在服务器这边记录的字串，道理上，他就彻底没辙了。这样做就相当于以前我为了开个门一直把钥匙留在身边，大多情况够用了。但别人可以偷过去复制一把。所以我们只保留一个信条，每次要开门的时候出示一下，然后保管员会看一下你的面容啊，指纹啊什么的再去和资料库里比对一下，然后帮你把门开了。</p>
<p><strong>总结：</strong></p>
<p>当然用户登录这种事情其实还要麻烦很多，比如绑定第三方账号啊（说白了就是多配几把能开门的钥匙），多账户切换啊，跨域问题啊等等（这些就不是很明白了，还没亲手接触到），要保证正确的人随便怎样都能简单快速的登录，想干坏事的随便怎样都登录不了，难度还是有点的。</p>
<p>事后试了一下几个主流网站，就在本本上记录个cookie再跑去台式机上设一下，结果大多数时候不鸟你，不过也有少数妖怪情况会成功，不高兴仔细琢磨了，总之不鸟你才是对的。如果本文有说的不到位的地方欢迎补充啊。</p>
<p>Updata 2011-08-29： 写完之后才发现几天前coolshell上有一篇更为详尽，前后端都有涉及的文章，非常不错。<a href="http://coolshell.cn/articles/5353.html" target="_blank">点此</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://spud.in/tech/how-to-design-a-login-module.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>总结下Flash和外部的交互</title>
		<link>http://spud.in/tech/flash-interaction-with-backend-and-javascript.html</link>
		<comments>http://spud.in/tech/flash-interaction-with-backend-and-javascript.html#comments</comments>
		<pubDate>Sat, 13 Aug 2011 01:22:19 +0000</pubDate>
		<dc:creator>spud</dc:creator>
				<category><![CDATA[折腾]]></category>
		<category><![CDATA[ExternalInterface]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[URLLoader]]></category>
		<category><![CDATA[URLRequest]]></category>

		<guid isPermaLink="false">http://spud.in/?p=436</guid>
		<description><![CDATA[好像是大三下的时候写过一篇利用amfphp和后端程序交互的文章，那不过是篇经验总结而已，个中原理依然不明白，而现在我也越来越不喜欢这种需要依靠第三方工具的笨重方式，只有简洁的东西在能永恒啊。于是这周的空闲时间里不务正业的拿起这块东西又研究了一下。 不同媒介间的通信，最基本的做法，说白了就是互相通过字符串来传递信息。先来看flash和php之间的消息传递，其实和后端通信，说白了就是发http请求过去，拿到运算结果，再做分析处理罢了，ajax是如此，flash也一样， 只是用来发请求的对象略有不同而已，做法如下。 ajax: var req; req = new XMLHttpRequest&#40;&#41;; req.open&#40;&#39;POST&#39;,&#39;remote.php&#39;&#41;; req.setRequestHeader&#40;&#34;Content-Type&#34;, &#34;application/x-www-form-urlencoded&#34;&#41;; req.onreadystatechange = handler; req.send&#40;&#39;say=hey man&#39;&#41;; &#160; function handler&#40;&#41; &#123; &#160;if&#40;this.readyState == 4 &#38;amp;&#38;amp; this.status == 200&#41; &#123; &#160; console.log&#40;this.responseText&#41;; &#160;&#125; &#125; flash: var loader,req,data； var loader,req,data; loader = new URLLoader&#40;&#41;; // flash.net.URLLoader req = new URLRequest&#40;&#41;; // flash.net.URLRequest data = new URLVariables&#40;&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>好像是大三下的时候写过一篇利用amfphp和后端程序交互的<a title="a" href="http://tangtun.blogbus.com/logs/50442825.html" target="_blank">文章</a>，那不过是篇经验总结而已，个中原理依然不明白，而现在我也越来越不喜欢这种需要依靠第三方工具的笨重方式，只有简洁的东西在能永恒啊。于是这周的空闲时间里不务正业的拿起这块东西又研究了一下。</p>
<p>不同媒介间的通信，最基本的做法，说白了就是互相通过字符串来传递信息。先来看flash和php之间的消息传递，其实和后端通信，说白了就是发http请求过去，拿到运算结果，再做分析处理罢了，ajax是如此，flash也一样， 只是用来发请求的对象略有不同而已，做法如下。</p>
<p><strong>ajax:</strong></p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> req;</div>
</li>
<li class="li1">
<div class="de1">req = <span class="kw2">new</span> XMLHttpRequest<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">req.<span class="kw3">open</span><span class="br0">&#40;</span><span class="st0">&#39;POST&#39;</span>,<span class="st0">&#39;remote.php&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">req.<span class="me1">setRequestHeader</span><span class="br0">&#40;</span><span class="st0">&quot;Content-Type&quot;</span>, <span class="st0">&quot;application/x-www-form-urlencoded&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">req.<span class="me1">onreadystatechange</span> = handler;</div>
</li>
<li class="li1">
<div class="de1">req.<span class="me1">send</span><span class="br0">&#40;</span><span class="st0">&#39;say=hey man&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> handler<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">readyState</span> == <span class="nu0">4</span> <span class="sy0">&amp;</span>amp;<span class="sy0">&amp;</span>amp; <span class="kw1">this</span>.<span class="kw3">status</span> == <span class="nu0">200</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">responseText</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>flash:</strong></p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> loader,req,<span class="kw3">data</span>；</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> loader,req,<span class="kw3">data</span>;</div>
</li>
<li class="li1">
<div class="de1">loader = <span class="kw2">new</span> URLLoader<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// flash.net.URLLoader</span></div>
</li>
<li class="li1">
<div class="de1">req = <span class="kw2">new</span> URLRequest<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// flash.net.URLRequest</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">data</span> = <span class="kw2">new</span> URLVariables<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// flash.net.URLVariables;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">data</span>.<span class="me1">say</span> = <span class="st0">&quot;hey man&quot;</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">req.<span class="kw3">url</span> = <span class="st0">&#39;remote.php&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">req.<span class="me1">method</span> = URLRequestMethod.<span class="me1">POST</span>; <span class="co1">// flash.net.URLRequestMethod &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">req.<span class="kw3">data</span> = <span class="kw3">data</span>;</div>
</li>
<li class="li1">
<div class="de1">loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">COMPLETE</span>,handler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">loader.<span class="kw3">load</span><span class="br0">&#40;</span>req<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> handler<span class="br0">&#40;</span><span class="kw3">e</span>:Event<span class="br0">&#41;</span>:<span class="kw3">void</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span>loader.<span class="kw3">data</span><span class="br0">&#41;</span>;<span class="co1">//use a certain object to parse it as you like</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>得到的response差不多都是这样的</p>
<div class="geshi no text">
<ol>
<li class="li1">
<div class="de1">POST http://spud.in/demo/flash/remote/remote.php HTTP/1.1</div>
</li>
<li class="li1">
<div class="de1">Host: spud.in</div>
</li>
<li class="li1">
<div class="de1">Connection: keep-alive</div>
</li>
<li class="li1">
<div class="de1">Content-Length: 13</div>
</li>
<li class="li1">
<div class="de1">Origin: http://spud.in</div>
</li>
<li class="li1">
<div class="de1">User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.8 Safari/535.1</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">content-type: application/x-www-form-urlencoded</div>
</li>
<li class="li1">
<div class="de1">Accept: */*</div>
</li>
<li class="li1">
<div class="de1">Referer: http://spud.in/demo/flash/remote/flash.swf</div>
</li>
<li class="li1">
<div class="de1">Accept-Encoding: gzip,deflate,sdch</div>
</li>
<li class="li1">
<div class="de1">Accept-Language: zh-CN,zh;q=0.8</div>
</li>
<li class="li1">
<div class="de1">Accept-Charset: UTF-8,*;q=0.5</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">say=hey%20man</div>
</li>
</ol>
</div>
<p>这部分就这点花头了，这些对象还有更多变的用法，但最基本的就这些了。下面来说下flash和页面上的js之间是如何交互的。</p>
<p>自打Flash 8开始，as中引入了ExternalInterface 这个对象（flash.external.ExternalInterface）。</p>
<p><strong>flash -&gt; js:</strong></p>
<p>ExternalInterface.call(funcionName:String, &#8230; arguments):*</p>
<p>可以调用到window对象下的functionName方法。</p>
<p><strong>js -&gt; flash:</strong></p>
<p>ExternalInterface.addCallback(functionName:String, closure:Function):void</p>
<p>这个方法会在flash被载入后，将特定的方法丢到承载他的&lt;object&gt;节点上。</p>
<p>有的聪明的同学就好奇了，js里不同类型的参数是怎么和as中不同类型的参数对上号的嘞？</p>
<p>原来flash被载入后会丢一堆方法到window上。</p>
<p>他们会把js方法名，和参数按特定的方式解析成很长一串xml字符串。再用flashobj.CallFunction(theXmlStr)将其传递给flash。更多细节可以参考tencent flash team的<a title="ExternalInterface 与 JavaScript" href="http://flashteam.tencent.com/post/18/externalinterface-and-javascript/" target="_blank">这篇文章</a></p>
<p>这次调用后，flash中的方法的返回值也按照正确的类型会反应到js中，若flash方法的返回类型为js中没有的复杂类型，则会抛出 “Error calling method on NPObject” 错误。</p>
<p>以上讲的是方法间的互相调用，此外，传递参数这件事情还可以通过flashvars来做，具体<a title="Use FlashVars to pass variables to SWF files" href="http://kb2.adobe.com/cps/164/tn_16417.html" target="_blank">见此</a>，不高兴写了嘿嘿。</p>
<p><strong>Demos:</strong></p>
<p>with backend (<a href="http://spud.in/demo/flash/remote/ajax.html" target="_blank">ajax</a>|<a href="http://spud.in/demo/flash/remote/flash.swf" target="_blank">flash</a>|<a href="http://spud.in/demo/flash/remote/remote.zip">source</a>)</p>
<p>with js (<a href="http://spud.in/demo/flash/external/" target="_blank">demo</a>|<a href="http://spud.in/demo/flash/external/flashExternal.zip" target="_blank">source</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://spud.in/tech/flash-interaction-with-backend-and-javascript.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>闲得蛋疼之属性观察者</title>
		<link>http://spud.in/tech/property-watcher.html</link>
		<comments>http://spud.in/tech/property-watcher.html#comments</comments>
		<pubDate>Tue, 19 Jul 2011 15:48:03 +0000</pubDate>
		<dc:creator>spud</dc:creator>
				<category><![CDATA[折腾]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[setter]]></category>

		<guid isPermaLink="false">http://spud.in/?p=421</guid>
		<description><![CDATA[javascript以前是没有getter和setter的，就是说我没办法在一个变量值被改变的时候，去做一些事情。 一开始觉得，非对象类的值没办法作为引用传给函数，就是没有 function(&#038;str){&#8230;} 这样的写法，死穴啊。后来一下开窍，js有js的路数嘛，只能传对象引用就传变量所处对象的引用好了，变量名当成字符串传，放一块儿就能找到对应的变量引用了。 比如：var s; watch(s); 这样行不通（s被当做值传递了），那我可以这样：var s;watch(window,&#8217;s')，window是引用，通过window['s']就能拿到s的引用了。 这样一来以上问题就有办法咯，上菜： Object.prototype.watch = function&#40;k,func&#41;&#123; &#160;var env = this,t = env&#91;k&#93;; &#160; &#160;setInterval&#40;function&#40;&#41;&#123; &#160; if&#40;env&#91;k&#93; !== t&#41;&#123; &#160; &#160;func.call&#40;this,t,env&#91;k&#93;&#41;; &#160; &#160;t=env&#91;k&#93;&#41;; &#160; &#125; &#160;&#125;,100&#41;; &#125; 说白了其实就是设一个timer不断去检测一个变量看他有没有变，没什么技术含量。用起来就像这样： var s; window.watch&#40;&#39;s&#39;,function&#40;oldv,newv&#41;&#123; &#160;console.log&#40;&#39;varible s has changed from &#39;+ oldv + &#39; to &#39; + newv&#41;; &#125;&#41;; s=3;//varible s has changed [...]]]></description>
			<content:encoded><![CDATA[<p>javascript以前是没有getter和setter的，就是说我没办法在一个变量值被改变的时候，去做一些事情。</p>
<p>一开始觉得，非对象类的值没办法作为引用传给函数，就是没有 function(&#038;str){&#8230;} 这样的写法，死穴啊。后来一下开窍，js有js的路数嘛，只能传对象引用就传变量所处对象的引用好了，变量名当成字符串传，放一块儿就能找到对应的变量引用了。</p>
<p>比如：var s; watch(s); 这样行不通（s被当做值传递了），那我可以这样：var s;watch(window,&#8217;s')，window是引用，通过window['s']就能拿到s的引用了。</p>
<p>这样一来以上问题就有办法咯，上菜：</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">Object.<span class="me1">prototype</span>.<span class="me1">watch</span> = <span class="kw2">function</span><span class="br0">&#40;</span>k,func<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> env = <span class="kw1">this</span>,t = env<span class="br0">&#91;</span>k<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;setInterval<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>env<span class="br0">&#91;</span>k<span class="br0">&#93;</span> <span class="sy0">!</span>== t<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;func.<span class="me1">call</span><span class="br0">&#40;</span><span class="kw1">this</span>,t,env<span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;t=env<span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span>,<span class="nu0">100</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>说白了其实就是设一个timer不断去检测一个变量看他有没有变，没什么技术含量。用起来就像这样：</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> s;</div>
</li>
<li class="li1">
<div class="de1">window.<span class="me1">watch</span><span class="br0">&#40;</span><span class="st0">&#39;s&#39;</span>,<span class="kw2">function</span><span class="br0">&#40;</span>oldv,newv<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;varible s has changed from &#39;</span>+ oldv + <span class="st0">&#39; to &#39;</span> + newv<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">s=<span class="nu0">3</span>;<span class="co1">//varible s has changed from undefined to 3</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//还可以这样用：</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> input = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#39;username&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">input.<span class="me1">watch</span><span class="br0">&#40;</span><span class="st0">&#39;value&#39;</span>,<span class="kw2">function</span><span class="br0">&#40;</span>oldv,newv<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;input value has changed from &#39;</span>+ oldv + <span class="st0">&#39; to &#39;</span> + newv<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>这样就很happy啦。其实新的javascript 标准里已经包含类似的接口了，我们可以这样写：</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">window.__defineGetter__<span class="br0">&#40;</span><span class="st0">&#39;s&#39;</span>,<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;getting s&#39;</span><span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">window.__defineSetter__<span class="br0">&#40;</span><span class="st0">&#39;s&#39;</span>,<span class="kw2">function</span><span class="br0">&#40;</span>v<span class="br0">&#41;</span><span class="br0">&#123;</span>console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;varible s is set to &#39;</span>+v <span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">window.<span class="me1">s</span>;<span class="co1">//getting s</span></div>
</li>
<li class="li1">
<div class="de1">window.<span class="me1">s</span>=<span class="nu0">3</span>;<span class="co1">//varible s is set to 3</span></div>
</li>
</ol>
</div>
<p>更多介绍可以看John Resig的<a href="http://ejohn.org/blog/javascript-getters-and-setters/">文章</a>。</p>
<p>还有些细节我也还没太明白，看起来defineGetter这样一句里面就已经做了声明s的事情，额外写一句var s反而会适得其反，没有效果= =</p>
<p>最后留个困扰我很久的问题，类似事件啊，消息啊，getter/setter这种东西，其内在的原理是什么？我想了半天还是觉得最终其实都应该是靠不断循环判断吧。就像comet跟传统的ajax轮询的区别其实也就在于把一个不断向服务器发送请求的循环变成服务器自己在那里轮询文件修改日期或者数据库，再返回结果。也就是说把循环放到执行效率更高的地方去而已，不知道我的理解是否正确……</p>
]]></content:encoded>
			<wfw:commentRss>http://spud.in/tech/property-watcher.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>随便推荐几张碟</title>
		<link>http://spud.in/share/album-recommand.html</link>
		<comments>http://spud.in/share/album-recommand.html#comments</comments>
		<pubDate>Thu, 30 Jun 2011 15:14:10 +0000</pubDate>
		<dc:creator>spud</dc:creator>
				<category><![CDATA[分享]]></category>
		<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://spud.in/?p=414</guid>
		<description><![CDATA[现在听歌都是在豆瓣电台瞎听，越来越match我的口味的同时还不断的带来惊喜，听到喜欢的就标个星，最近悦耳的几张都比较杂，随便拎两张出来分享一个。 法国电子乐 日本，吉他指弹 冥想音乐 日式小清新 电影原声，南斯拉夫风格 吉他，曼陀林 就先这么点儿吧。7月份有不少想去看的演出，除了旅行团的巡回之外最想看的就是这个了，来自蒙古的阿基耐乐队，暖场是上海人民最喜欢的顶马，非去不可！]]></description>
			<content:encoded><![CDATA[<p>现在听歌都是在豆瓣电台瞎听，越来越match我的口味的同时还不断的带来惊喜，听到喜欢的就标个星，最近悦耳的几张都比较杂，随便拎两张出来分享一个。</p>
<p><a href="http://music.douban.com/subject/1440772/" target="_blank"><img src="http://img3.douban.com/lpic/s1458071.jpg" alt="" /></a><br />
法国电子乐</p>
<p><a href="http://music.douban.com/subject/2089393/" target="_blank"><img src="http://img3.douban.com/lpic/s2413778.jpg" alt=""/></a><br />
日本，吉他指弹</p>
<p><a href="http://music.douban.com/subject/1401311/" target="_blank"><img src="http://img3.douban.com/lpic/s2654529.jpg" alt=""/></a><br />
冥想音乐</p>
<p><a href="http://music.douban.com/subject/2062908/" target="_blank"><img src="http://img3.douban.com/lpic/s4558391.jpg" alt=""/></a><br />
日式小清新</p>
<p><a href="http://music.douban.com/subject/1417204/" target="_blank"><img src="http://img5.douban.com/lpic/s1443565.jpg" alt=""/></a><br />
电影原声，南斯拉夫风格</p>
<p><a href="http://music.douban.com/subject/4222783/" target="_blank"><img src="http://img3.douban.com/lpic/s4122496.jpg" alt=""/></a><br />
吉他，曼陀林</p>
<p>就先这么点儿吧。7月份有不少想去看的演出，除了旅行团的巡回之外最想看的就是<a href="http://www.douban.com/event/14111332/" target="_blank">这个</a>了，来自蒙古的阿基耐乐队，暖场是上海人民最喜欢的顶马，非去不可！</p>
]]></content:encoded>
			<wfw:commentRss>http://spud.in/share/album-recommand.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>js事件绑定执行顺序</title>
		<link>http://spud.in/tech/order-of-event-binding-and-trigger-in-javascript.html</link>
		<comments>http://spud.in/tech/order-of-event-binding-and-trigger-in-javascript.html#comments</comments>
		<pubDate>Thu, 23 Jun 2011 10:30:53 +0000</pubDate>
		<dc:creator>spud</dc:creator>
				<category><![CDATA[折腾]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://spud.in/?p=409</guid>
		<description><![CDATA[今天干活的时候碰到了很诡异的事情。 一个属性莫名在我认为所有操作都应该完成了之后被设成了错误的值。 找了半天发现是在一个没注意的地方多绑定了一次事件。 一开始以为和ie下的ajax是否异步有关系，其实就是事件绑定执行顺序的事儿。 很简单一段代码： elem.addEvent&#40;&#39;click&#39;,function&#40;&#41;&#123;alert&#40;&#39;first&#39;&#41;&#125;&#41;; elem.addEvent&#40;&#39;click&#39;,function&#40;&#41;&#123;alert&#40;&#39;second&#39;&#41;&#125;&#41;; 在ie6,7,8下都是后绑定的函数先执行，其他浏览器则是先绑定先执行。 啊！太傻逼了！ 言归正传，我认为这一层应该由类库去避免掉。 就是同一个elem，同一个事件类型，永远只允许绑定一个事件。 有多个事件绑定上来的时候就往自己管理的一个堆栈里压。 这样触发的时候，就不是直接执行响应绑定函数，而是去这个堆栈里挨个执行响应函数。 道理上就可以避免这种状况了，当然参数什么的还要重新绑一下。 话说这种底层的东西好没热情自己去实现一下啊，就这么着吧= =。 既然ie9已经没有这个问题了，证明m$自己也觉得以前那样很傻逼吧，不管了不管了，统统给我升级浏览器去。]]></description>
			<content:encoded><![CDATA[<p>今天干活的时候碰到了很诡异的事情。<br />
一个属性莫名在我认为所有操作都应该完成了之后被设成了错误的值。<br />
找了半天发现是在一个没注意的地方多绑定了一次事件。<br />
一开始以为和ie下的ajax是否异步有关系，其实就是事件绑定执行顺序的事儿。</p>
<p>很简单一段代码：</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">elem.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;click&#39;</span>,<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&#39;first&#39;</span><span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">elem.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;click&#39;</span>,<span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&#39;second&#39;</span><span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>在ie6,7,8下都是后绑定的函数先执行，其他浏览器则是先绑定先执行。<br />
啊！太傻逼了！</p>
<p>言归正传，我认为这一层应该由类库去避免掉。<br />
就是同一个elem，同一个事件类型，永远只允许绑定一个事件。<br />
有多个事件绑定上来的时候就往自己管理的一个堆栈里压。<br />
这样触发的时候，就不是直接执行响应绑定函数，而是去这个堆栈里挨个执行响应函数。<br />
道理上就可以避免这种状况了，当然参数什么的还要重新绑一下。</p>
<p>话说这种底层的东西好没热情自己去实现一下啊，就这么着吧= =。<br />
既然ie9已经没有这个问题了，证明m$自己也觉得以前那样很傻逼吧，不管了不管了，统统给我升级浏览器去。</p>
]]></content:encoded>
			<wfw:commentRss>http://spud.in/tech/order-of-event-binding-and-trigger-in-javascript.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>昆明青旅室友言论</title>
		<link>http://spud.in/view/opinions-of-roomie-in-kunming.html</link>
		<comments>http://spud.in/view/opinions-of-roomie-in-kunming.html#comments</comments>
		<pubDate>Sun, 05 Jun 2011 13:16:28 +0000</pubDate>
		<dc:creator>spud</dc:creator>
				<category><![CDATA[看法]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://spud.in/?p=397</guid>
		<description><![CDATA[革命是怎么回事？激化矛盾，分裂正营，选择敌对阵营，分化瓦解对方以巩固自己。一般都是分封制，画大饼，跟传销差不多，因为没有实际的东西可以给别人。 这只是一小部分，你学会了你就会发现社会学太可怕了，当初毛看了社会学就觉得这是个好东西啊，不过此等武林秘籍只能老子一个人学。所以中国没有社会学，他不会禁掉你，他会把你往歪路子上去引，说社会学是科学，社会学哪儿是科学啊。 内蒙古这个不算什么，当初还有屠村的呢。建电厂以每亩不到一百元的价格征收土地，然后村民很不理智，也不是村民，都不理智，把县政府砸了，还打死了几个政府官员。政府就直接从市里面调武警过去武装对抗，打死了五个村民之后事态就已经无法控制，整个村的人都被杀了，一个消失的村庄，你应该听说过吧，零三年在湖南那儿，后来就两个官被降职了。 毛泽东和邓小平政见不合，一个是觉得我们先穷两年原始积累，一个是认为先让一部分人富起来，于是就不和。原始积累起来了吗？有的，本来我们是靠苏联的，但是人家不可能白拿你啊，就需要你听他话，老毛不愿意，人家苏联就把东西撤走了。于是只能靠自己，靠自己就是剥削农民啊。后来很多比如东北的重工业在那个时候都已经发展的很蓬勃了。 陆肆的学生领袖其实是想拉一帮人实现他们的目的，都是有外国人扶持的，不然穷学生他们哪里来钱买那些设备啊。但是外国人不明白中国的模式，靠学生没用，得靠农民。 学联当初就是一群学生自发成立的，也不是有谁推选的，到后来就变成党的一条狗了。 为什么胡耀邦死后过了那么久才纪念他爆发的运动？就是需要这么个人来做标志。他也是，很多事情想做但是遇到阻力太大，最后郁郁而终。 农民现在挺有钱的，他们斗不过开发商是因为他们没有联合起来。 中国政治格局是派系的，导致你出现问题我要把你开除了就没人接手了，那我还不如把你维护下来。乾隆干嘛一直留着和珅啊，就是因为他是最忠心的一条狗，把他拿了没有适合的人了。小说把纪晓岚搞得很牛逼，其实他啥也不是就是一搞文化的。 中国需要发展城镇，降低农村人口。吸纳人口的核心是他们，而不是大城市，都市的规模越大他的成本越高。城镇吸纳能力强，扩展能力强，成本低，见效快。一个农产品从农村到城市，价格翻了100倍，但是得利的会有五六个人，丰富了产业链。 早期很多乡镇企业，邓小平说，是经济发展的秘密武器。现在很多想着企业都开始倒闭，因为政府涉入太多了。 改革开放初期，政府银行国企就是大哥二哥三哥，三哥要做生意，问二哥要钱，大哥说，我做担保，给他。结果就有人空手套白狼，到后来还不起钱，就造成坏账，国家就鼓励存款来收回坏账。 轻轨高铁会变成政府的负担。 做公益，捐款的核心要靠名人，他们一个人，一来钱多二来有带动效应。宣传还是要面向普通大众，尤其是大学生，依赖他们更有社会责任心，愿意参加这样的事情二来他们当中可能有未来的名人。 门外汉只记下这么点儿。且听着。]]></description>
			<content:encoded><![CDATA[<p>革命是怎么回事？激化矛盾，分裂正营，选择敌对阵营，分化瓦解对方以巩固自己。一般都是分封制，画大饼，跟传销差不多，因为没有实际的东西可以给别人。 </p>
<p>这只是一小部分，你学会了你就会发现社会学太可怕了，当初毛看了社会学就觉得这是个好东西啊，不过此等武林秘籍只能老子一个人学。所以中国没有社会学，他不会禁掉你，他会把你往歪路子上去引，说社会学是科学，社会学哪儿是科学啊。<span id="more-397"></span></p>
<p>内蒙古这个不算什么，当初还有屠村的呢。建电厂以每亩不到一百元的价格征收土地，然后村民很不理智，也不是村民，都不理智，把县政府砸了，还打死了几个政府官员。政府就直接从市里面调武警过去武装对抗，打死了五个村民之后事态就已经无法控制，整个村的人都被杀了，一个消失的村庄，你应该听说过吧，零三年在湖南那儿，后来就两个官被降职了。</p>
<p>毛泽东和邓小平政见不合，一个是觉得我们先穷两年原始积累，一个是认为先让一部分人富起来，于是就不和。原始积累起来了吗？有的，本来我们是靠苏联的，但是人家不可能白拿你啊，就需要你听他话，老毛不愿意，人家苏联就把东西撤走了。于是只能靠自己，靠自己就是剥削农民啊。后来很多比如东北的重工业在那个时候都已经发展的很蓬勃了。</p>
<p>陆肆的学生领袖其实是想拉一帮人实现他们的目的，都是有外国人扶持的，不然穷学生他们哪里来钱买那些设备啊。但是外国人不明白中国的模式，靠学生没用，得靠农民。</p>
<p>学联当初就是一群学生自发成立的，也不是有谁推选的，到后来就变成党的一条狗了。</p>
<p>为什么胡耀邦死后过了那么久才纪念他爆发的运动？就是需要这么个人来做标志。他也是，很多事情想做但是遇到阻力太大，最后郁郁而终。</p>
<p>农民现在挺有钱的，他们斗不过开发商是因为他们没有联合起来。</p>
<p>中国政治格局是派系的，导致你出现问题我要把你开除了就没人接手了，那我还不如把你维护下来。乾隆干嘛一直留着和珅啊，就是因为他是最忠心的一条狗，把他拿了没有适合的人了。小说把纪晓岚搞得很牛逼，其实他啥也不是就是一搞文化的。</p>
<p>中国需要发展城镇，降低农村人口。吸纳人口的核心是他们，而不是大城市，都市的规模越大他的成本越高。城镇吸纳能力强，扩展能力强，成本低，见效快。一个农产品从农村到城市，价格翻了100倍，但是得利的会有五六个人，丰富了产业链。</p>
<p>早期很多乡镇企业，邓小平说，是经济发展的秘密武器。现在很多想着企业都开始倒闭，因为政府涉入太多了。<br />
改革开放初期，政府银行国企就是大哥二哥三哥，三哥要做生意，问二哥要钱，大哥说，我做担保，给他。结果就有人空手套白狼，到后来还不起钱，就造成坏账，国家就鼓励存款来收回坏账。</p>
<p>轻轨高铁会变成政府的负担。</p>
<p>做公益，捐款的核心要靠名人，他们一个人，一来钱多二来有带动效应。宣传还是要面向普通大众，尤其是大学生，依赖他们更有社会责任心，愿意参加这样的事情二来他们当中可能有未来的名人。</p>
<p>门外汉只记下这么点儿。且听着。</p>
]]></content:encoded>
			<wfw:commentRss>http://spud.in/view/opinions-of-roomie-in-kunming.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从重庆到泸沽湖</title>
		<link>http://spud.in/diary/from-chongqng-to-luguhu.html</link>
		<comments>http://spud.in/diary/from-chongqng-to-luguhu.html#comments</comments>
		<pubDate>Sun, 05 Jun 2011 12:04:23 +0000</pubDate>
		<dc:creator>spud</dc:creator>
				<category><![CDATA[日记]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://spud.in/?p=382</guid>
		<description><![CDATA[朋友去泸沽湖达祖小学做志愿者，帮忙整理了一下图书馆资料，之后就一直教唆我过去也出把力，他们也刚好在招网站建设志愿者之类的，刚好自己本来就有想去云南玩的打算，刚好找到了一个好借口。 由于自己出牌没什么计划性，加上对毕业环节的时间安排很没谱，所以直到临走前一个礼拜才买的机票，花掉了很多不必要的钱，大家引以为戒。这是一篇流水账，有想去的朋友可以小作参考。 5-16 为了节省机票钱，先到重庆玩一下。之前还很不靠谱的跑错机场，幸亏有惊无险。 傍晚时分抵达重庆，机场一眼就看到大幅主旋律海报。机场大巴坐到加州花园，买了一份凉面，坐车去磁器口古镇。 磁器口承蒙sea兄推荐，他说是我会喜欢的地方，以前在豆瓣看到过一组重庆的照片，充满了人与自然，现代与传统的离合感的地方，原来就是那里。 挺安静的，娱乐设施与上海九十年代的相仿，有点儿怪诞穿越之感，算是个好地方，sea兄果然懂我。去一家小店吃了河水豆腐，跟厨师聊了会儿，又在镇里逛了会儿，民风淳朴夜不闭户，甚是欢喜。回寝室跟几个室友聊着聊着就歇了。 花费：两卷胶卷42 可乐 5 机场大巴15 晚餐 20 凉面2.5 地图 6 纯真年代住宿 30 5-17 上午想去再往古镇深处逛逛，结果被一老外抓住，他腿伤了，让我给他买烟酒饮料，回来就拉我聊天，一边灌我，可乐加白酒，后来碰到当晚入住的上海游客说这是深水炸弹（爷叔阿姨住青旅好潮）。瞎聊聊，那是个不靠谱的加拿大大叔，不爱学习就爱玩，跑来教英语来了，说自己没信仰，小时候妈妈带他去教堂他就巨烦，要说信仰的话，嗯哼，中南海就是他的信仰。 后来喝得差不多了就出门了，一路晃晃悠悠轻飘飘的，再后来吃了肥肠粉和绿豆冰豆花就反胃了，吐在人家店里好抱歉，赶紧自己清理了滚回去睡觉。睡到中午和室友一块儿去找sea兄推荐的鸡杂，好吃到爆。下午就找去之前上海爷叔提到的沙坪坝文革公墓。不当心找错跑到烈士陵园去了，再找车过去，结果又在车上遇见他们一行，好巧。 一圈逛完之后回磁器口稍作整顿就去解放碑会之前在豆瓣约好的nana同学了。她陪我转了下洪崖洞一带，高楼大厦丛林里摆放着的吊脚楼景观，蛮做作的，不过里面好吃的不少。我们去一家老火锅店吃了晚餐。然后她很好心的把我送到朝天门码头那带再自己坐车回去。 在那儿的玺院青旅听到一些蛮不错的音乐，问前台姑娘拷了下。玺院有个做成夹层的小阁楼，摆上投影机和凉席，用来看电影相当惬意。看着玺院墙上的重庆旅游图就觉得还没玩够就要走了啊混蛋。 花费： 肥肠粉 8 豆花 8 水果冰 6 鸡杂 35 火锅底料 21 脆辣椒 8 老火锅 55  麦当劳甜筒 5 玺院住宿 45 5-18 一大早打车去机场飞丽江，结果遇到气流原因无法着陆还去昆明停留了一下，下午才到丽江，再坐车去古镇。歇脚为主。一到青旅就问老板附近有哪儿好玩的，别给我推荐四方街。老板就笑了，来这儿怎么能不去四方街呢。可是我打心眼里不喜欢那里，太商业啦，四方街边上巨多酒吧，但几乎每家都是台上和台下人数差不多，然后互相比拼音响。有条街吃的还蛮多的，比较喜欢螺旋糕和包浆豆腐，晚上订了去泸沽湖的票，第二天出发。 花费 打车 70  机场大巴 20 土豆 1.5 包浆豆腐 5 落选高 5 水蜻蜓 [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://spud.in/wp-content/gallery/goluguhu/45440029_0.jpg' alt='重庆磁器口' class='ngg-singlepic ngg-none' /></p>
<p>朋友去泸沽湖达祖小学做志愿者，帮忙整理了一下图书馆资料，之后就一直教唆我过去也出把力，他们也刚好在招网站建设志愿者之类的，刚好自己本来就有想去云南玩的打算，刚好找到了一个好借口。</p>
<p>由于自己出牌没什么计划性，加上对毕业环节的时间安排很没谱，所以直到临走前一个礼拜才买的机票，花掉了很多不必要的钱，大家引以为戒。这是一篇流水账，有想去的朋友可以小作参考。<span id="more-382"></span></p>
<p><strong>5-16</strong></p>
<p>为了节省机票钱，先到重庆玩一下。之前还很不靠谱的跑错机场，幸亏有惊无险。</p>
<p>傍晚时分抵达重庆，机场一眼就看到大幅主旋律海报。机场大巴坐到加州花园，买了一份凉面，坐车去磁器口古镇。</p>
<p>磁器口承蒙sea兄推荐，他说是我会喜欢的地方，以前在豆瓣看到过一组重庆的照片，充满了人与自然，现代与传统的离合感的地方，原来就是那里。</p>
<p>挺安静的，娱乐设施与上海九十年代的相仿，有点儿怪诞穿越之感，算是个好地方，sea兄果然懂我。去一家小店吃了河水豆腐，跟厨师聊了会儿，又在镇里逛了会儿，民风淳朴夜不闭户，甚是欢喜。回寝室跟几个室友聊着聊着就歇了。</p>
<p>花费：两卷胶卷42 可乐 5 机场大巴15 晚餐 20 凉面2.5 地图 6 纯真年代住宿 30</p>
<p><strong>5-17</strong></p>
<p>上午想去再往古镇深处逛逛，结果被一老外抓住，他腿伤了，让我给他买烟酒饮料，回来就拉我聊天，一边灌我，可乐加白酒，后来碰到当晚入住的上海游客说这是深水炸弹（爷叔阿姨住青旅好潮）。瞎聊聊，那是个不靠谱的加拿大大叔，不爱学习就爱玩，跑来教英语来了，说自己没信仰，小时候妈妈带他去教堂他就巨烦，要说信仰的话，嗯哼，中南海就是他的信仰。</p>
<p>后来喝得差不多了就出门了，一路晃晃悠悠轻飘飘的，再后来吃了肥肠粉和绿豆冰豆花就反胃了，吐在人家店里好抱歉，赶紧自己清理了滚回去睡觉。睡到中午和室友一块儿去找sea兄推荐的鸡杂，好吃到爆。下午就找去之前上海爷叔提到的沙坪坝文革公墓。不当心找错跑到烈士陵园去了，再找车过去，结果又在车上遇见他们一行，好巧。</p>
<p>一圈逛完之后回磁器口稍作整顿就去解放碑会之前在豆瓣约好的nana同学了。她陪我转了下洪崖洞一带，高楼大厦丛林里摆放着的吊脚楼景观，蛮做作的，不过里面好吃的不少。我们去一家老火锅店吃了晚餐。然后她很好心的把我送到朝天门码头那带再自己坐车回去。</p>
<p>在那儿的玺院青旅听到一些蛮不错的音乐，问前台姑娘拷了下。玺院有个做成夹层的小阁楼，摆上投影机和凉席，用来看电影相当惬意。看着玺院墙上的重庆旅游图就觉得还没玩够就要走了啊混蛋。</p>
<p>花费： 肥肠粉 8 豆花 8 水果冰 6 鸡杂 35 火锅底料 21 脆辣椒 8 老火锅 55  麦当劳甜筒 5 玺院住宿 45</p>
<p><strong>5-18</strong></p>
<p>一大早打车去机场飞丽江，结果遇到气流原因无法着陆还去昆明停留了一下，下午才到丽江，再坐车去古镇。歇脚为主。一到青旅就问老板附近有哪儿好玩的，别给我推荐四方街。老板就笑了，来这儿怎么能不去四方街呢。可是我打心眼里不喜欢那里，太商业啦，四方街边上巨多酒吧，但几乎每家都是台上和台下人数差不多，然后互相比拼音响。有条街吃的还蛮多的，比较喜欢螺旋糕和包浆豆腐，晚上订了去泸沽湖的票，第二天出发。</p>
<p>花费 打车 70  机场大巴 20 土豆 1.5 包浆豆腐 5 落选高 5 水蜻蜓 5 米线 10 酸奶 5 青旅 30</p>
<p><strong>5-19</strong></p>
<p>早上认识了同去的金同学，不太爱打扮的女生，单反党，很能玩，三月份的时候刚去过柬埔寨。车上又结实了一对广东小夫妻和杭州小情侣，都很有意思。车颠四小时到一块坐船的地方，在湖上荡漾了一小时，蛮值的，秀色宜人，湖水清澈，拿瓶子装一些直接就能喝了，划船的小妹说喝了小心怀孕喔。</p>
<p>泸沽湖那一带都是摩梭人，算是纳西族的一支吧，刚好有个当地人搭车回去就给我们介绍了。摩梭人是母系氏族，家里都是老祖母说了算，家里的男生过了13岁成年礼就不许跟父母住了，统统赶到一个房间里去住集体宿舍，而女生则会有自己的花房。社交活动的时候小伙和姑娘对歌，对到心仪的就互相扣扣手心，晚上就可以偷偷去走婚，就着木桩搭起来的房屋爬到姑娘的房间里去，共度良宵。早上天还没亮再偷偷溜走，地下恋情害羞怕被家长发现什么的，不过发现了一般也都支持的=v=</p>
<p>摩梭阿哥说，感谢中国移动啊，以前唱完歌跳完舞，碰上心仪的对象，结果找不到人了，或者找到人找不到人家住哪里了，现在一个电话就解决了。还有以前两个村子的人，要上姑娘家得骑马骑个大半天，现在都直接开摩托过去了。</p>
<p>如果闹别扭了要分手，就要杀只鸡，把鸡头、几块硬币、几粒米放在红不里包着想办法交到对方手中。但是对方可以拒收再送回来，这个手，就分不掉了。还有家中大事都在祖母房进行，祖母房里有两根梁，必须取自同一棵树，有猪膀胱可以用来提示空气干燥，贵重物品都压祖母床底，不过现在钱都存农村信用社了。还有个生死门，生孩子要在里面生，人死了也要在里面举办仪式，好像是处理尸体后放在一个轿子里，然后一起火化掉。</p>
<p>那儿民风淳朴，以前刚开始有游客的时候，家里几个小孩儿摘了苹果拿出去卖，回家后被家里的老人责骂，说你拿苹果送人可以，不许问人家要钱！</p>
<p>坐船结束继续坐车到里格，金同学拉了一帮之前同车的去吃烧烤，旁边一家有个小乐队在露天弹唱，敲手鼓的有点儿像阿岳，还蛮帅气的。大伙吃完烧烤觉得没吃饱，打算再去吃点饭。我觉得不太舒爽，就先回客栈洗澡睡觉去了。里格也是个开始商业化的地方，有点热闹过头，不推荐。</p>
<p>花费 泸沽湖往返车票 150 门票 78（没带学生证） 坐船 40 烧烤 20 住宿 30</p>
<p><strong>5-20</strong></p>
<p>达祖小学校长先生来接我。他很早就到了，我也很早就起床了，但是他怕打扰我就过了好久才打电话给我。驾车去达祖村，校长是台湾人，车载音响里放的是张悬，coldplay，南拳妈妈什么的。</p>
<p>小学离开码头不远，在半山坡上，往下是农田，网上是山坳，当中一个操场，几幢教室，里面传来小朋友稚嫩的朗朗读书声。中午和校长还有来自复旦在那儿做行政的小苹同学讨论网站的方案。</p>
<p>下午被喊去打篮球，每周五会有中学生跑来玩，小学生们就在边上计分跟加油。好久不玩加上高原反应（主要是前者），没打多就喘不过气来了。教数学的密老师打球很厉害，可惜有个拖后腿的家伙（就是我），最后惜败。</p>
<p>晚上就端着本本去校长房间弄页面原型。校长当你也是个学设计的，龟毛啊，对细节相当偏执，很多我当初的设计都被拿掉了，最后的页面变得非常的简洁，不过还的确蛮不错的，我自己最喜欢的版本比这一版再多一些菜单背景色之类的。</p>
<p>当晚开始肉搏论文，进展缓慢。</p>
<p><strong>5-21</strong></p>
<p>早上戴上校长送我的爆炸头假发跑去接骑车环湖的金同学，带她过来小逛了一圈。回来继续做网站，结果没多久就停电了，悲催。于是干脆去镇上吃饭，金花和小不点两只小狗就装在小卡车的后箱里。到了镇上搭上密老师一家吃了顿饭，顺便理了个发下午去女神弯。</p>
<p>这回我和小苹也坐到了车后箱里，风吹过我们的头发，自由畅快。我问小苹为什么你的名字里不是萍水相逢的萍？她说小时候她老爸一时兴起给起的，但是事后就忘了，又一直用的萍水的萍，到高考要查户口本的时候才恍然发现弄错了十几年，于是再改回来。她比较喜欢现在的名字。</p>
<p>在女神弯边发了一下午的呆，练习打水漂习得要领，最多可以打出来六个，非常得意。金花真是只花蝴蝶，跑哪儿都会有小公狗为她争风吃醋。摇船的小哥对着山洞里唱歌，歌声回荡，非常好听，领走的时候遇到骑车抵达的广东小夫妻，真是巧。回到镇上，放下密老师，密夫人松了一包自家做的辣蚕豆给我们。</p>
<p>晚上和小苹一起弹吉他，大家都是三脚猫水平，她唱歌很好听，虚弱女声什么的。玩到一半接到朋友电话，他被拉去吃饭喝酒，推脱不了，活儿干不完了，找我帮忙。我说你好好吃吧，交给我了，自己论文还没怎么动就帮人家忙，国际主义精神有没有！回头让他帮我改论文格式。</p>
<p>当天得知学校又有同学跳楼了。</p>
<p><strong>5-22</strong></p>
<p>中午出去吃饭的时候在楼道里看到小苹，她化了妆，穿了漂亮的花衣服，忍不住哇了一声。</p>
<p>这天天气很棒，天空蓝得通透。我们在东巴爷爷家吃了午饭，席间讨论到有个教语文的熊老师，是个愤青，尽给学生灌输反动思想，平时不与大家为伍，看到书上革命先烈的故事就告诉学生们这些都是垃圾，于是学生们都很崇拜他。这样不对啊，应该教给孩子们思考的方法，让他们自己得到结论，而不是把自己拒绝后的结论喂给他们，不论那是对是错。吃过饭大伙一块去湖边拍照，各种美，按了张checky送给了东巴爷爷。</p>
<p>下午看了《请投我一票》，里面有个小萝莉萌死我了。之后接着做网站，大半夜想出去看个星星，结果虽然带了手机做光源，还是不甚摔了一跤，不划算啊。</p>
<p><strong>5-23</strong></p>
<p>在这里有时有了上顿没下顿，有时又会突然停电，但是也不会觉得多么不方便，停电了就弹弹琴打打球看看书，一会儿就来电了。午饭吃不完的就倒在狗碗里，交给金花和小不点收拾，他们吃剩下的会有公鸡母鸡小鸡仔来处理，保准吃得干干净净。鸡来狗碗找食吃的样子非常好玩，战战兢兢的靠近，然后嗖的一下叼了菜叶子就跑。本来打算周四离开，突然有点犹豫要不要去大理了。</p>
<p>网站没什么进展，下午一直在码论文。得知两天前跳楼的同学就是自己专业的。一开始没把名字和人联系起来，但是依然忍不住去记忆力挖，最终想起是个linux达人，还和他聊过几句，学了点技术的皮毛，心里很不是滋味，不知道干嘛要想起来。另外得知班级组织的毕业旅行最终取消了。</p>
<p>晚上睡觉前发现房间窗帘上密密麻麻的一堆小虫子，关上灯眼不见为净，第二天早上就都掉地上去了。后来知道，其实只要出门把灯关了，再把门捂严实了，基本就杜绝了一大半了。</p>
<p><strong>5-24</strong></p>
<p>早上看孩子们跳甲措舞，这个就是他们的广播体操了，每周二都来一套。周五是一种藏族舞蹈。过了没多久再次停电，于是打球去，和十八岁的少年一伙，对阵密老师东巴爷爷和小苹，率先拿到12球嘿嘿。</p>
<p>午后去看了下他们的图书馆，墙上都是小孩们涂画的图案，借书就登记个名字书号，还书就随便抽一篇让孩子说出里面的内容。男生看的书普遍比姑娘幼稚些。下午在教室门口看js的书，山头有几只羊在啃草，琢磨着什么时候有机会再去拍它们吧，结果就没再遇上机会了。</p>
<p><strong>5-25</strong></p>
<p>早上从小苹那里收到大好消息，有个北京做房地产和煤矿的老总打算巨额资助小学。</p>
<p>这个钱，基本可以再盖一所学校了。他之前从政府渠道做公益，结果钱到最后缩水严重，于是改投民间组织。</p>
<p>闻此消息大家全都喜出望外。</p>
<p>下午得知愤青熊老师有几块硬盘的纪录片，自然人文历史政治都有，果断拿过来搜刮。</p>
<p><strong>5-26</strong></p>
<p>终于还是到了告别的日子。</p>
<p>早上一只笨蛋小鸡不知道怎么掉到馊水桶里去了，校长把它捡出来又是纸巾擦又是电吹风吹的，就飘出来一股食物的味道，过了一阵子总算安分了，就把它丢到草地上晒晒太阳。</p>
<p>晚上去厨师杨师傅家里吃饭，算是送别我。校长先去了，我们到的时候他正在那里烤乳猪。我看着烤架上的小猪心情有点儿复杂，他说就不把刚才的经过告诉你了。我说你说好了。他说刚才一刀下去没捅到喉咙，歪了一点，没有马上毙命，然后它就一直在那里抽搐，好了，没什么的，就是这样的，它死的时候我就告诉他，你的任务完成了。</p>
<p>其实烤乳猪也没多好吃，肉比较韧，不像平时吃的蹄髈汤那样酥软，往肚子里塞了几块粗粮饼，然后开始喝酒。杨师傅给我倒了比较凶的咣当酒，卖东巴爷爷面子直接先干掉了一杯，之后又慢慢喝了一杯，人就有点儿恍惚了。喝了酒大家开始唱歌，我当然还是只会《爱情的模样》，结果校长接着就来了《嘿，我要走了》跟《爱情酿的酒》，太叫人意外了。</p>
<p>临别时，一个个都关照我，有空再来，当然一一答应，但再去就不知道是什么时候了，好不舍。</p>
<p><strong>5-27</strong></p>
<p>一大早提着行囊离开泸沽湖小学，校长把我送回里格，说兄弟，多余的话就不说了，继续努力！再一路颠回丽江，车上结识来自川师的三位好玩的朋友，俩男生一女生，男生们一直在开女生玩笑，然后读一些他们朋友发来的段子。</p>
<p>路上翻手机看前一晚录的视频，发现全是自己大声说话的声音。中途去民俗博物馆参观了一下，尝试着爬他们的木头楼，结果臂力不够，很怂的没爬上去。</p>
<p>泸沽湖的公路已经在建了，飞机场也在建造中了，估计很快就会完工，到时候就再也不用一路从丽江颠簸八小时进来了，这儿的人们或许会变得富有，但是那时候的泸沽湖或许不会再是今天的样子了，也不知是好是坏……</p>
<p>到丽江后赶紧买了去昆明的火车票，然后在一家酒吧小憩码字，再去火车站。去火车站的车上遇见一位姑娘，眉宇舒展，话少，一副与世无争的样子，笑起来非常好看，车开了没多久就到站了，不是同一班，忍住没留联系方式就各自上路了。</p>
<p>花费 午饭 20 酒吧雪梨汁 30 去火车站 5 火车票 223 方便米线 5</p>
<p><strong>5-28</strong></p>
<p>google地图坑爹，把青旅的位置标到市政府那儿去了，结果绕了很多冤枉路。</p>
<p>本来是打算宅在寝室里码一天论文的，结果遇到了有趣的室友。黑龙江人，东北农业大学毕业一年，学的社会学，在一家北京商用地产公司做小专员，是个外表风流内心纯洁的小胖子，曾经也去乡村小学支过教，说自己把内群孩子一个个都弄得跟打了鸡血一样，一个个特有抱负。他说考公务员很容易，自己当年就复习了一个月，都是定式，考不出的都是裸考的。后来为了追一个女生就跑北京去了。他说自己想有一堆老婆，说自己将来四十岁之后希望可以混出点名堂再去教书，然后复制一堆自己，不教大学生，教高中生，然后让他们去虐大学老师。</p>
<p>后来又与他交流了对六四的认识。一开始不太能认同，不过后来就想明白了，于是越加的觉得悲剧。虽然最终政府动用军队再怎么说都是不对的，但是学生当中也是有几个投机分子在其中以牟取利益为目的的。最终这些当初信誓旦旦的人都全身而退了，出于自己一腔热血和对祖国美好期望的傻孩子们却成了炮灰。其他还聊了很多，不过就不在这里写了，另外再开一篇吧。</p>
<p>下午看《速度与激情5》，碰着电脑有空就瞄两眼。后来来了位先生说下午搞活动，电视要用一下，算是个展，也是个音乐分享会，主题是共生，很有意思。他们烤泥砖，盖房子，摘鲜花，捡牛粪，种菜，做饭，陪伴有困难的人，找寻自己的路，他们的孩子在草地上裸奔，自己制作饼干回收废料建造自己的生活，特别棒。 收入的来源就是帮助别人一同度过一段时间，有吸毒的人，孩子患了自闭症的母亲，在都市感到迷茫的年轻人等等。有兴趣的可以去他们的网站看看，人子协会，我觉得还蛮不错的。</p>
<p>花费：早餐 6 可乐 4 晚餐 60 人子唱片 40 明信片 20</p>
<p><strong>5-29</strong></p>
<p>打道回府。离开时发现青旅的大堂满是老外，旅游旺季到来了。</p>

<div class="ngg-galleryoverview" id="ngg-gallery-1-382">

	<!-- Slideshow link -->
	<div class="slideshowlink">
		<a class="slideshowlink" href="http://spud.in/diary/from-chongqng-to-luguhu.html?show=slide">
			[Show as slideshow]		</a>
	</div>

	
	<!-- Thumbnails -->
		
	<div id="ngg-image-1" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440018.jpg" title=" " class="shutterset_set_1" >
								<img title="45440018" alt="45440018" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440018.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-2" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440019.jpg" title=" " class="shutterset_set_1" >
								<img title="45440019" alt="45440019" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440019.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-3" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440020.jpg" title=" " class="shutterset_set_1" >
								<img title="45440020" alt="45440020" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440020.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-4" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440021.jpg" title=" " class="shutterset_set_1" >
								<img title="45440021" alt="45440021" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440021.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-5" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440023.jpg" title=" " class="shutterset_set_1" >
								<img title="45440023" alt="45440023" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440023.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-6" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440024.jpg" title=" " class="shutterset_set_1" >
								<img title="45440024" alt="45440024" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440024.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-7" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440025.jpg" title=" " class="shutterset_set_1" >
								<img title="45440025" alt="45440025" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440025.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-8" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440026.jpg" title=" " class="shutterset_set_1" >
								<img title="45440026" alt="45440026" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440026.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-9" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440027.jpg" title=" " class="shutterset_set_1" >
								<img title="45440027" alt="45440027" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440027.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-10" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440029.jpg" title=" " class="shutterset_set_1" >
								<img title="重庆磁器口" alt="重庆磁器口" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440029.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-11" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440030.jpg" title=" " class="shutterset_set_1" >
								<img title="45440030" alt="45440030" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440030.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-12" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440031.jpg" title=" " class="shutterset_set_1" >
								<img title="45440031" alt="45440031" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440031.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-13" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440032.jpg" title=" " class="shutterset_set_1" >
								<img title="45440032" alt="45440032" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440032.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-14" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440033.jpg" title=" " class="shutterset_set_1" >
								<img title="45440033" alt="45440033" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440033.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-15" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/45440035.jpg" title=" " class="shutterset_set_1" >
								<img title="45440035" alt="45440035" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_45440035.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-16" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/img_0459.jpg" title=" " class="shutterset_set_1" >
								<img title="img_0459" alt="img_0459" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_img_0459.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-17" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/img_0460.jpg" title=" " class="shutterset_set_1" >
								<img title="img_0460" alt="img_0460" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_img_0460.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-18" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/img_0537.jpg" title=" " class="shutterset_set_1" >
								<img title="img_0537" alt="img_0537" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_img_0537.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-19" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/img_0548.jpg" title=" " class="shutterset_set_1" >
								<img title="img_0548" alt="img_0548" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_img_0548.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-20" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://spud.in/wp-content/gallery/goluguhu/img_0550.jpg" title=" " class="shutterset_set_1" >
								<img title="img_0550" alt="img_0550" src="http://spud.in/wp-content/gallery/goluguhu/thumbs/thumbs_img_0550.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-navigation'><span class="current">1</span><a class="page-numbers" href="http://spud.in/diary/from-chongqng-to-luguhu.html?nggpage=2">2</a><a class="next" id="ngg-next-2" href="http://spud.in/diary/from-chongqng-to-luguhu.html?nggpage=2">&#9658;</a></div> 	
</div>


]]></content:encoded>
			<wfw:commentRss>http://spud.in/diary/from-chongqng-to-luguhu.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

