<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description></description><title>Yiii</title><generator>Tumblr (3.0; @mac8)</generator><link>http://blog.afaker.com/</link><item><title>Sentry</title><description>&lt;div&gt;或许你不太会喜欢异常，特别是那些发生后继而沉默在应用日志里那些，你不知道从何开始，因为它们看起来并非那么平易近人，但是用户吵着他的数据有问题，你只得硬着头皮在多个服务器的日志里，翻箱倒柜，试着从堆栈里发现些什么，但是毫无线索，因为你发现这根本是一桩无头命案，没有足够的上下文，不知道哪个才是这个用户的某个操作引起的异常，请求链接更无从谈起，好吧，再去nginx日志里看看吧……&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;但幸运的是，你不是孤独的，&lt;a href="http://disqus.com/"&gt;Disqus&lt;/a&gt;也面临着同样的问题，因此而开发了&lt;a href="https://github.com/dcramer/sentry"&gt;Sentry&lt;/a&gt;，它是一款精致的Django应用，目的在于帮助开发人员从散落在多个不同服务器上毫无头绪的日志文件里发掘活跃的异常，继而找到潜在的臭虫，当然这个是概述，像其他监控工具一样，sentry也是分为客户端和服务端，客户端分布在你的每个应用服务器上，在异常发生时django会通知它，继而客户端再把详细的异常信息以及相关的用户、请求数据（包括cookie和环境信息）发送到服务端，这样一来就像sentry网站上鼓吹的，它天生就是实时的了。服务端是一个http server，是接收客户端发送异常信息和相关数据，按照异常名称进行归类存储到单独的数据库中，同时提供漂亮的web界面，方便开发检索异常记录，上图：&lt;/div&gt;
&lt;p&gt;&lt;a href="https://picasaweb.google.com/100400640714837297010/Blog#5696189927562628834"&gt;&lt;img height="288" src="https://lh3.googleusercontent.com/-u0ilrf5JHCc/TwzujzWHTuI/AAAAAAAACmo/dsmQyvy5pQc/s1024/Screenshot-4.png" width="516"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;扇贝部署sentry的当周，开发生活就全部围绕在修复bug中——自己写的代码所产生的异常已经发生xxx次了，就摆在sentry web界面，紧急优先级排在前3名，你还不去修复？现在我们每天都会习惯性的前往sentry看看有没有发生新的异常，发布时更是紧盯着sentry这个晴雨表。这样不但可以让开发时刻关注自己的代码质量，也可以了解到一个异常就有可能是一个用户的流失，尽快地修复一个bug就可以最小化损失。  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;如何部署？&lt;/p&gt;
&lt;p&gt;服务端：  &lt;/p&gt;
&lt;p&gt;1. pip install sentry&lt;br/&gt;2. sentry start&lt;/p&gt;
&lt;p&gt;客户端：&lt;/p&gt;
&lt;p&gt;1. pip install raven &lt;br/&gt;2. 在django的settings.py文件里的INSTALL_APPS加上一行：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;br/&gt; INSTALLED_APPS = [  &lt;br/&gt;       …   &lt;br/&gt;       # We recommend adding the client to capture errors   # seen on this server as well                      &lt;br/&gt;      ‘raven.contrib.django’,&lt;br/&gt;]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;br/&gt;3. 将服务端机器上的sentry配置文件中的SENTRY_KEY一行复制到settings.py文件里   &lt;br/&gt; cat ~/.sentry/sentry.conf.py ，复制该行： SENTRY_KEY = xxxxx &lt;br/&gt;4. 指定sentry服务端:     SENTRY_SERVERS = [‘http://your.sentry.server/sentry/store/’] &lt;/p&gt;</description><link>http://blog.afaker.com/post/14854539916</link><guid>http://blog.afaker.com/post/14854539916</guid><pubDate>Tue, 27 Dec 2011 03:11:00 -0500</pubDate><category>异常</category><category>日志</category><category>sentry</category><category>扇贝网</category></item><item><title>Release it中稳定模式的一些理解</title><description>&lt;p&gt;     这些模式就像设计模式一样，在我们的系统中不是看你使用了多少模式，或者说是否严格的遵守了这些模式，模式能解决的是大部分通用的情景，但是在实际应用时也要看上下文。&lt;/p&gt;
&lt;p&gt;     Why bother this? 	我们系统不是孤立存在，他依赖着很多服务（一个完全不依赖任何资源、服务的系统，几乎是不存在的，当然你可以举出反例，但我觉得这个系统的存在也没有太多意义），很多时候他和这些服务工作的很好但是如果你对他们没有任何防范的话，某天他会让你尝到苦头。&lt;/p&gt;
&lt;p&gt;     在Release it! 	一书中举出一些模式以防止某些经常发生的问题再次发生（本书作者提到自己所解决过的线上故障都是新问题，是因为他从不让同一个错误重复发生），的确是经验之谈，这里说下个人的理解。&lt;/p&gt;
&lt;p&gt;     &lt;strong&gt;使用超时 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;     网络通常是不可靠的，我们的应用不能永远等待一个不知道何时才能响应的服务，我们对每个依赖和服务设置超时时间，如果在这个超时时间之内服务还不响应的话，就放弃，让应用继续服务，一方面我们已经尽了最大努力，一方面防止因为无尽的等待以至于因为不断的有新的请求发起导致连接资源耗尽，应用挂住。&lt;/p&gt;
&lt;p&gt;     &lt;strong&gt;断路器 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;     大家都应该知道断路器是怎么工作的，当某个电器因为短路或者其他某些原因使得线路过热而断掉电源，然后可以重新开启电源，使得其他电器正常工作，而你接下来的事情就是检查那个有问题的电器。 	同样，我们的系统也是如此，当某一个子系统出现问题或者在几次尝试确定失败之后，应该停止使用这个子系统，使得不会影响整个系统。&lt;/p&gt;
&lt;p&gt;     &lt;strong&gt;防水壁&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;     就像轮船的防水舱一样，我们系统应当在漏水时仍然不会沉船。 	防水壁这个我个人感觉和断路器有点类似，但是作者似乎对于防水壁更强调的是物理系统需要分区，在某个物理系统出现问题时，要使得其他物理系统不受影响，以保证整个系统继续工作。而且分区的主要手段就是冗余物理设备。&lt;/p&gt;
&lt;p&gt;     &lt;strong&gt;稳定状态&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;     主要是说尽量不要没事干在线上机器上做些事情，然后举了些常见场景，例如数据清理以及日志文件、内存cache的问题。&lt;/p&gt;
&lt;p&gt;     &lt;strong&gt;快速失败&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;    	前面说的使用超时是面向服务消费方，即调用者的建议，而这个主要是面向服务提供方的，如果服务方的系统能够在可能发现失败前，立即回复失败的响应。这样调用方就不会一直等待服务方了（但是在为了保护自己，在不确定服务方是否采用了快速失败的模式，你最好还是设置超时）。但是如何预先知道将会失败呢，作者举了个简单的例子：当一个请求到来时，发现连接池没有可用的连接，应当立即拒绝这个连接请求。&lt;/p&gt;
&lt;p&gt;    &lt;strong&gt; 握手&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;     我们都知道TCP/IP协议的三次握手，主要是用来协调两台设备之间的通信，但是http协议以及RMI，CORBA等等很多通信协议本身都没有做好握手的工作，握手的好处在于一方忙时，另一方能知道他忙，会在后面不再做请求，或者间隔一个设置的时间再作尝试。 	幸好看到作者强调了下底层协议最好需要握手，即通信很昂贵的时候，否则个人觉得握手有点鸡肋。&lt;/p&gt;
&lt;p&gt;   &lt;strong&gt; Test Harness&lt;/strong&gt;（这个不知道怎么翻译合适）&lt;/p&gt;
&lt;p&gt;    集成测试只是证明在系统规约里明确好的正常情况是否ok，但是无法跳出规约进行测试，test harness是一种接近于边界或者说极端情况下对整个系统进行极限测试的方法，发现系统的漏洞和问题，其目的就像是一名恶意的黑客，极尽所能使得系统崩溃或者发生异常行为。&lt;/p&gt;
&lt;p&gt;    &lt;strong&gt;解耦中间件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;    从统一进程里编程语言里的方法调用到进程间通信到远程方法调用再到消息队列最终到不同时间不同地点不同进程间的通信，这是一个解耦的过程，越是解耦的设计，越能减少级联失败的发生。&lt;/p&gt;
&lt;p&gt;    我说一下自己曾经就碰到过的问题，准确的说是我制造了这个问题： 	在一个项目里我负责编写一个java库以供java前端开发人员访问后台的某个提供http服务的引擎，我使用了HttpClient来请求这个http服务，在这个整个开发过程中，一切都很顺利，然后就交付上线了。不幸的事情发生了，当天晚上前端就匆忙打电话通知我，坏事发生了：日志里显示有大量的读超时异常抛出，线上机器全部被挂住，初始大家以为后台服务有问题导致超时，但是后来dump了下java 堆栈信息，发现大量线程被Block住，查看了代码发现我写的某处有线程安全问题，使得连接并没有正确放回连接池，导致在连接池全部耗尽，新的请求获取不到连接，但是这并不足以使得机器全部挂住，后来一个有经验的开发指出，httpclient连接池默认的获取连接的超时时间是永久等待，这使得不断来到的新请求永久的等待可用的连接，吃不会放弃，等待队列中堆积了成千上万的请求，最终机器挂住。&lt;/p&gt;</description><link>http://blog.afaker.com/post/4076976969</link><guid>http://blog.afaker.com/post/4076976969</guid><pubDate>Thu, 24 Mar 2011 23:02:00 -0400</pubDate><category>故障</category></item><item><title>Nerd指导手册</title><description>&lt;p&gt;闲着没事翻译这篇文章（每天翻译一些）：The Nerd Handbook - &lt;a href="http://www.randsinrepose.com/archives/2007/11/11/the_nerd_handbook.html"&gt;http://www.randsinrepose.com/archives/2007/11/11/the_nerd_handbook.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;img width="545" vspace="7" height="385" border="0" alt="keyboard" src="http://www.randsinrepose.com/assets/keycontrol.jpg" class="thinpic"/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;     Nerd需要项目因为他们不断创造新事物。亘古不变。你注意到他们在晚餐闲聊时间歇性的停顿了吗？那是你所面对的nerd的脑袋正忙于他的项目。    &lt;/p&gt;
&lt;p&gt;     但是这个项目不大可能是nerd的日常工作，因为在他的眼里，工作就是“待在办公室，完成某件事”。我们接下来会花些篇幅来探索下这种表面上注意力不集中的结果，但是现在，这个项目是你的这位nerd正在开发的一件头等大事，虽然我并不知道这是怎样的事，但是你应当知道。&lt;/p&gt;
&lt;p&gt;    从某个角度来说，你本身就是你的nerd伙伴的“项目”。你被他“瞩目关注”着，因为你就是你的nerd生活中崭新的开发领域。你成为你的nerd朋友的当前“项目”，这也许算是你的福气——恭喜你。但也不要太得意，因为他会更换“项目”，并且这样的事一旦发生，你将摸不着头脑，不知道以往他在你身上的注意都去了哪。幸运的是，这篇手册可能对你有所帮助。&lt;/p&gt;
&lt;p&gt;    关于性别：方便起见，在本文中，我的nerd原型是一名男性。实际生活中将有许多女性nerd，但本文中所有的这些观察两者都适用。&lt;/p&gt;
&lt;p&gt;   &lt;strong&gt; 理解你的nerd和计算机的关系。&lt;/strong&gt;虽然有些陈词滥调，但是一个nerd的确是为他的计算机所铸就，而你需要理解为什么。&lt;br/&gt;    首先，在这颗星球上绝大多数人要么不知道一台计算机如何工作，要么就是看了之后认为计算机“有魔法”。但是nerd们却清楚计算机是如何运作的，他们深谙计算机的工作方式。当你问nerd：“我点了这个，但是过了许久才出来一个东西，你知道哪里有问题？”，他们知道问题所在。在nerd的大脑里有着计算机硬件和软件的模型。当世界上所有其他人看起来是魔法使然的时候，他知道这个魔法是一长串二进制的0,1数字在以惊人的速度流窜过你的屏幕，他甚至知道如何让这些比特流动的更快。&lt;/p&gt;
&lt;p&gt;   nerd将他的工作，也许是他的生活，完完全全建立在计算机上，我们将会看到，这种亲密的关系已经改变了他的世界观。他将这个世界看成是一个完全可知的系统，只要给他足够的时间和努力。这就是你的nerd所接受的易破灭的幻想，但却是一个令人欣慰的想法，足以让你的nerd愉悦的渡过一整天。但是当这个幻想破灭时，你将会发现…&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;strong&gt;   你的nerd有控制欲的问题&lt;/strong&gt;。你的nerd生活在一个等宽字体的世界里。当其他人在在一堆眼花缭乱的字体中寻觅合适的字体时，你的nerd已经慎重的选好了一个等宽字体，这是他用来在终端命令行上玩转这个世界的字体，而与此同时，其他人正笨拙的操纵着鼠标。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;  选择这种字体的原因当然是它的实用性，等宽字体有着已知的宽度，在同一行中的十个字母和其他另外一行的十个字母的宽度是相同的，如此一来，就能把这个世界划分到X/Y坐标分别具有某种含义的一个令人愉悦的网格结构中去。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;   这些控制欲的问题意味着你的nerd对他周围环境的激烈的变化很敏感，例如旅行，例如工作变化。这些系统重新定义的事件使得你的nerd认识到世界并不总是或者说完全是一个可知的地方，而且直到他重现这个幻想，他将一直感到沮丧，行动没有规律。我在“系统重新定义”事件期间制作了一个难以置信的“短保险丝”，我有可能在某个愚蠢的鸡毛蒜皮的小事中将它烧毁，这是因为…&lt;/p&gt;
&lt;p&gt;  &lt;strong&gt;你的nerd为自己建造了一个“洞穴”。&lt;/strong&gt; 我曾经在其他地方写过关于&lt;a href="http://www.randsinrepose.com/archives/2006/07/10/a_nerd_in_a_cave.html"&gt;“洞穴”的文章&lt;/a&gt;，但是这里仍然会提到其中一些基本的问题。“洞穴”是用来能够让你的nerd做他喜爱的事情——折腾他的项目。如果你想要理解你的nerd，那就目不转睛的朝着这个洞穴看吧。他是如何布置这个“洞穴”？他何时打算进去？他在里面待多久？&lt;/p&gt;
&lt;p&gt;Each object in the Cave has a particular place and purpose. Even the clutter is well designed. Don’t believe me? Grab that seemingly discarded Mac Mini which has been sitting on the floor for two months and hide it. You’ll have 10 minutes before he’ll come stomping out of the Cave — “Where’s the Mac?”&lt;/p&gt;
&lt;p&gt;The Cave is also frustrating you because your impression is that it’s your nerd’s way of checking out, and you are, unfortunately, completely correct. A correctly designed Cave removes your nerd from the physical world and plants him firmly in a virtual one complete with all the toys he needs. Because…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your nerd loves toys and puzzles.&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;The joy your nerd finds in his project is one of problem solving and discovery. As each part of the project is completed, your nerd receives an adrenaline rush that we’re going to call The High. Every profession has this — the moment when you’ve moved significantly closer to done. In many jobs, it’s easy to discern when progress is being made: “Look, now we have a door”. But in nerds’ bit-based work, progress is measured mentally and invisibly in code, algorithms, efficiency, and small mental victories that don’t exist in a world of atoms.&lt;/p&gt;
&lt;p&gt;There are other ways your nerd can create The High and he does it all the time. It’s another juicy cliché to say that nerds love video games, but that’s not what they love. A video game is just one more system where your nerd’s job is to figure out the rules that define it, which will enable him to beat it. Yeah, we love to stare at games with a bazillion polygons, but we get the same high out of playing Bejeweled, getting our Night Elf to Level 70, or endlessly tinkering with a Rubik’s Cube. This fits nicely with the fact that…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nerds are fucking funny.&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Your nerd spent a lot of his younger life being an outcast because of his strange affinity with the computer. This created a basic bitterness in his psyche that is the foundation for his humor. Now, combine this basic distrust of everything with your nerd’s other natural talents and you’ll realize that he sees humor is another game.&lt;/p&gt;
&lt;p&gt;Humor is an intellectual puzzle, “How can this particular set of esoteric trivia be constructed to maximize hilarity as quickly as possible?” Your nerd listens hard to recognize humor potential and when he hears it, he furiously scours his mind to find relevant content from his experience so he can get the funny out as quickly as possible.&lt;/p&gt;
&lt;p&gt;This quick wit is only augmented by the fact that…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your nerd has an amazing appetite for information.&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Many years ago, I dubbed this behavior&lt;span&gt; &lt;/span&gt;&lt;a title="Rands In Repose: N.A.D.D." href="http://www.randsinrepose.com/archives/2003/07/10/nadd.html"&gt;NADD&lt;/a&gt;, and you should read&lt;span&gt; &lt;/span&gt;&lt;a title="Rands In Repose: N.A.D.D." href="http://www.randsinrepose.com/archives/2003/07/10/nadd.html"&gt;the article&lt;/a&gt;&lt;span&gt; &lt;/span&gt;to learn more and to understand what mental muscles your nerd has developed.&lt;/p&gt;
&lt;p&gt;How does a nerd watch TV? Probably one of two ways. First, there’s watching TV with you where the two of you sit and watch one show. Then there’s how he watches by himself when he watches three shows at once. It looks insane. You walk into the room and you’re watching your nerd jump between channels every five minutes.&lt;/p&gt;
&lt;p&gt;“How can you keep track of anything?”&lt;/p&gt;
&lt;p&gt;He keeps track of everything. See, he’s already seen all three of these movies… multiple times. He knows the compelling parts of the arcs and is mentally editing his own versions while watching all three. The basic mental move here is the context switch, and your nerd is the king of the context switch.&lt;/p&gt;
&lt;p&gt;The ability to instantly context switch also comes from a life on the computer. Your nerd’s mental information model for the world is one contained within well-bounded tidy windows where the most important tool is one that allows your nerd to move swiftly from one window to the next. It’s irrelevant that there may be no relationship between these windows. Your nerd is used to making huge contextual leaps where he’s talking to a friend in one window, worrying about his 401k in another, and reading about World War II in yet another.&lt;/p&gt;
&lt;p&gt;You might suspect that given a world where context is constantly shifting, your nerd can’t focus, and you’d be partially correct. All that multi-tasking isn’t efficient. Your nerd knows very little about a lot. For many topics, his knowledge is an inch deep and four miles wide. He’s comfortable with this fact because he knows that deep knowledge about any topic is a clever keystroke away. See…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your nerd has built an annoyingly efficient relevancy engine in his head.&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;It’s the end of the day and you and your nerd are hanging out on the couch. The TV is off. There isn’t a computer anywhere nearby and you’re giving your nerd the daily debrief. “Spent an hour at the post office trying to ship that package to your mom, and then I went down to that bistro — you know — the one next the flower shop, and it’s closed. Can you believe that?”&lt;/p&gt;
&lt;p&gt;And your nerd says, “Cool”.&lt;/p&gt;
&lt;p&gt;Cool? What’s cool? The business closing? The package? How is any of it cool? None of it’s cool. Actually, all of it might be cool, but your nerd doesn’t believe any of what you’re saying is relevant. This is what he heard, “Spent an hour at the post office blah blah blah…”&lt;/p&gt;
&lt;p&gt;You can be rightfully pissed off by this behavior — it’s simply rude — but seriously, I’m trying to help here. Your nerd’s insatiable quest for information and The High has tweaked his brain in an interesting way. For any given piece of incoming information, your nerd is making a lightning fast assessment: relevant or not relevant? Relevance means that the incoming information fits into the system of things your nerd currently cares about. Expect active involvement from your nerd when you trip the relevance flag. If you trip the irrelevance flag, look for verbal punctuation announcing his judgment of irrelevance. It’s the word your nerd says when he’s not listening and it’s always the same. My word is “Cool”, and when you hear “Cool”, I’m not listening.&lt;/p&gt;
&lt;p&gt;Information that your nerd is exposed to when the irrelevance flag is waving is forgotten almost immediately. I mean it. Next time you hear “Cool”, I want you to ask, “What’d I just say?” That awkward grin on your nerd’s face is the first step in getting him to acknowledge that he’s the problem in this particular conversation. This behavior is one of the reasons that…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your nerd might come off as not liking people.&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;Small talk. Those first awkward five minutes when two people are forced to interact. Small talk is the bane of the nerd’s existence because small talk is a combination of aspects of the world that your nerd hates. When your nerd is staring at a stranger, all he’s thinking is, “I have no system for understanding this messy person in front of me”. This is where the shy comes from. This is why nerds hate presenting to crowds.&lt;/p&gt;
&lt;p&gt;The skills to interact with other people are there. They just lack a well-defined system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Advanced Nerd Tweakage&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you’re still reading, then I’m thinking that your nerd is worth keeping. Even though he’s apt to vanish for hours, has a strange sense of humor, doesn’t like you touching his stuff, and often doesn’t listen when you’re talking directly at him, he’s a keeper. Go figure.&lt;/p&gt;
&lt;p&gt;My advice:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Map the things he’s bad at to the things he loves.&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;You love to travel, but your nerd would prefer to hide in his cave for hours on end chasing The High. You need to convince him of two things. First, you need to convince him that you’re going to do your best to recreate his cave in his new surrounding. You’re going to create a quiet, dark place here he can orient himself and figure out which way the water flushes down the toilet. Traveling internationally? Carve out three days somewhere quiet at the beginning of the trip. Traveling across the US? How about letting him chill on the bed for a half-day before you drag him out to see the Golden Gate Bridge?&lt;/p&gt;
&lt;p&gt;Second, and more importantly, you need to remind him about his insatiable appetite for information. You need to appeal to his deep love of discovering new content and help him understand that there may be no greater content fire hose than waking up in a hotel overlooking the Grand Canal in Venice where you don’t speak a word of Italian.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Make it a project.&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;You might’ve noticed your nerd’s strange relation to food. Does he eat fast? Like really fast? You should know what’s going on here. Food is thrown into the irrelevant bucket because it’s getting in the way of the content. Exercise, too. Thing is, you want your nerd to eat healthily so that he’s here in another thirty years, so how do you change this behavior? You make diet and exercise the project.&lt;/p&gt;
&lt;p&gt;For me, exercise became the project ten years ago after a horrible break-up. When the project was no longer the Ex, I dove into exercise every single day of the week. There were charts tracking my workouts, there were graphs tracking my weight, and there was the exercise. Every single day for two years until the day I passed out in a McDonald’s post-workout after not eating for a day. Ok, so time for a new project. Yeah, nerds also have moderation issues. That’s another essay.&lt;/p&gt;
&lt;p&gt;Significant nerd behavioral change is only going to happen if your nerd engages in the project heart and soul, otherwise it’s just another thought for the irrelevant bucket.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;People are the most interesting content out there.&lt;/strong&gt;&lt;span&gt; &lt;/span&gt;If you’ve got a seriously shy nerd on your hands, try this: ask him how many folks are in his buddy list? How many friends does he have in Facebook? How many folks are following him on Twitter? LiveJournal? My guess is that, collectively, your nerd interacts with ten times more people than you think he does. He can do this because the interaction is via a system he understands — the computer.&lt;/p&gt;
&lt;p&gt;Your nerd knows that people are interesting. Just because he can’t look your best friend straight in the eye doesn’t mean he doesn’t want to know what makes her tick, but you need to be the social buffer — the translation layer. You need to find one common thread of interest between your nerd and your friend and then he’ll engage because he will have found relevance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Next High&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As you discovered when you were the project, your nerd’s focus can be deliciously overwhelming, but it will stop. Once a nerd believe he fully knows how a system works, the challenge to understand ceases to exist and he moves on in search of The Next High.&lt;/p&gt;
&lt;p&gt;While I don’t know who you are or why in the world you chose a nerd for your companion, I do know that you are not a knowable system. I know that you are messy, just like your nerd. Being your own quirky self will be more than enough to present new and interesting challenges to your nerd.&lt;/p&gt;
&lt;p&gt;Besides, it’s just as much a nerd’s job to figure you out and maybe someone somewhere is writing an article about your particular quirks. Good news, he’s probably reading it right now.&lt;/p&gt;</description><link>http://blog.afaker.com/post/3803121647</link><guid>http://blog.afaker.com/post/3803121647</guid><pubDate>Sat, 12 Mar 2011 02:43:00 -0500</pubDate><category>nerd</category><category>翻译</category><category>handbook</category></item><item><title>"The best way to complain is to make things."</title><description>“The best way to complain is to make things.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;James Murphy&lt;/em&gt;</description><link>http://blog.afaker.com/post/3720764213</link><guid>http://blog.afaker.com/post/3720764213</guid><pubDate>Tue, 08 Mar 2011 06:21:30 -0500</pubDate></item><item><title>人咬狗</title><description>&lt;p&gt;     我个人是比较喜欢抱怨的，对许多事情不满，有悖于James Murphy说的The best way to complain is to make things.但是我毅然决然stop from making things，而且最近又有人建议我“顺其自然”，那我就随性牢骚一下。&lt;br/&gt;&lt;br/&gt;    看公司每天的纷纷扰扰的邮件总是让人有种世界和平、奥特曼可以退休的感觉，这很好，但我这个人天生有着阴暗心理，唯恐天下不乱，太平和使我不大习惯，但是某天有封邮件使我愕然，这是一封对于公司业务复杂使得代码存在着bug的提议，当然，具体详情我就不透漏了，这里我也罗嗦一下关于业务需求的问题。&lt;br/&gt;&lt;br/&gt;    许多业务需求为了达到某种让用户看起来不空洞、有内涵的内容和特性，而在前台甚至后台做了许多”创口贴”，然后坐等着由于这个需求的上线带来的各种所谓的效果，用各种拼音或者英文混杂的缩写名词术语以及正面反馈的数据来表达这个效果。我不太懂这行水有多深，但是我根据自己的常识以及经验来看，在某个页面上加个颜色花哨的链接或者按钮，而且又放在那么明显的位置，只要是一个四肢健全，知道点击链接不会死人的用户，基本都会好奇的去点一下的，所以哪怕那个链接指向的是一个500 Internal Server Error页面，都会有人点击的。但是你可以想象到在效果数据出来，发出庆功邮件那个弹冠相庆的场面，几近让人感动至落泪。&lt;br/&gt;&lt;br/&gt;    当然其实你搞这么多花样，作为开发其实也管不着，可奇怪的是，当需求上线有问题时会找到开发工程师为啥需求没弄清，当讨论需求时，你提出这个需求太复杂而且技术上不好实现，他们说你照着作就行。其实也无所谓，毕竟直接出错的人是写代码的人，但是呢，如果说你搞这个花样，并没有解决不了用户遇到的问题，而是异想天开认为可能会解决用户的问题的话，就是另一种情况了，当然绝大部分需求都是异想天开，也就是——猜，猜用户喜欢什么，猜这个功能会有用，当然这个也无可厚非，其实也难为这些提需求的人了，他们自己毕竟不是使用阿里巴巴服务的真实用户，怎么会知道真实用户的痛处。我们的 用户也不是作家，他们没法把他们的真实需求表达出来，他们只能说“我找不到我想要的东西”，而这个问题才是最本质的问题，你界面再好看，交互再好，都是浮云，对于用户来说不是很重要，对于公司来说，你要让用户忍受你的界面丑陋但是不得不使用你的服务，当然界面好看最好不过，谁愿意忍受让自己不舒服的的东西呢，但是这些都不是本质问题，本质是内容不好，用户找不到想要的内容，如果这个问题解决不了，我估计“裂缝“会越来越大。所以，不必每天想着怎么在页面上搞点能够让用户点击的东西，也不用天天调整某某数据显示的个数。集中力量把内容质量提升以及内容过滤精确度提高，这才会用户care的。&lt;br/&gt;    再说技术，像上次轮子一文中提到的那样，技术这块因为业务繁杂的缘故，已经沦为一种每个人都能上的玩物，这不算可悲的，可悲的是它从没有怨言，真是哀其不幸，怒其不争。而每个开发似乎都有种倾向，往项目经理的方向发展（这几乎是必由之路了），都想着能受到赏识，搞个一官半职的，这种开发者典型的特征是喜欢开会，以和每个人搞好关系为工作核心，以和为贵，妥协，从来不对别人说“不“，对技术不思进取，当然这也不能说是坏事，老实说甚至是有追求有理想的有为青年的代表。可是这带来一个极大的问题，这种开发不会拒绝提出有时是荒诞需求的人，因为他需要迎合他，以取得良好的关系，否则当你每次或直接或委婉的拒绝这个需求，指出其不合理时，无论是否你的理由足够充分，关系裂缝就会出现，而这是不被允许的。所以妥协或者麻木成为应用系统的代码复杂，剪不断，理更乱的罪魁祸首。bug丛生，开发周期变长，新员工学习成本大，等等各种问题。然而，是什么导致了这样的问题，我觉得还是文化，没有技术的氛围，以PD为核心的开发模式，当然这也和贵国的世界观有关系：以和为贵。&lt;/p&gt;
&lt;p&gt;&lt;img src="http://26.media.tumblr.com/tumblr_lafj5cqlv21qzfv8po1_500.jpg"/&gt;&lt;/p&gt;</description><link>http://blog.afaker.com/post/3698820422</link><guid>http://blog.afaker.com/post/3698820422</guid><pubDate>Mon, 07 Mar 2011 04:04:00 -0500</pubDate></item><item><title>轮子</title><description>&lt;p&gt;&lt;a href="http://minicabinet.appspot.com/image/15001/"&gt; &lt;img src="http://minicabinet.appspot.com/image/15001/" alt="2179138271_21b30fcbb0.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在公司有个奇怪的现象，凡事都自己搞一套，就是造轮子：开发难用又落伍的web框架，制定私有的xml格式传输数据（tag名一眼就能让人看出是个c程序 员设计的及其精简的变量名），自己编制http server(老实说编写者自己都不知道http  server到底是个啥概念，甚至都可能没看过http协议，返回xml数据，content-type都没有)，编写自己http  client类库，etc…如此这般，诸如此类，如有雷同，不是巧合。  当然这其中有些是可以理解的，“历史问题”嘛，但是大家仍然继续使用这些不但降低开发效率，难用，bug丛生的“产品”，原因是什么？有人给出答案，为了 统一，为了节省维护成本，为了安逸，为了不必要的风险，但是亲爱的，你有没有想过，作为一名开发人员，开发效率如此低下，是多么痛苦，你说搞计算机的人， 都懒得要命，没有好的工具，怎么干活。管理者为了增加开发产出，只有像数据库的水平扩展一样，不断的通过招聘新员工来解决问题。这就是问题，我认为机器/ 技术能解决的问题，一定不要人来干。资本家就是这么认为的，如果机器比人便宜，那么他一定会用机器来取代人。我们虽然不是资本家，也不是慈善家，为了解决 就业问题，大肆的招聘人员，但是道理是一样的，你认为统一大家使用的技术/工具，是为了减少维护、管理成本，但是这样的结果无疑增加了开发人员的开发成 本，当今什么最贵？人才最贵。你让这么多人才干些本来机器可以胜任的事情，罪过阿，大家本来可以用更好的工具和技术，轻松的解决一些重复、复杂的事情，然 后做些机器目前干不了的事情更加体现开发人员价值的事，这样不但自己有成长，建立信心，给公司也带来很大的价值。  而且统一这个东西，真讨厌。你说如果让每个人天天穿一样的衣服，说同样的话，一样的观点，公司卖同样的东西，都信仰同一个裆，会是个什么样子？你可以制定 一个基本的规则（面向接口编程），但是不要统一成一样东西（面向实现编程）。就像现在大家在讨论为什么 Google 做不出  Instagram，google的Big  table是很好(这点比我的公司好，东西做的不好还要求大家都用)，但是不是任何应用场景都合适呢（可能就是nosql和关系数据库之争了）？公司产品 这么多，应用场景都不一样，干嘛都用一个自己的私有web框架，而且你说节省成本，省在哪里，一个正式的文档都没有，你说开源的web框架不适合，出了问 题没人管，你把开源社区放到哪去了。而且你觉得自己公司的东西出了问题就一定有人帮你解决吗。成熟点，好不好。写框架的人只有个把个，你找人可以，人家大 牛一定会找个小弟先让他了解大牛他写的东西然后帮他回答问题，你一个人文还好，万一人多了，你觉得他能及时响应你吗。最大问题在于，原作者人家辞职不干 了，怎么办？这个时候你再想想一个开源社区对于一个开源产品为何如此只要，他让用户之间相互帮助，分享经验，你有什么问题去社区里吼两声，肯定会有人愿意 帮助你的，你会惊异于人们施多么愿意帮助他人。&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027696034</link><guid>http://blog.afaker.com/post/3027696034</guid><pubDate>Sun, 21 Nov 2010 08:24:33 -0500</pubDate><category>轮子</category></item><item><title>免费提供图片上传服务</title><description>&lt;p&gt;&lt;img src="http://minicabinet.appspot.com/image/1001/"/&gt;&lt;/p&gt;
&lt;p&gt;完全免费，本打算自己写博客用，但不敢独自享受。限制是大小在1M以内，需要google账户，地址:&lt;a href="http://minicabinet.appspot.com/"&gt;&lt;a href="http://minicabinet.appspot.com/"&gt;http://minicabinet.appspot.com/&lt;/a&gt;&lt;/a&gt;，希望你喜欢。&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027690876</link><guid>http://blog.afaker.com/post/3027690876</guid><pubDate>Sat, 06 Nov 2010 22:16:52 -0400</pubDate><category>图片</category><category>上传</category><category>存储</category></item><item><title>旅行的意义</title><description>&lt;p&gt;&lt;a href="http://farm4.static.flickr.com/3514/3784886047_0c8c012c68.jpg"&gt;&lt;img src="http://img.ffffound.com/static-data/assets/6/931a34c411a6ae2004901eb988ba21afa336b112_m.jpg" height="360" width="480"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://movie.douban.com/subject/3732780/"&gt;第36个故事&lt;/a&gt;里有个问题，是问，如果 让你选择，你愿意拿读书的学费去环游世界还是继续读书？ 对于我现在来说是离职旅行还是继续工作，但是这两个问题似乎都很难抉择（没错，我就这是这么纠结的人）：如果不读书，就去环游世界，我不知道旅行对我来说 都意味着什么，我会用心发掘我所见到的一切吗？看见海我想到的是什么？凡高为什么喜欢普罗斯旺这个城市？天晓得，我甚至不知道什么是美，什么是旅行的意 义。可是如果没有旅行，或许你会不快乐，因为我们“不快乐的唯一原因是不知道如何安静的呆在他的房间里”，正如我以前所说的，如果我们每个人抛弃固有的看 法、知识。假装不认识这个世界，就好像你以前从未来过这里，每个事物都是新鲜的，也许你会有些特别感受，你感到好奇，你想了解它，你觉得这一切多么有趣， 即便是呆在屋子里也不会感到单调（恩，这就是为什么会有《我的卧室之旅》这篇文章），那么何必去旅行呢。当然这很难办到，原因是我们读的书还不够多，我们 的思想在这个金钱基础的社会里难以的得到提升，我们有的是欲望，我们希望有更多的钱，去更多的城市，去旅行，当然也有人会去读书，具体读的是什么我不清 楚，反正是金融阿营销阿管理阿XX小时掌握XX—— 我想了想，目的倒也单一。  诚实的说，在读完&lt;a href="http://book.douban.com/subject/1056461/"&gt;《旅行的艺术》&lt;/a&gt;之后， 我反思自己的经历，我通常呆在某个城市往往会向往着另一座城市去旅行，而丝毫感觉不到，现在所在城市有任何魅力。就像现在，我觉得杭州没啥好玩的，想回到 苏州作次旅行（虽然我在苏州读过四年的书），而我在苏州的时候，却又想着会南京旅行（我最终在大学最后一年完成了这个愿望，&lt;a href="http://wefeelucky.appspot.com/?cat=agp3ZWZlZWx1Y2t5cg8LEghDYXRlZ29yeRjRDww"&gt;真相在此&lt;/a&gt;）， 而我在南京时从未想过旅行。原因是什么？恩，我觉得是这样的，至少对我来说如此：你来到一个陌生的地方，你会觉得有一种身份的转变，你在这里没有家庭、没 有朋友，你会表现出一种肆无忌惮和自由自在，胆大妄为，会有些奇怪的举动，或者说有些特别的想法，你觉得这个城市是在为你准备的，所以我来了，表演开始 吧。  另外，今年列出的&lt;a href="http://blog.afaker.com/2010/03/14/a-plan-for-2010/"&gt;A Plan For 2010&lt;/a&gt;,有一条要去西藏的，这个计划实施不了了，意外的是，却去了别的计划之外的地方：黄山和厦门，well，不管也算是上了山下了海了。&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027682726</link><guid>http://blog.afaker.com/post/3027682726</guid><pubDate>Sat, 18 Sep 2010 08:03:09 -0400</pubDate><category>旅行</category></item><item><title>Coding Alone</title><description>&lt;p&gt;&lt;a href="http://ffffound.com/image/16f320162985be42c287374c3fbed83c74cec00d"&gt;&lt;img src="http://img.ffffound.com/static-data/assets/6/16f320162985be42c287374c3fbed83c74cec00d_m.jpg" border="0" height="318" width="480"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;写代码是我的工作，我也乐在其中，你可以想象一下在某个风轻云淡的炎热夏日，我在面对屏幕在宿舍不停的敲打键盘，间歇时便啜口白开水，然后继续…  一个web应用，从数据库设计，业务逻辑代码，很酷的特性，前端页面和样式一手包办，老实说如果让别人帮我作，我都不放心，我担心他写出东西不符合我的期 望，又难以启齿说他写得不好。这样，我发现一直以来都是一个人在写代码，我可以写出一个别人都喜欢用的应用程序，但是却没有人会在看完你写了一段很酷的代 码而大声称好，也没有人乐意指出我的不足，跟你说这块代码写的有问题。我觉得很沮丧，就像你写的书无人问津。而即使现在在公司里也不例外——团队之间的合 作似乎并不体现在共同参与同一个项目，更多的是一种依赖关系。项目里你负责的部分写好了代码，只要它工作正常，在项目计划好的时间内完成，那就成，没有人 在意你写成什么样。我想结对编程可能会是个好主意，但是结对编程绝对是幻想，公司不大可能付出这样的成本，但是我觉得可以尝试，就像&lt;a href="http://www.sarahmei.com/blog/2010/04/14/thoughts-on-two-months-of-pairing/"&gt;Thoughts on two months of pairing&lt;/a&gt;说的那样，结对编程真的会解决一些问题，”Get Shit Done”，而且对现在的我来说可以解决我的问题。结对编程的好处是：&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;两个人之间可以互相督促，把工作完成，提升效率。&lt;/li&gt;
&lt;li&gt;review对方的代码，减少bug。就像&lt;a href="http://www.sarahmei.com/blog/2010/04/14/thoughts-on-two-months-of-pairing/"&gt;Thoughts on two months of pairing&lt;/a&gt;说的那样，有时你写另了一段代码觉得ok，但是经过别人的review就很容易发现问题，然后自己再看时就发现自己写的有多么荒谬。&lt;/li&gt;
&lt;li&gt;互相学习和提升。每个人都是在这技术领域唯一的冒险者，有着不同的理解和技巧，大家可以取长补短。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;另外，我并不想把结对编程和敏捷开发联系起来，虽然更多时候，结对编程就是一种敏捷开发的方式，因为我想强调的是结对编码要优于独自编码。  Jeff Atwood的&lt;a href="http://www.codinghorror.com/blog/2010/05/on-working-remotely.html"&gt;On Working Remotely&lt;/a&gt;也 谈到他曾经一个人编码的经历，现在他在家中和他的code partner一起“甜蜜”地工作，在“野外”寻找一个这样的code  partner我觉得比找gf还要困难，因为两个人需要在编码水平差不多的情况下，对编程的理解需要一致，有共同的想法和目标，但最重要的是两人需要既是 code partner也是朋友。&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027676428</link><guid>http://blog.afaker.com/post/3027676428</guid><pubDate>Sat, 29 May 2010 08:18:51 -0400</pubDate><category>programming</category></item><item><title>A Plan For 2010</title><description>&lt;p&gt;&lt;a href="http://acreativeuniverse.com/wp-content/uploads/2010/02/1260832703567428.jpeg"&gt;&lt;img src="http://acreativeuniverse.com/wp-content/uploads/2010/02/1260832703567428.jpeg" height="333" width="500"/&gt;&lt;/a&gt; (标题山寨的是Paul Graham的&lt;a title="A Plan For  Spam" href="http://www.paulgraham.com/spam.html"&gt;A Plan For Spam&lt;/a&gt;) 我想，就像故事开始的那样，在娘胎里兀自孤独了许久后你出生的地方，第一次诚惶诚恐睁开眼  睛，每一物都是初次见面，”hello,world!”——你这样想，回到故事的现在，现在就是现在，此时此刻，你还不知道你的未来如何的现在，尝试想像   你从未见过这世界，计划着重新认识每一个已知的以及素未谋面尚待探索的未知的新事物，抱着贾宝玉初试云雨之情，抱着齐天大圣大闹天宫般严谨朴素之情怀，重   新定义你对阳光绿叶的理解，重新审视周围的人与事，重新理解歪心狼为何历经磨难却无法取得真经，而唐僧师徒却一路玩山游水还拿了特等奖，恩，是该让生命变 得  有意义的时候了！——你这样想，但是即便是行乐须及时，我想即使在活了四分之一世纪的现在，有规律的计划一下当下的生活，也并非是亡羊补牢的勾当——你也  这样想，对吧？当计划不成功时，亡羊补牢犹未晚。&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;读书看碟。每周看一部电影，每两个月看一本书，作为产出我需要每月写一 篇文章，按照&lt;span&gt;&lt;strong&gt;&lt;span&gt;&lt;a href="http://www.ai.uga.edu/mc/index.html"&gt;Michael A.  Covington&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;的&lt;a title="How  to Write More Clearly, Think More Clearly, and Learn Complex Material  More Easily" href="http://www.ai.uga.edu/mc/WriteThinkLearn.htm"&gt;How to Write More Clearly, Think More Clearly, and Learn  Complex Material More Easily&lt;/a&gt;所说，你不知道你知道直到你写到(You don’t know what you  know until you try to express it）。 为什么要看电影，读书？ 我们听音乐，用别人的节奏当作自己的节奏； 我们看电影，用别人的经历丰满自己的经历； 我们读书，用别人的思想充斥自己的思 想； 我们看A片，用别人的高潮引发自己的高潮。  看别人挣扎， 看别人梦想。  幻想娱乐生活，空想改变人生。&lt;/li&gt;
&lt;li&gt;既然在我看来学习和生活没什么区别，那么我想把学习的计划也纳入到今年的计划中来，而且首当其冲（成语 可能用的不合适）。 分布式数据存储方案 - NoSQL 关注nosql已经一段时间了，但没有深入研究各个nosql实现的底层代码，我想先还是拿neo4j开刀，原因有以下：1.   他是用java实现的，方便我阅读代码，而且里面的读写实现大多是Java   NIO,而我正好在学习NIO,其次正因为他是java实现，所以不妨碍我clojure去实现一个山寨版本。2.   neo4j用的是nosql最复杂的一种存储方式，基于图的数据库(graph-based   db)，而且是唯一的一个实现，山寨它有价值，像MongoDB,CouchDB,Redis, and Tokyo   Cabinet这些是基于key-value或者key-collections的。&lt;/li&gt;
&lt;li&gt;去西藏。本打算尼泊尔，但是Shiny后来觉得太 远，所以改去西藏，为什么去西藏？可以有很多理由，比如西藏是天堂之类的话，我想最根本的可能是我天生不喜欢安居乐业。&lt;/li&gt;
&lt;li&gt;山寨 foursquare。Shiny同学要创业，我作为他为数不多的酒肉朋友之一，需要利用工作之余的时间帮助他。&lt;/li&gt;
&lt;li&gt;坚持游泳和跑步 为什么是这两种运动？虽然我很喜欢乒乓和桌球，但是从运动量来看远远不及游泳和跑步，当然，这不是主要原因，最根本地还是因为跑步是免费的，而且没有被  河鞋的可能，任何时间任何地点都可以跑步，再加上最近看了村上春树的《当我谈跑步时我谈些什么》，虽然村上大叔完全是在装B，我还是给了他薄面，看了  108页，然后扔给教授看了（教授也很喜欢跑步，说实话，主要是受了他的影响）。而游泳，我刚学会游泳（冬天学会游泳倒是有点离奇），对这个运动很着迷，  而且在附近的江南体育中心也不是很远，重要的是不用自己买单，当然即使现在要自己付钱的话，我也会去的。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;有些事情是 可以在计划之内的，比如快乐，有些却无法计划，比如死亡，既然如此，趁未被死亡计划的时候，花些时间去计划追求快乐吧。  许多年后，再回到出生的地方，你带着固有的这份孤独，就像是与生俱来，你没的选择，他不是麦当劳可以有A、B、C套餐。&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027670230</link><guid>http://blog.afaker.com/post/3027670230</guid><pubDate>Sun, 14 Mar 2010 05:54:08 -0400</pubDate><category>plan</category></item><item><title>真相</title><description>&lt;p&gt;&lt;a href="http://ffffound.com/image/58fa0cd99e536de4e5fd63c719e196d36fe642d9"&gt;&lt;img src="http://img.ffffound.com/static-data/assets/6/58fa0cd99e536de4e5fd63c719e196d36fe642d9_m.jpg" border="0" height="480" width="480"/&gt;&lt;/a&gt; 这个世界纷纷扰扰，浑浑噩噩，我们的天性需要我们将所有复杂、混沌的事情变成有序、合理、简单的事实，这样你才能够更容易理解，就象电话号码  一样，你试图寻找一些规律才记得住，同样我们也喜欢为任何事情寻找一个理由、原因、解释诸如此类，使得事情在发生后“说的通”。而且还有个重要事实，那就   是许多人不知道自己真正想要的是什么，所以不管你给他什么，他都会欣然接受，这就是为什么许多人活在新闻媒体大话娱乐的轰炸没有思考、没有真相，只有经过   别人扭曲的世界里。大家“像电视里一样衣食住行，像电视里一样追求爱情，像电视里一样成家立业，像电视里一样教育抚养，甚至像电视里一样思考，人们做着电   视里的任何事情。”，“因为你们当中看书的人不到3%，看报纸的不到15%，你们只关心怎样才能从电视里找到解脱，现在，有整整一代人，根本不知道电视外  面是什么。”，这是30年前&lt;a href="http://www.douban.com/subject/1297531/"&gt;《电视台风云》&lt;/a&gt;中 的话，即使到了30年后的今天，也仍具意义，只不过，电视机变成了现在的互联网，“我们有天涯猫扑豆瓣，有意  见领袖娱乐天王商界精英，他们教我们民主自由民族主义，教我们寻欢作乐无病呻吟，教我们追求物质追求成功。无处不在的商业文化牵引着我们的价值观，全球一   体化吞噬着民族传统。我们，已经丧失了辨识的能力，在是非善恶中纠结，在虚拟中追求虚空。现在，有整整一代人，整整一代的宅男宅女，根本不知道互联网外面   有什么。”，我便是典型的互联网rocker，我的生活已然离不了互联网，但是有一点，互联网与电视机不同之处在于，互联网可以存在许多不同的观点，不像   电视机那样观点统一，但是现在周末的我毅然决然会关掉豆瓣、关掉百度、关掉google、关掉刚用上的mac系统，走出去，来到大自然。但是即使这样，你   仍不知道真相为何物，就象你不了解你自己那般。你不知道的是也许我们只是活在一个电子游戏里，我们只是一堆有感知并活在自己的想像里的智能真体，一旦插在   自己身上的电源被拔掉，你便消失在这个“真实”的世界里了。如果你是一名基督徒，那便更麻烦，你甚至分不清童话与现实的区别，你相信一个人活在鱼的肚子里   三天三夜，而不相信进化论，你不相信圣经中的故事大多是山寨，他们来自一个个天文现象，你不相信这些故事只是那些统治者为了不让你思考而编写的谎言，你反   问我如果我错了怎么办，是啊，如果我错了又如何，但是柯南说“真相永远只有一个”，也许你宁愿相信911事件真的是恐怖分子的恐怖活动，而不愿意相信这是  美国政府自导自演的苦肉计，这只是为了满足个别人的贪婪，和”&lt;a href="http://blog.afaker.com/2009/10/22/%e7%be%8e%e6%9d%a5%e8%87%aa%e9%80%89%e6%8b%a9/"&gt;美来自选择一样&lt;/a&gt;“， 你需要选择一个你觉得对你来说可接受的真相，那么这又进入了一个认知的问  题，因为你知道的东西会帮助你做判断，但是你不知道的东西，因为你不知道，所以在你做出选择后你觉得你的选择是正确的，一旦你知道新的知识了解到新的事实  听到新的言论，能够可以再次做出判断时，也许你会发现你一直相信的真相其实是一个谎言。所以，你知道的东西往往不重要，你不知道的东西有时却是至关重要  的。我的建议是：读书。&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027662180</link><guid>http://blog.afaker.com/post/3027662180</guid><pubDate>Fri, 05 Feb 2010 06:48:05 -0500</pubDate><category>真相</category></item><item><title>美来自选择 </title><description>&lt;p&gt;&lt;a href="http://www.mymodernmet.com/profiles/blogs/soul-searching-landscapes-8"&gt;&lt;img src="http://designyoutrust.com/wp-content/uploads7/nicolasbouvier5dut.jpg" width="580"/&gt;&lt;/a&gt; 最近在看Programic Thinking and Learning,里面有句话是“Beauty emerges from from  selection“，美来自选择（而不是美宝莲）。书中说艺术不是来自创造本身而是来自在无尽的选择中作出的选择，音乐家在乐器，旋律，音调音阶，节奏 中其实有几乎无限的各种组合。画家可以在两千四百万种不同的色调中作选择。作家要在5万多个汉字，以及上百万个词语中选择完美的字句。你听什么歌，看什么 书，写什么样的代码，用Ubuntu还是Fedora，体现出的是你对美的看法。再从ipod的包装说起，ipod的包装没有太多废话，只是说它能存多少 首歌和视频，然后配有一个漂亮的图片，简单直接，但优雅。相比起来，Youtube上有段视频是说明如果让Microsoft来设计ipod会是什么样： 复杂的包装，包装上充满了高密度的文案，商标，图标，免责声明，等等诸如此类，最后会有个硕大的印刷体字:30GB。这就是重要的一点，iPod告诉你它 能存放的歌曲数，而微软风格的iPod（以及其他mp3设备的竞争者）告诉你它可以存放的G字节数。实际上顾客不在乎G字节只有我们这些geeks才会关 心，大多数人只想知道它能存放多少首歌曲，或者视频、照片。事实证明iPod极具魅力，无论是包装还是用户界面和音质。它是mp3市场霸主：有魅力的东西 总是有效。拿现在的淘宝来说（阿里巴巴就不说了，他的用户是中小企业，阿里巴巴对他们来说，美学上的东西没有太多感觉），虽说他是C2C的老大哥，但是在 我看来它只不过是砸钱胚子，无论是他的底层技术（看看他们的推荐，再想想你买件东西平均花多长时间）还是用户界面还是铺天盖地的广告。我觉得淘宝应该想象 一下如果Google要作C2C会是什么样子，我想那时两者竞争的不是搜索技术（虽然两者的差别很大）和谁的现有用户多，而是美学上的竞争。 从现在开始，记住，美学使得一切变得不同，无论是用户界面，还是你的代码布局和注释，选择的变量名，抑或是你的桌面安排，以及任何事。&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027655249</link><guid>http://blog.afaker.com/post/3027655249</guid><pubDate>Thu, 22 Oct 2009 08:29:29 -0400</pubDate><category>美</category></item><item><title>如何意淫？ </title><description>&lt;p&gt;如何意淫？ 施能毅和我谈到意淫，我无法体会他所说的意淫为何物，SICP我还没有读，我无法体会把完成SICP的习题当作玩具的感受是什么样子，他说用一个月学会扫雷游戏，而在看完SICP后只消一周时间就打败了FIFA游戏的机器人。 那么到底什么是意淫？我通过搜索引擎去查找什么是意淫(当然,意淫一词在网络上被称为YY), 意淫一词最早源自《红楼梦》第五回：游幻境指迷十二钗 饮仙醴曲演红楼 梦，下面是百度百科的解释：&lt;/p&gt;&#13;
&lt;blockquote&gt;（警幻仙子谓贾宝玉为“古今第一淫人”）“如世之好淫者，不过悦容貌，喜歌舞，调笑无厌，云雨无时，恨不能尽天下之美女供我片时 之趣兴，此皆皮肤淫滥之蠢 物耳。如尔则天分中生成一段痴情，吾辈推之为‘意淫’。‘意淫’二字，惟心会而不可口传，可神通而不可语达。” 是一种超越性爱的感情方式。可谓情爱中的极品，可以算是个大大的褒义词。 后来，意淫一词出现在mop等各类网站，知不切实界地胡思乱想。不一定指下流的想法。yy小说就是通常用来实现在现实中没有办法实现的事情，还显得津津有 味。但凡想法天真，内容强大（主人公）故事情节严重不符合事实逻辑。概称为yy。 “意淫”这个曹雪芹创造的语汇，因为里面有一个“淫”字，历来被人误读误解。现在有的人写文  章，把它当成一个绝对贬义的词汇，理解成“在意识里猥亵”，甚至“在意识里跟看中的人性交”那样的含义，说谁“意淫”，就是批评谁心思不正，下流堕落。这  样理解“意淫”，绝对歪曲了曹雪芹的原意。这个概念是曹雪芹通过警幻仙姑，在第五回快结束时，很郑重地提出来的。建议大家再细读相关的那些文字。 警幻仙姑跟贾宝玉说：“  吾所爱汝者，乃天下古今第一淫人也。”这当然把贾宝玉吓一大跳，宝玉就忙道饶，说自己因为不爱读书，已经被家长责备，岂敢再冒“淫”字，自己年纪小，不知   道“淫”字为何物。这时警幻仙姑就给“意淫”下了定义，她说，淫虽一理，意则有别，如世之好淫者，不过悦容貌，喜歌舞，调笑无厌，云雨无时，恨不能尽天下   之美女供我片时之趣兴，此皆皮肤滥淫之蠢物耳；那么贾宝玉呢，她认为他不是这样的，而是脱俗的，是超越皮肤滥淫的，她说，如尔则天分中生成一段痴情，吾辈   ——也就是仙界众仙姑们——把这种痴情，推之为意淫。“推之”就是推崇为，充分地肯定为，可见“意淫”在这里被确定为一个正面的概念，一个不是一般俗人所  能具有的品质，是贾宝玉天分里、人格里，一个非常值得推崇的优点。那么，对青春女性不  存皮肤滥淫之想，没有轻薄猥亵的心理，究竟是个什么样的态度呢？警幻仙姑进一步说，意淫二字，惟心会而不可口传，可神通而不可语达，汝今独得此二字，在闺   阁中，固可为良友，然于世道中未免迂阔怪诡，百口嘲谤，万目睚眦。确实，这两个字眼，我在这里引用，都有心理障碍，毕竟有些听我讲座，读我文章的，还是些  少男少女啊，现在我却告诉大家，这两个字眼，竟然是个正面的概念，在曹雪芹笔下，它是个褒义词，我也担心会有人认为我心术不正，误人子弟，嘲谤睚眦。但  是，毕竟曹雪芹就是这么个意思。你看他后面写贾瑞，癞蛤蟆想吃天鹅肉，两次被王熙凤耍弄，还不死心，后来得到风月宝鉴，人家跟他说一定要反照，他非要正   照，跑到镜子里去皮肤滥淫，最后死掉——他那个正照风月宝鉴的意识行为，曹雪芹使用了“意淫”的字眼吗？你去细翻翻，细查查，各种版本都查查，没有。曹雪  芹的“意淫”不是那样的意思，你怎么能误读误引，非用这两个字来表达类似贾瑞那样的意识行为呢？&lt;/blockquote&gt;&#13;
&lt;p&gt;百度百科中还有更多解释，你可以去看看;http://baike.baidu.com/view/27746.htm以及http: //baike.baidu.com/view/17290.htm，意淫的概念还包括鲁迅先生笔下的 阿Q  其实也是YY的典型，他不但大多数时候是胡思乱想、精神胜利，而且偶尔也会有贾瑞的特征么以及《鹿鼎记》中的韦小宝等。不过我在初中时便读过《红楼 梦》（这得感谢我的老爹)，但我的确对意淫这个词印象不深，但不管怎样我在keepwalking这个博客上的一篇文章：[搜索笔记]从意淫到歪歪 &lt;a href="http://blog.donews.com/keepwalking/archive/2005/09/09/546731.aspx%E6%89%BE%E5%88%B0%E4%BA%86%E4%B8%80%E4%B8%AA%E7%A8%8D%E5%BE%AE"&gt;http://blog.donews.com/keepwalking/archive/2005/09/09/546731.aspx找到了一个稍微&lt;/a&gt; 精确一点的定义:用思想、意志力、精神力、超能力，总之是脑部运动来达到某种心理、生理、口头上的快感，这称为yy。不一定是要下流的。 初始时我觉得这个定义秒极了，我觉得已经找到答案，因为这个和我在尼采《疯狂的意义 : 尼采超人  哲学集》中读过的一句话有些相似，意志改变世界。而且意淫似乎也该是这样来解释，许多人都是这样意淫的，人们总是喜欢作不切实际的幻想，以得到快感。可是 我觉得这样的意淫似乎太浅显了，因为我觉得施能毅的所说的意淫不大可能是这样的解释。我觉得应该有另外的答案。 在不久前我看到一幅漫画，如下图，  &lt;img src="http://imgs.xkcd.com/comics/python.png" alt="Python" height="463" width="408"/&gt; 图中站在地上的小人开场白是:YOU’RE FLYING! HOW? 而飞行在空中的小人则回答:PYTHON!I LEARNED IT LAST  NIGHT!EVERYTHING IS SO SIMPLE!HELLO WORLD IS JUST print “Hello,world!” 惊叹号如此之多，连我都吓到了，可是漫画作者为何要让那个小人飞行在空中，为何不是简单的与地平线平行的面对面的对话。当然这是学了Python的缘故， 也是故事的起因，而飞行小人只用了一个晚上的时间学会了Python语言，这是真实的吗？也许是，也许不，因为这是漫画，可是任何创作都是以现实生活作为 参考的，就像科幻小说和电影中的怪兽或外星人，他们再怎么可怖，奇形怪状，都还是以人类形体为依据进行夸张的改造、变形，主观臆造是逃离不了客观生活的。 所以我们的这幅漫画也是有原型的，可能是漫画作者的朋友，也可能是作者自己。这样我们就得到一个结论，的确有人曾经用一个晚上或是一个很短的时间学会了 Python,而且体会到Python编程哲学的道义（当然这很厉害了，非一个了解很多计算机编程语言不能做到），他欣喜若狂，似乎已得道，感觉自己可以 飞行于空中。我不知道其他人学了Python后是什么感觉，我只觉得学了Python,懂了别人不懂的东西，觉得其他编程语言都是shit,没有其他语言 可以和Python相比，返璞归真，写代码就该是这种感觉，自觉高人一等，这个道理其实源自苏州大学的文学院教授陈子鸣，我曾经选修他的《演讲与辩论》 课，他曾经在课上说他自己当年读《西方哲学史》，通读全书之后，他认为不管自己有没有读懂这本厚厚的书，如果你坚持了读完它，那么就会感觉为人的境界比别 人高出一点，看事情也比别人明了许多（这便也有点意淫的味道了），而，他又说过一句话，我觉得很受用，一直到今天仍然记得：“人与人之间的差别就在于那么 一点点”，所以在《大话西游》里八戒说本来他比大师兄（孙悟空)高那么一点点，就因为沙僧这个累赘，现在他比孙悟空低那么一点点。所谓一人得道，鸡犬升天 （当然还有自己啊）。 我不知道有多少人体会过乒乓球、台球给人带来的快感,当乒乓球从对方抽杀过来，如果它以庄则栋攻球的最高速度时速126公里飞过来，球桌2米长，那么我从 球在对方球桌面弹起再从我这边的桌面弹起，这个过程可能只有0.06秒钟的时间，我在这个过程中，我需要对球的飞行轨迹作观察，对球的落球点作出判断，最 后在很短的时间内反杀回去。球的飞行轨迹可以根据球的最初飞行轨迹，球的旋转角度和飞行速度来预测，可是对于所有人来说是无法直接计算得出这些数据的。如 果真的去计算这些数据，预测球的落点就好像解一组极其复杂的联立方程式一样困难，而且每当球的轨迹变化，新的数据又不断涌现，这些方程式就得不断地反复运 算。如果我还是初中时的十几岁的少年，身边没有电脑、没有计算器、没有纸和笔、没学过微积分，而且只有短短的0.06秒，我该怎么办？ 事实是我什么都不需要去计算，我利用我的神经网络的模式识别能力作出判断。我在初中时已经通过反复练球，观察球的飞行路线，我的神经网络经历大量实践，而 在我掌握所有诀窍之后，当球从对方那边反弹过来，迅速预测和判断落球点，然后通知我的右手(对，我拿筷子的那只),我不会在内心进行计算，大脑也不会作任 何无意识的计算，我所作的只是第二本能。 也许你认为我已经跑题了，因为我似乎只是在说一个普通的事实，与意淫没有任何瓜葛，是的，这或许不是通常意义上的意淫，不是上面我所作的解释和定义，而这 也正是我废这么多唇舌的原因，我觉得意淫应该是像《阿甘正传》中阿甘那种打乒乓球的方式，飘逸潇洒，随心所至，阿甘是个智障者，所以他作事情专注而无杂 念， 当然即使这样仍然无法做到意淫的，那么怎样才能意淫呢，而且大家可能对我所说的意淫还不太清楚到底指的  是什么，我再以一个例子解释，我在向施能毅询问什么是意淫时，他只回复了八个字:佛祖拈花，迦叶微笑。这是一个典故，是说佛祖给弟子讲授佛法，佛祖拈花。 众弟子不解，唯迦叶会心一笑，佛祖说迦叶已明佛法。当然这个有点玄，可是我觉得这是意淫，所谓意淫不是像韦小宝那样或像你那般作不切实际的幻想，不做任何 付出和努力而得到快感和满足感（而这样的以靠想象为基础的快感通常不能长久，偶尔的），它是通过不断地付出和艰苦训练的结果，而且是与大脑的活动相关的， 最终表现出的本能状态，是一种自由与平静的表征，但勤奋努力和艰苦付出又非充分条件，以乒乓球为例，许多人乒乓球可能打得花团锦簇，百转千回，他的确在少 年时代下了苦功夫花了大量精力和时间练习乒乓球，大脑经过长期的训练使得现在在接球时毫不费力，可是他仍然不是在意淫，那为什么阿甘是在意淫，诺基亚 N76的乒乓李小龙广告中的是在意淫，其实并不是因为没有人做得到，而是因为没有人懂得打乒乓球，大家在打球的过程中的想法受到了限制，“发球应该是这个 样子，抽杀应该是那个样子，打败对手是重要的，所以接到球是必要的”，电影中的阿甘之所以乒乓球能打成那样，全是因为他是个智障者，只有简单的动机，把球 接过去就行，对他来说打乒乓球就像在越南战争新兵训练营中的军队生活一样，不管什么问题，只用回答”是的，长官”就可以，简单直接，但对我们来说，他的打 法随心所欲，精确无比，可是在阿甘看来这只不过是重复本能运动，然后让打球更自然一些，当然这同样遵循这神经网络模式识别的道理。另外，大家可能都玩过扫 雷游戏，当然我们当中有些人从未玩过，他们认为只有安装文件大于1G的游戏才值得去湾，而像扫雷这样的小把戏简直是在浪费青春（这还真具有讽刺意味),大 家玩扫雷都知道玩法只需根据格子中显示的数字判断雷的位置通过一些简单的推断，然后把雷找出来，这是正确的，大家都是这么玩的，所以大家都不会意淫，我告 诉你另些人是怎么玩法，他们的鼠标左右键几乎一直在点，好像根本没有进行思考的余地，他们一次成功的几率不高(因为太快误点到雷上之类),但是若是成功清 除所有雷所花的时间却异常的少，当我问他们的时候，大多数人告诉我他是猜的。大家可能认为他们真的是猜，可是我告诉你，那绝对不是靠运气，你可以试试看， 他们由于玩了很长时间的扫雷，总想在速度上有所提高，可是如果真的一个一个去看那些数字然后在大脑中去计算和推理会降低速度，这样永远不会有提高，所以他 们不再看单独的数字，而是全局地去看这些数字，这些数字在大脑中形成一个图，通过不断训练，这些图形成了一个个模式，在以后玩的过程中，只需要大致地看一 下目前已知的数字的布局，然后用已有的模式去识别这些数字布局，而通常模式识别是比即时思考快许多的，这也是为什么正则表达式查找字符很快的原因，当然这 跟打乒乓球是同一个道理。再回到佛祖拈花，迦叶微笑的故事来，在迦叶已明佛法时，他是会心一笑，而不是把手举起来，然后佛祖叫迦叶站起来回答，接着迦叶 blah.blah说一大堆，他没有这样而是会心一笑，迦叶或许很聪明悟性很好，可其他弟子中可能比迦叶聪明悟性好的多的去，然而迦叶他懂得意淫，他会心 一笑，这是人最直接的本能，就像婴儿一出生就大哭，大家看到美女心底由衷感谢造物主，冒出一句“真漂亮”一样，任何懂得意淫的人，他的反应是最直接和自然 的，也就是我们所看到的潇洒自如，所以意淫的表达出来的是朴实的东西，如何意淫完全取决于你的付出以及到达的境界（阿甘没有什么境界不境界的，因为我们要 到达的境界就是真实、无欲无望），什么是境界？我觉得没有必要搞的那么深，如果你觉得对得起大学的三万块学费，就有境界了，真的。要不再八卦一下，大家知 道在电影世界里拍摄关于同一主题的电影的数目破吉尼斯记录的是黄飞鸿系列，大概有一百多部，关于黄飞鸿，他的功夫自然是了得，可是功夫比黄飞鸿厉害的高手 多的去，可是大多数人只是用功夫来打打杀杀，而对于黄飞鸿来说功夫是用来强身健体的，武力不是最终解决问题的方法，黄飞鸿打架时一般点到即止，很少取人性 命，因为你可以一拳打死对手，可是他服你吗？他不服你，为什么？因为他已经死了。如果在你给对手致命一击时，突然停下来，放了他，诶，他服你吗？他当然服 你。&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027647567</link><guid>http://blog.afaker.com/post/3027647567</guid><pubDate>Sun, 01 Mar 2009 09:29:56 -0500</pubDate><category>yy</category><category>意淫</category></item><item><title>怎样使你对编写程序发生兴趣？ </title><description>&lt;p&gt;怎样使你对编写程序发生兴趣？ &lt;br/&gt;海龙问我，有没有一本书能够使自己对编程感兴趣，我当时说我不知道，好像没有，事实是许多人在学了C/C++之 后，就失去了对编程的兴趣，觉得编程既枯燥又难学，我得承认C/C++语言绝对是一流的程序设计语言，它经历整整三十年依然为广大厂商和程序员采纳，可问 题是是否C/C++是最好的入门语言。C/C++固然是其他C体系语言的基础，比如Java,我也是在学习了C/C++之后学的Java,这时学习难度并 不是很大，至少是在语法方面，可是呢，你知道，许多人在C语言的指针问题上出了问题，它很难学（至少是对初学者来说），所以它绝对是个不折不扣的瓶颈，而 C++的面向对象实在是可怕（与其他面向对像语言相比),一堆需要花许多时间来理解的概念（至少我不明白，我认为这是蹩脚翻译惹的祸，辞不达意），友元、 虚函数、纯虚函数、模板等。另一方面，学校只教会你一门语言的语法，却不会告诉你编程的本质以及如何设计出好的程序来，什么才是真正的面向对象？什么是设 计模式？这暂且不说，再回到C/C++是否是最好的入门语言问题上来，很显然，你知道我要说什么：我想说不。那么谁才是最好的入门语言呢？我很想说是 Java，因为许多其他大学都将Java作为首选，而且我自己用起来最流畅的就是Java。可是我仍然认为Java也不是最佳的，因为我觉得最好的入门语 言首先应该具有一下几个特点： 0.简单易学 1.语言本身和自然语言（英语）相似度高，代码对人类可读性高。 2.可交互的 3.面向对象 4.通用性高 5.自由灵活 6.平台独立 7.开发效率高（见效快）  Java只具有0,3,4,6,7，而0也要看条件,1  马马虎虎也算是。而这里我想说的是Python语言。我不想过多谈论Python有多么好，那没有任何用处。可是如果你若问我如何对编程感兴趣，那么我会 说：去学习Python吧。你看，Linux操作系统自带Python不是没有道理，而Googel、豆瓣使用它作为开发语言也不是心血来潮。我觉得初学 者如果能够迅速用一门语言解决掉一个有趣的或是是挑战性的问题，那么这会在很大程度提高自己对编程的兴趣，成就感也很重要不是？不需要编译也不要链接，也 没有莫名其妙笨拙的编译链接错误，只需几行代码，执行并给出结果，那该多好。看看下面最简单的例子: C++版&lt;/p&gt;
&lt;blockquote&gt;#include  void main() { cout « “Hello, world.” « endl; }&lt;/blockquote&gt;
&lt;p&gt;Python、Groovy版本&lt;/p&gt;
&lt;blockquote&gt;print “Hello,world.”&lt;/blockquote&gt;
&lt;p&gt;试想一下你从来没有学过C/C++… &lt;br/&gt; 你得明白，编程语言这玩意只是个工具，如果花在学习工具上的时间占用了大量时间或者很难学，很有可能使大家望而却步，根本就没有机会去解决那些有趣的问 题，是吧？ 可是我仍然没有回答最初的问题，怎样使你对编写程序发生兴趣？因为即使是选择Python也不能使我对编程感兴趣啊，其实我觉得这得问你自己除了编程外对 什么事情特别的感兴趣，拿我自己作例子，大一时我对骇客技术十分好奇，我想黑掉一个网站，可是我不懂那些骇客技术使用的编程语言，我想大干一票，怎么办？ 没办法，学习一个语言吧，于是我开始学VBScript(一种Windows上嫡系脚本语言),而且上了瘾，虽然这个语言现在我已经忘光了。可是如果你对 对Linux感兴趣、对好玩的硬件、对网络感兴趣，那么你就得去学C/C++,对不对？如果你是一名艺术爱好者，那么你可以去学Processing、 CSound，我可以双手按在圣经上发誓，这两种语言绝对能够让你痴迷，并沉醉于其中，只要你真的是热爱艺术，或者你发现游戏里那些带着智能的行为实在是 很迷人，那么你可能会去寻找一种你可以控制这种智能行为的方式，那是什么呢？编程，Java、C/C++或其他语言（Inform),又或者你对开发网站 很感兴趣，想写出想豆瓣那样的网站来，那么，啥都别做了，开始学习Python(ruby on rails,groovy on  grails)吧…&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027633650</link><guid>http://blog.afaker.com/post/3027633650</guid><pubDate>Mon, 20 Oct 2008 07:32:00 -0400</pubDate><category>programming</category></item><item><title>Everyone can cook </title><description>&lt;p&gt;最近看了迪斯尼出品皮克斯制作的动画电影《料理鼠王》，说的是一只会说一口流利英语的老鼠有着灵敏嗅觉而且对厨艺这方面有着不可思议的天赋，在通过与人类 的交往中展现了自己的天才厨艺，而且深刻地反映了贯穿影片始终的主题：Eeverone can cook.  可是并非人人都能成为优秀的厨师,这就是苏大后庄小吃一条街那些炒菜的师傅以及我们的老爸老妈与汉庭坊里的厨师之间的差别。其实这句话与Martin  Flower在《重构》中一句经典的话：”任何一个傻瓜都能写出计算机可以理解的程序”（相当于Everyone can  code）如出一辙，但他的后半句是“只有写出人类容易理解的程序才是优秀的程序员。”而这句话与我高中时代的化学老师兼班主任说的话又十分相似：要把你 写的化学方程式和计算过程写得能够让学校门外买早饭的老太婆都能看懂。（如果你是江浦高级中学的学生，并且是王宏明老师教的化学，或许你会熟悉这句话）最 近我还看到了IBM网站上的一篇文章叫《Everyone can  refactor》http://www.ibm.com/developerworks/cn/linux/opensource/os-ecref /index.html 可是怎样才能写出人类容易理解的程序呢？举个例子吧： 反例： 一个方法调用:w44();你知道什么意思吗？w代表with,44是逗号“，”的ACII码值，它是用来将字符串以逗号隔开的格式化。如果不去看方法里 面的代码，鬼知道它是什么意思。 而下面的： november(20, 2005)；你可能一眼就看出它是什么意思。 它的原型是public void Date november(int day, int year)； 而同样 java.util.Calendar c = java.util.Calendar.getInstance(); c.set(2005, java.util.Calendar.NOVEMBER, 20); c.getTime(); 也能实现上面的功能，但是两者谁更容易使得学校门外买早饭的老太婆理解呢？&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027622033</link><guid>http://blog.afaker.com/post/3027622033</guid><pubDate>Wed, 15 Oct 2008 01:23:54 -0400</pubDate><category>programming</category></item><item><title>Processing...Processing...Processing... </title><description>&lt;p&gt;我琢磨Processing已经有些日子了，对于这种小型计算机语言，我总是抱着”Just for  fun”的态度来尝试，的确它真的满足了我的猎奇心理，而且很好玩很强大很有创造力。语法很简单，由于是基于Java语言，所以在很多方面，它秉承了 Java特性，对我来说学起来很快，不过这种语言不是给一般的程序员使用，It targets visual designers and  artists.许多年前，凡高用颜料和画纸、画笔、调色板创作油画，古代中国人用墨水、宣纸和毛笔创作水墨画，当代有素描画、蜡笔画、炭笔画、水彩画 等，我在高中时代甚至用蓝色圆珠笔和素描纸作画…可是在计算机技术横行的时代，传统的艺术形式显得太保守了点，现在Processing正颠覆这些传 统，可是你不要以为他是Photoshop、Flash、Google  SketchUp、3DMAX或是其他设计软件，Processing是一种计算机语言，就像Java、Python、Scheme. 他是用Java语言写的，Open  Source,用来创作数字艺术，你通过编写程序代码，创作一件艺术品，通过分形，递归，适当的和谐函数，你可以获得极佳的效果，当然你可以将它保存生成 的图像格式（如png,tiff,jpg等），同时还可以输出Applet小应用程序在网页上显示（他可是基于Java的，没什么好奇怪的吧），个人觉得 图片就没有这个必要了，一般动画影片可输出为Applet,可能忘了告诉你，Processing还可以创作动画和影片等许多多媒体形式。 Processing可以运行在Windows、Linux、Mac上，需要Java虚拟机，所以如果你没有安装Java环境的话，记得下载一个自带 Java的包，Processing的官方站点是www.processing.org,感兴趣的话，尝试一下。下图是我的初次尝试:&lt;/p&gt;
&lt;a href="http://picasaweb.google.com/lh/photo/rYZOqKrmMRx1OUj2mEypAw"&gt;&lt;img src="http://lh6.ggpht.com/toozoofoo/SOb6g8Jkf6I/AAAAAAAAAXs/v6ytmE3MzdE/s144/Screenshot-test-6.png"/&gt;&lt;/a&gt;From &lt;a href="http://picasaweb.google.com/toozoofoo/Processing"&gt;Processing&lt;/a&gt; &lt;a href="http://picasaweb.google.com/lh/photo/rYZOqKrmMRx1OUj2mEypAw"&gt;&lt;img src="http://lh6.ggpht.com/toozoofoo/SOb6g8Jkf6I/AAAAAAAAAXs/v6ytmE3MzdE/s144/Screenshot-test-6.png"/&gt;&lt;/a&gt;From &lt;a href="http://picasaweb.google.com/toozoofoo/Processing"&gt;Processing&lt;/a&gt; &lt;a href="http://picasaweb.google.com/lh/photo/lo2WH1wexbbaejy_I4-e4w"&gt;&lt;img src="http://lh3.ggpht.com/toozoofoo/SOb6hPFUarI/AAAAAAAAAX0/PAdT4SvgDvs/s144/Screenshot-test-8.png"/&gt;&lt;/a&gt;From &lt;a href="http://picasaweb.google.com/toozoofoo/Processing"&gt;Processing&lt;/a&gt; &lt;a href="http://picasaweb.google.com/lh/photo/4didc-CwNUbmZLKPLsalZw"&gt;&lt;img src="http://lh6.ggpht.com/toozoofoo/SOb6haCmYWI/AAAAAAAAAYE/frrxwnWoC-Y/s144/Screenshot-test-9.png"/&gt;&lt;/a&gt;From &lt;a href="http://picasaweb.google.com/toozoofoo/Processing"&gt;Processing&lt;/a&gt; &lt;a href="http://picasaweb.google.com/lh/photo/4didc-CwNUbmZLKPLsalZw"&gt;&lt;img src="http://lh6.ggpht.com/toozoofoo/SOb6haCmYWI/AAAAAAAAAYE/frrxwnWoC-Y/s144/Screenshot-test-9.png"/&gt;&lt;/a&gt;From &lt;a href="http://picasaweb.google.com/toozoofoo/Processing"&gt;Processing&lt;/a&gt; &lt;a href="http://picasaweb.google.com/lh/photo/1c_CeAaZGuAGEOwjSES7zw"&gt;&lt;img src="http://lh5.ggpht.com/toozoofoo/SOcHr-SyAiI/AAAAAAAAAYs/PLE_Ca1IvHI/s144/Screenshot-test-11.png"/&gt;&lt;/a&gt;From &lt;a href="http://picasaweb.google.com/toozoofoo/Processing"&gt;Processing&lt;/a&gt; &lt;a href="http://picasaweb.google.com/lh/photo/0JfTccX70HdX6-62QiHG7A"&gt;&lt;img src="http://lh5.ggpht.com/toozoofoo/SOcHsKoF5EI/AAAAAAAAAZA/JNSEgYZQ_Y8/s144/Screenshot-test-13.png"/&gt;&lt;/a&gt;From &lt;a href="http://picasaweb.google.com/toozoofoo/Processing"&gt;Processing&lt;/a&gt; &lt;a href="http://picasaweb.google.com/lh/photo/6MuEvnuJi6B3Sgfa0GEAEg"&gt;&lt;img src="http://lh5.ggpht.com/toozoofoo/SOcHsO25g-I/AAAAAAAAAZI/ZoFHcs4j0ME/s144/Screenshot-test-14.png"/&gt;&lt;/a&gt;From &lt;a href="http://picasaweb.google.com/toozoofoo/Processing"&gt;Processing&lt;/a&gt;</description><link>http://blog.afaker.com/post/3027613717</link><guid>http://blog.afaker.com/post/3027613717</guid><pubDate>Sat, 04 Oct 2008 02:09:33 -0400</pubDate><category>processing</category><category>art</category><category>programming</category></item><item><title>把Gmail邮箱当硬盘使(在Ubuntu上挂载gmailfs) </title><description>&lt;p&gt;以前在《Google  Hacks》上了解到GmailFS可以挂载到本地硬盘，今天没事干，在Ubuntu上尝试玩了一把。&lt;br/&gt; 前提：1’ 有一个Gmail帐户&lt;br/&gt; 2’ Ubuntu操作系统&lt;br/&gt; 3’ 可以连上Internet&lt;br/&gt; Just do it:&lt;br/&gt; 终端上：&lt;br/&gt; b@t:~$ sudo apt-get install gmailfs&lt;br/&gt; b@t:~$ sudo mkdir /mnt/gmail&lt;br/&gt; b@t:~$ sudo mount -t gmailfs none /mnt/gmail/ -o username=toozoofoo,password=mypassword,fsname=Linux&lt;br/&gt; 可能终端会出现Ignored option :rw的提示，那没关系。&lt;br/&gt; 事实上我并不知道挂载成功是什么状况，因为挂载后，什么也没变，/mnt/gmail里什么也没有，可是当我在这个挂载点上创建一个目录时过程有点缓慢，&lt;br/&gt; b@t:~$ sudo mkdir /mnt/gmail/Hello_Gmail&lt;br/&gt; 我知道它是联网在远程gmail服务器上创建了目录，那么我想应该是成功了。并且当我登录我的gmail时有四封电子邮件,发件人是我自己，其中一封很明显地告知我已经挂载成功：&lt;br/&gt; 标题：&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;v=3 r=1222872307 q=__g__Linux__h__&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;正文：n=__c__Hello_Gmail__d__ p=__a____fs____b__ l=__e____f__&lt;br/&gt; 虽然有些符号看不明白，但不打紧，我见着了Hello_Gmail这个字符串,它正是我创建的目录名。&lt;/p&gt;</description><link>http://blog.afaker.com/post/3027597833</link><guid>http://blog.afaker.com/post/3027597833</guid><pubDate>Wed, 01 Oct 2008 11:17:02 -0400</pubDate><category>gmail</category><category>gmailfs</category><category>ubuntu</category></item></channel></rss>

