<?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>The Ji Village News</title> <atom:link href="http://www.haidongji.com/feed/" rel="self" type="application/rss+xml" /><link>http://www.haidongji.com</link> <description>季庄新闻--Haidong Ji's Blog</description> <lastBuildDate>Thu, 17 May 2012 04:28:22 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.1.2</generator> <item><title>剃头</title><link>http://www.haidongji.com/2012/05/16/%e5%89%83%e5%a4%b4/</link> <comments>http://www.haidongji.com/2012/05/16/%e5%89%83%e5%a4%b4/#comments</comments> <pubDate>Thu, 17 May 2012 04:28:22 +0000</pubDate> <dc:creator>Haidong Ji</dc:creator> <category><![CDATA[Chinese]]></category> <category><![CDATA[EastWest]]></category> <guid
isPermaLink="false">http://www.haidongji.com/?p=1350</guid> <description><![CDATA[头发长了。吃完晚饭，遛完狗，我骑了洋车子（家乡土话。学名自行车）到镇中心的Hair Cuttery连锁店去理发。 常给我理发的来自越南的华裔女士今天不在。我不在乎发型，我的妆，从来都是清汤挂面，素面朝天，所以就告诉工作人员哪个理发师有空都可以。坐在那儿没几分钟，莎伦剃完了一个后，就给我理发。顺便说一句，进商店、到饭店预约等需要挂个名时，我都摇身一变，自称亚历克斯，能省点麻烦。 莎伦来这个店不到一星期，三四十岁的样子。她之前在Hair Cuttery的另一个连锁店。她说那个店里的发型师有矛盾，玩办公室政治，所以选择离开。其实我感觉这个店也不见得就能好到哪里去，我以前就注意到这儿的发型师们在该谁接电话、扫地等方面逗心眼儿、说风凉话。但话说回来，这东西和人的脾性有关，希望这地儿能和她的意。 就随便聊聊天，开开玩笑。莎伦住的远一点，买不起车，所以上班都是坐公共汽车，要转好几次。现在好一点，但冷天、雪天就不好受。但车也有车的麻烦，她说一想到上班高峰期那么多的车在路上而自己要和他们抢道开时就觉得公交也很不错。她没自己的房子，住公寓，我说那你考虑就近找个公寓住呀，最好一班汽车直达。她说正考虑，偏西北方的公寓可能便宜些。就聊起了网上找公寓的问题，说起有的Craig&#8217;s list上好像有变态在上面活跃，挺逗的。理了个平头后，我让她洗了下。理发和洗头共15块美元，我给了3块小费，总共18。 实际上我以为人进化到现在，毛发应当是下一个被淘汰的部件。这玩意儿没大用，碍事不说，还得花钱伺候它。小时候在季庄农村，都是邻居或遛乡的理发师用推子剃头，俺大也借别人的推子自己给我们剃过。遛乡的和镇上的理发室在剃头的同时也提供刮胡子业务。那时刮胡子就用泡沫，我不知那泡沫从哪里来。一般还有皮带子用来磨刮胡刀。 在厦大上学时，记得隔壁宿舍的林凯哥们激我剃光头，我的要求好像是要他请客买单。那是我的第一次光头。来美国后我好像也剃过一次光头，现在记不太清啦。 对于初到美国的中国人，剃头也可以算是个有趣的话题吧。我那会儿，90年代中后期，不少男留学生买个推子，互相帮助解决理发的难题，不知现在怎样。这里有好几个方面的因素吧。语言方面，一些词儿和描述方式会有困难。经济上，当时一换成人民币就是一大笔钱，能省则省。还有就是文化习俗方面也会有影响吧：剃头是一个肢体的接触，里面蕴含着文化习俗上的潜规则，在一个人生地不熟的环境里，让一个和自己种族、语言、文化、风俗等不同的人来摆弄自己的脑袋，心里稍有犯毛是完全可以理解的。我想国际人士初到中国可能也有这方面的挑战吧。慢慢了解熟悉后，就好了。我记不太清我留学时第一次去美国私人理发店花了多少钱，说了什么话，但尴尬和误解肯定有。后来常去那个店，还从店主也是理发员那儿买了辆自行车。 后来谈恋爱成家后，我曾不止一次要求老婆给我剃头，她绝不答应。瑞典理发比较贵，好几十上百美刀，所以她在瑞典时，都是让她姐姐给她做头发。在美国，她没办法，也得去理发厅。她姐姐几年前来过一次美国，还在这儿给她做头发。我爸第一次来美国时，我哥那儿有理发的家什儿，他又给我们哥俩在美国剃了回头，挺好。我想这对于双方，都会有一种亲近和满足吧。 儿子出生后，我们专门买了套剃头的家什儿，就给他用过一次。现在他是上初中的少年，留起长头发来啦！我现在想让他剪剪，但我说不大管用，得让孩娘来做这方面的工作。]]></description> <content:encoded><![CDATA[<p>头发长了。吃完晚饭，遛完狗，<a
href="http://www.haidongji.com/2006/08/15/how-do-you-get-on-your-bike/">我骑了洋车子</a>（家乡土话。学名自行车）到镇中心的Hair Cuttery连锁店去理发。</p><p>常给我理发的来自越南的华裔女士今天不在。我不在乎发型，我的妆，从来都是清汤挂面，素面朝天，所以就告诉工作人员哪个理发师有空都可以。坐在那儿没几分钟，莎伦剃完了一个后，就给我理发。顺便说一句，进商店、到饭店预约等需要挂个名时，我都摇身一变，<a
href="http://www.haidongji.com/2010/08/31/%e4%bd%a0%e5%a5%bd%ef%bc%8c%e6%88%91%e6%98%af%e4%ba%9a%e5%8e%86%e5%85%8b%e6%96%af/">自称亚历克斯</a>，能省点麻烦。</p><p>莎伦来这个店不到一星期，三四十岁的样子。她之前在Hair Cuttery的另一个连锁店。她说那个店里的发型师有矛盾，玩办公室政治，所以选择离开。其实我感觉这个店也不见得就能好到哪里去，我以前就注意到这儿的发型师们在该谁接电话、扫地等方面逗心眼儿、说风凉话。但话说回来，这东西和人的脾性有关，希望这地儿能和她的意。</p><p>就随便聊聊天，开开玩笑。莎伦住的远一点，买不起车，所以上班都是坐公共汽车，要转好几次。现在好一点，但冷天、雪天就不好受。但车也有车的麻烦，她说一想到上班高峰期那么多的车在路上而自己要和他们抢道开时就觉得公交也很不错。她没自己的房子，住公寓，我说那你考虑就近找个公寓住呀，最好一班汽车直达。她说正考虑，偏西北方的公寓可能便宜些。就聊起了网上找公寓的问题，说起有的Craig&#8217;s list上好像有变态在上面活跃，挺逗的。理了个平头后，我让她洗了下。理发和洗头共15块美元，我给了3块小费，总共18。</p><p>实际上我以为人进化到现在，毛发应当是下一个被淘汰的部件。这玩意儿没大用，碍事不说，还得花钱伺候它。小时候在季庄农村，都是邻居或遛乡的理发师用推子剃头，俺大也借别人的推子自己给我们剃过。遛乡的和镇上的理发室在剃头的同时也提供刮胡子业务。那时刮胡子就用泡沫，我不知那泡沫从哪里来。一般还有皮带子用来磨刮胡刀。</p><p>在厦大上学时，记得隔壁宿舍的林凯哥们激我剃光头，我的要求好像是要他请客买单。那是我的第一次光头。来美国后我好像也剃过一次光头，现在记不太清啦。</p><p>对于初到美国的中国人，剃头也可以算是个有趣的话题吧。我那会儿，90年代中后期，不少男留学生买个推子，互相帮助解决理发的难题，不知现在怎样。这里有好几个方面的因素吧。语言方面，一些词儿和描述方式会有困难。经济上，当时一换成人民币就是一大笔钱，能省则省。还有就是文化习俗方面也会有影响吧：剃头是一个肢体的接触，里面蕴含着文化习俗上的潜规则，在一个人生地不熟的环境里，让一个和自己种族、语言、文化、风俗等不同的人来摆弄自己的脑袋，心里稍有犯毛是完全可以理解的。我想国际人士初到中国可能也有这方面的挑战吧。慢慢了解熟悉后，就好了。我记不太清我留学时第一次去美国私人理发店花了多少钱，说了什么话，但尴尬和误解肯定有。后来常去那个店，还从店主也是理发员那儿买了辆自行车。</p><p>后来谈恋爱成家后，我曾不止一次要求老婆给我剃头，她绝不答应。瑞典理发比较贵，好几十上百美刀，所以她在瑞典时，都是让她姐姐给她做头发。在美国，她没办法，也得去理发厅。她姐姐几年前来过一次美国，还在这儿给她做头发。我爸第一次来美国时，我哥那儿有理发的家什儿，他又给我们哥俩在美国剃了回头，挺好。我想这对于双方，都会有一种亲近和满足吧。</p><p>儿子出生后，我们专门买了套剃头的家什儿，就给他用过一次。现在他是上初中的少年，留起长头发来啦！我现在想让他剪剪，但我说不大管用，得让孩娘来做这方面的工作。</p> ]]></content:encoded> <wfw:commentRss>http://www.haidongji.com/2012/05/16/%e5%89%83%e5%a4%b4/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>PowerShell TDD with PSUnit</title><link>http://www.haidongji.com/2012/05/08/powershell-tdd-with-psunit/</link> <comments>http://www.haidongji.com/2012/05/08/powershell-tdd-with-psunit/#comments</comments> <pubDate>Wed, 09 May 2012 04:26:05 +0000</pubDate> <dc:creator>Haidong Ji</dc:creator> <category><![CDATA[Technology]]></category> <category><![CDATA[Windows]]></category> <guid
isPermaLink="false">http://www.haidongji.com/?p=1345</guid> <description><![CDATA[My own Cliffs Notes on PowerShell unit testing. Hope it helps you as well. I may update this as I move along. 1. For serious, robust programming, TDD is definitely the way to go; 2. I looked at both Pester and PSUnit. Despite the 10 votes (so far) for the Pester answer on a stackoverflow [...]]]></description> <content:encoded><![CDATA[<p>My own Cliffs Notes on PowerShell unit testing. Hope it helps you as well. I may update this as I move along.</p><p>1. For serious, robust programming, TDD is definitely the way to go;</p><p>2. I looked at both Pester and PSUnit. Despite the 10 votes (so far) for the Pester answer on a stackoverflow question, my tinkering with both led me to conclude that I will use PSUnit.</p><p>Overall, <a
href="http://tellingmachine.net/post/PSUnit-PowerShell-Unit-Testing-Framework-ndash3b-Getting-Started-Guide-ndash3b-Version-2-Beta-1.aspx">the notes here are helpful</a>, but I needed to tweak a few places to get it working in my dev environment.</p><p>3. The download zip file from CodePlex has the timestamp of 20090806 and has Beta status. Don&#8217;t worry about it;</p><p>4. Move files around and create directories as necessary. You need to check each ps1 file&#8217;s property and click Unblock. It will be nice to have this automated;</p><p>5. After creating a PowerShell profile under C:\Users\haidong\Documents\WindowsPowerShell and copying the profile files, profile.ps1 needs to be modified: $PSUnitPath = &#8220;C:\Users\haidong\PSUnit&#8221;;</p><p>6. Microsoft.PowerShellISE_profile.ps1 also needs to be modified. Comment out the CTP3 line and uncomment the . PSUnit.ISE.ps1 line;</p><p>7. Run PowerShell as Administrator. You need to do this even if you are logged in as Administrator. Then do &#8220;set-executionpolicy RemoteSigned&#8221;;</p><p>8. The ISE addon menu is really handy. If you are running Windows 2008 R2, PowerShell ISE may not come installed. Add this feature using Server Manager.</p> ]]></content:encoded> <wfw:commentRss>http://www.haidongji.com/2012/05/08/powershell-tdd-with-psunit/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>开源软件的参与及社区互动的一些体会和建议：沟通和交流</title><link>http://www.haidongji.com/2012/04/03/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e6%b2%9f/</link> <comments>http://www.haidongji.com/2012/04/03/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e6%b2%9f/#comments</comments> <pubDate>Wed, 04 Apr 2012 02:54:28 +0000</pubDate> <dc:creator>Haidong Ji</dc:creator> <category><![CDATA[Chinese]]></category> <category><![CDATA[EastWest]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Windows]]></category> <guid
isPermaLink="false">http://www.haidongji.com/?p=1340</guid> <description><![CDATA[开源上的项目有时需要和国外的人员沟通。怎样沟通，怎样建立互信，这是个非常大的题目。我把观察到的和蹦到脑子里的想法写出来。如果读者有问题，可以提出来。 我在美国待了很久了，也到过一些其他国家和地区。依我看，不管白红黄黑棕哪个国家哪个种族的人，不管你是女皇还是屌丝，本质上讲大家都是人，没大差别。大家都有七情六欲，都有那么点小可爱和小肮脏，都要屙屎放屁。和你我一样，女皇伊丽莎白的屁和屎照样臭，当然还不能排除更臭的可能。大家脱了衣服后都是那几样东西，毛或多或少，高矮大小尺寸有点不同，连披金戴银穿着红皮鞋的德裔种族主义者现任教皇也不例外，不管你外表如何的冠冕堂皇。有的还可能像奥巴马总统一样有点口臭，特别是清晨刚睡醒后那段时间（这是根据第一夫人未当选前的表述，后来她不说这个了。期待方舟子科普口臭的原因和防治）。当然这不是教你去不修边幅，形象还是很重要的，因为形象在一定程度上反映一个人有无自尊。每个国家每个地区每个宗教和无宗教的人都有人的闪光和可憎之处，部分因为经济、习惯和教育的原因，大家的表现（不少人喜欢称之为“素质”的那个东西）会有不同，这都没啥。 乱七八糟地说这些，意思就是说国外的人和你我一样，都是人。抱着以人为本的信念来互相尊重和学习，体谅和理解，知道自己的尊严、自信和底线来结交朋友。有了这个出发点和任何人沟通和交流，给你打包票，错不了。 下面来谈谈一些小建议。我以为这些建议，相关部分在本国同事之间的交流上同样管用。当提到国际友人时，我指的是所有国际友人，不管国籍、肤色、宗教信仰、性取向等。不管你是美国白人、黑人、外籍华裔，不管你来自非洲、中东、日韩、南美，一视同仁地以尊重、友好的方式来维护双方的利益。如果你不希望别人以刻板的方式来对待你，那你就不要以刻板的方式来对待别人。己所不欲，勿施于人，你要有这个风范！ 1. 目前国际上交流的载体大部分是英文，所以不少人在这方面会有障碍。但不要因为有了这个障碍就不敢交流，不要因为害怕病句、拼写的错误而放弃交流。你当然要努力尽量用正确的词和句法，但如果词和语法不完美和正确但意思到了，那么这个交流就很有意义。这样一来二去，你的外语水平会提高。在本文的最后我有提高英语的小建议。另外，其他参与到开源软件的人可能来自非英语国家，他们的英语不见得比你强到哪里去； 2. 要注意名字的拼写。一般来讲，别人怎样自称，你就要用那种拼写方式，包括字母的大小写。我看到一些从国内来的电邮，其中有的不知何故的改变别人名字的大小写，请不要这样做； 3. 无论是书面还是口头交流，千万不要不懂装懂！如果你没搞明白，如果这个事情不是鸡毛蒜皮之类的小事，特别是牵扯到计划、行动、和时间安排等对他人有直接和间接影响的信息，不要敷衍了事！你没搞明白，你可以说，对不起，你可以换一种方式来解释吗？或者你可以以你的理解方式复述重要的交流信息，以此来确认和验证彼此观点和计划的一致性。千万不要在双方还没真正达成一致的情况下拍胸脯、打包票，结果损人损己； 4. 口语交流上，不要太在乎口音。能表述清楚是第一要务，所以说的时候不要着急。一般来讲说慢些会有利于理解； 5. 哈哈一笑是比较常见的沟通方式，也是化解矛盾、将就着过去的方法。另外，我们中的不少人和国际友人交流的机会不多，有好奇心甚至觉得国际友人的举止比较可爱的情况很正常。再加上语言的不便，这种有点紧张的笑声就更容易听到。但我感觉在大多数情况下，国际友人，特别是不太了解东方文化的，可能会以为这种笑对他们来讲有点奇怪甚至难以理解。这不是说面对面沟通或打电话交流时不能笑，大家都板着脸。重要的是能察言观色，观看肢体语言和表情，这方面我感觉东西方的差别不大，并根据这些观察来调整和理清模糊的观点。有些东西，一次解释不清不要紧，以后时机成熟时再提也不迟； 6. 对外交流增多，有很多人来中国，我们要逐渐适应、学习、尊重、和欣赏他们所带来的多样性和多元化。举个小例子，面对面交流时，我们尊重别人的饮食习惯，有人吃素，有人不习惯吃整的带刺儿的鱼等等。尊重别人的时间和空间，有计划并及时沟通； 7. 既然我们都是人，那么国际人士和国内同胞一样，也不乏混蛋、瘪三、种族主义者、圣人蛋、猥琐的小人混蛋之流。再加上事情的偶然性、沟通障碍、不合宜的时机等，有的项目即使我们做得很好，也可能因为各种各样的因素，我们的patch，feature set等不被接纳。在这种情况下，在合作的努力没有结果后，我们可以发布自己的分支和大家共享和进步。 拉拉杂杂，就先写这儿吧。另外，最近在微博上总结了些学英语的小建议，也在这儿先放着吧，如下。 不论哪个语言，想把东西表达清楚和准确，都要认真努力花时间下功夫，母语也是如此，何况外文。多读多写，慢慢积累。读的话，读好的原版的关于自己本身就感兴趣的主题的作品,这样读时就不会觉得枯燥，读得下去的同时可以提高词汇量，学到好的句法和表达方式。举个例子，如你喜欢伍迪艾伦的电影或乔治卡林的单口相声，就可以先在亚马逊上找关于他们的书，要读者评论口碑高的那些，然后弄来读。注意到的新词和好的表达方式，要试着用。个人体会，一些新的词和句法，如果能在合适的场合自己用过一次，就算掌握了大半。多用几次，就是自己的啦。 一开始读外文书时可以囫囵吞枣，但有的词老出现老不懂就要用字典啦。要有好的英汉字典。个人以为如果到了可以用纯英文字典来学新词并且到完全可以理解的地步，那英文水平就很不错啦。 我认为过了六级英语的同学没必要通过读报纸和杂志英语新闻来提高，因那都是肤浅空泛的八股句式，搞得人很浮躁和浮漂，蜻蜓点水一样，内功提不上去，个别的长的深度报导除外。我不是开玩笑，我觉得读《洋葱》（The Onion)学英语要比读NYT，The Wall Street Journal，Time Magazine，Newsweek等更有效和有趣。National Geographic还行，但质量也在下滑。最好是读书，安静一下，每周找个时间，沉下心来，给自己放个假，读本好书，陶冶性情，平稳而满足。在《洋葱》那里你可以逐渐理解部分美式的幽默和讽刺！祝学得愉快！]]></description> <content:encoded><![CDATA[<p>开源上的项目有时需要和国外的人员沟通。怎样沟通，怎样建立互信，这是个非常大的题目。我把观察到的和蹦到脑子里的想法写出来。如果读者有问题，可以提出来。</p><p>我在美国待了很久了，也到过一些其他国家和地区。依我看，不管白红黄黑棕哪个国家哪个种族的人，不管你是女皇还是屌丝，本质上讲大家都是人，没大差别。大家都有七情六欲，都有那么点小可爱和小肮脏，都要屙屎放屁。和你我一样，女皇伊丽莎白的屁和屎照样臭，当然还不能排除更臭的可能。大家脱了衣服后都是那几样东西，毛或多或少，高矮大小尺寸有点不同，连披金戴银穿着红皮鞋的德裔种族主义者现任教皇也不例外，不管你外表如何的冠冕堂皇。有的还可能像奥巴马总统一样有点口臭，特别是清晨刚睡醒后那段时间（这是根据第一夫人未当选前的表述，后来她不说这个了。期待方舟子科普口臭的原因和防治）。当然这不是教你去不修边幅，形象还是很重要的，因为形象在一定程度上反映一个人有无自尊。每个国家每个地区每个宗教和无宗教的人都有人的闪光和可憎之处，部分因为经济、习惯和教育的原因，大家的表现（不少人喜欢称之为“素质”的那个东西）会有不同，这都没啥。</p><p>乱七八糟地说这些，意思就是说国外的人和你我一样，都是人。抱着以人为本的信念来互相尊重和学习，体谅和理解，知道自己的尊严、自信和底线来结交朋友。有了这个出发点和任何人沟通和交流，给你打包票，错不了。</p><p>下面来谈谈一些小建议。我以为这些建议，相关部分在本国同事之间的交流上同样管用。当提到国际友人时，我指的是所有国际友人，不管国籍、肤色、宗教信仰、性取向等。不管你是美国白人、黑人、外籍华裔，不管你来自非洲、中东、日韩、南美，一视同仁地以尊重、友好的方式来维护双方的利益。如果你不希望别人以刻板的方式来对待你，那你就不要以刻板的方式来对待别人。己所不欲，勿施于人，你要有这个风范！</p><p>1. 目前国际上交流的载体大部分是英文，所以不少人在这方面会有障碍。但不要因为有了这个障碍就不敢交流，不要因为害怕病句、拼写的错误而放弃交流。你当然要努力尽量用正确的词和句法，但如果词和语法不完美和正确但意思到了，那么这个交流就很有意义。这样一来二去，你的外语水平会提高。在本文的最后我有提高英语的小建议。另外，其他参与到开源软件的人可能来自非英语国家，他们的英语不见得比你强到哪里去；</p><p>2. 要注意名字的拼写。一般来讲，别人怎样自称，你就要用那种拼写方式，包括字母的大小写。我看到一些从国内来的电邮，其中有的不知何故的改变别人名字的大小写，请不要这样做；</p><p>3. 无论是书面还是口头交流，千万不要不懂装懂！如果你没搞明白，如果这个事情不是鸡毛蒜皮之类的小事，特别是牵扯到计划、行动、和时间安排等对他人有直接和间接影响的信息，不要敷衍了事！你没搞明白，你可以说，对不起，你可以换一种方式来解释吗？或者你可以以你的理解方式复述重要的交流信息，以此来确认和验证彼此观点和计划的一致性。千万不要在双方还没真正达成一致的情况下拍胸脯、打包票，结果损人损己；</p><p>4. 口语交流上，<a
href="http://www.haidongji.com/2006/03/10/%e5%9c%b0%e9%81%93%e7%9a%84%e7%be%8e%e5%bc%8f%e8%8b%b1%e8%af%ad/">不要太在乎口音</a>。能表述清楚是第一要务，所以说的时候不要着急。一般来讲说慢些会有利于理解；</p><p>5. 哈哈一笑是比较常见的沟通方式，也是化解矛盾、将就着过去的方法。另外，我们中的不少人和国际友人交流的机会不多，有好奇心甚至觉得国际友人的举止比较可爱的情况很正常。再加上语言的不便，这种有点紧张的笑声就更容易听到。但我感觉在大多数情况下，国际友人，特别是不太了解东方文化的，可能会以为这种笑对他们来讲有点奇怪甚至难以理解。这不是说面对面沟通或打电话交流时不能笑，大家都板着脸。重要的是能察言观色，观看肢体语言和表情，这方面我感觉东西方的差别不大，并根据这些观察来调整和理清模糊的观点。有些东西，一次解释不清不要紧，以后时机成熟时再提也不迟；</p><p>6. 对外交流增多，有很多人来中国，我们要逐渐适应、学习、尊重、和欣赏他们所带来的多样性和多元化。举个小例子，面对面交流时，我们尊重别人的饮食习惯，有人吃素，有人不习惯吃整的带刺儿的鱼等等。尊重别人的时间和空间，有计划并及时沟通；</p><p>7. 既然我们都是人，那么国际人士和国内同胞一样，也不乏混蛋、瘪三、种族主义者、圣人蛋、猥琐的小人混蛋之流。再加上事情的偶然性、沟通障碍、不合宜的时机等，有的项目即使我们做得很好，也可能因为各种各样的因素，我们的patch，feature set等不被接纳。在这种情况下，在合作的努力没有结果后，我们可以发布自己的分支和大家共享和进步。</p><p>拉拉杂杂，就先写这儿吧。另外，最近在微博上总结了些学英语的小建议，也在这儿先放着吧，如下。</p><p>不论哪个语言，想把东西表达清楚和准确，都要认真努力花时间下功夫，母语也是如此，何况外文。多读多写，慢慢积累。读的话，读好的原版的关于自己本身就感兴趣的主题的作品,这样读时就不会觉得枯燥，读得下去的同时可以提高词汇量，学到好的句法和表达方式。举个例子，如你喜欢伍迪艾伦的电影或乔治卡林的单口相声，就可以先在亚马逊上找关于他们的书，要读者评论口碑高的那些，然后弄来读。注意到的新词和好的表达方式，要试着用。个人体会，一些新的词和句法，如果能在合适的场合自己用过一次，就算掌握了大半。多用几次，就是自己的啦。</p><p>一开始读外文书时可以囫囵吞枣，但有的词老出现老不懂就要用字典啦。要有好的英汉字典。个人以为如果到了可以用纯英文字典来学新词并且到完全可以理解的地步，那英文水平就很不错啦。</p><p>我认为过了六级英语的同学没必要通过读报纸和杂志英语新闻来提高，因那都是肤浅空泛的八股句式，搞得人很浮躁和浮漂，蜻蜓点水一样，内功提不上去，个别的长的深度报导除外。我不是开玩笑，我觉得读<a
href="http://www.theonion.com/">《洋葱》（The Onion)</a>学英语要比读NYT，The Wall Street Journal，Time Magazine，Newsweek等更有效和有趣。National Geographic还行，但质量也在下滑。最好是读书，安静一下，每周找个时间，沉下心来，给自己放个假，读本好书，陶冶性情，平稳而满足。在《洋葱》那里你可以逐渐理解部分美式的幽默和讽刺！祝学得愉快！</p> ]]></content:encoded> <wfw:commentRss>http://www.haidongji.com/2012/04/03/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e6%b2%9f/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>开源软件的参与及社区互动的一些体会和建议：学习和参与</title><link>http://www.haidongji.com/2012/03/30/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%ad%a6/</link> <comments>http://www.haidongji.com/2012/03/30/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%ad%a6/#comments</comments> <pubDate>Fri, 30 Mar 2012 05:35:54 +0000</pubDate> <dc:creator>Haidong Ji</dc:creator> <category><![CDATA[Chinese]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Windows]]></category> <guid
isPermaLink="false">http://www.haidongji.com/?p=1337</guid> <description><![CDATA[有了沙盘，弄熟了工具，下面我们来谈谈参与一个项目的开发和测试。我们先从项目的参与者角度开讲，之后再谈项目的发起者应注意的事项。如前所说，这些是我的一些体会和建议，很多方面都是“仁者见仁、智者见智”，所以欢迎大家拍砖、提建议和指教。 要参加一个项目，首先要开始学习，一举成名、一口气吃成个胖子的可能性不大。学习包括阅读文档，该项目的维基网页，加入mailing list，阅读项目发展蓝图，加入论坛（forum）潜水等。在做这些的同时，搞一个自己的branch，编译软件，练手调试，改变一些东西后再编译以满足自己的好奇心，这些都是非常有效的学习手段。 通过在mailing list和论坛上潜水，你可以了解到主要人员的活动、重要的源代码、发展方向、和他们的个性等。如果交流是以英文为主，还可以学习到常用的名词，为以后的研究、搜索、和提问带来方便，因为你会注意到，网上查资料搜索的关键是知道关键词！当然有些比较流行的软件还会有其他独立的社区，如Google group等，那里也可能有些有用的东西。 邮件表的历史很多都有归档，所以那里也可能有有价值的东西。另外，不少开源软件还有互联网聊天频道，IRC，一般是在freenode上。像MariaDB在freenode上的maria频道就比较活跃。这个真是因项目不同而异。一般来讲，我个人并不建议在聊天频道上呆太久，因为很浪费时间并且会分心，很难集中精力花时间做好一件事。但IRC频道的聊天有时也会有记录，所以周期性的快速浏览下可能发现点东西。如果你是有备而来，如果主力人物都在聊天频道上的话，有针对性的在IRC上讨论些问题可能会比较快和直接地找到答案。 在潜水的同时，也要注意性能和bug的标签。如在Launchpad上，有的项目给一些性能和故障贴上low hanging fruit，即易采摘果实的标签。你可以先从这里开始，看看自己能不能搞定。不妨先在自己的沙盘里大胆尝试下，写单元测试实验案例，改下代码，编译测试，推测和验证各种假设。反正是自己的沙盘，尝试下又有何妨？只有敢于尝试，满足自己的好奇心，才能提高自己的功力。 同时，参与并帮助一个项目的测试和文档也是融入该项目的好方法。开源项目是分布式开发，程序员分布在不同的地方，实际上不少非开源项目也是如此。人不在一个地方甚至国家，很可能有语言障碍，就需要花时间了解沟通和建立互信。如果你可以先在测试、文档等基本方面帮忙，就可以建立起良性的互动。这也是我建议先读文档、入邮件表、到论坛潜水学习的原因之一。比方说你可以帮助完善该项目的维基网页，提交一些自己亲身做过的how to文档，提交测试案例等。因为大家一开始对你不了解，如果你一上来不先做调查研究，做好功课，就开始指点江山、激扬文字，要显示自己的聪明才智和独到之处，那么，抱歉，没多少人会买你的帐。 在开发和使用的过程中，你可能会遇到故障。发生了这种情况，在提交故障报告（bug report）之前，请首先在故障表、邮件表、论坛里搜素下，看看别人是否已经提交。如果没有，那你应当提交一个故障报告。提交时，请注意说明系统环境和配置，有没有绕开该故障的办法，怎样才能重生该故障。如果你知道怎么来解决这个故障，那当然更好，那就请提交你自己的补丁。有的项目需要提交测试案例（test cases），有的不需要，但作为一个程序员，你要有自己的test case。我以后会专门写到测试。 &#8212;&#8212; 下面简单说说我关于项目发起的想法和建议。 首先，心里要有这个数：我这个项目是给自己kuai痒的（英文俚语scratch an itch，正式用语可能是抓痒吧，至少鲁南话说三声的kuai，不知有没有这个字）。这个项目满足了我的需求，对我本人有用，这是最重要的。能切实解决我的问题，那别人遇到类似情况，我的解决方案也就可能管用！我开发的过程中会有乐趣，会有挑战和能学到新东西，但知道它能帮助别人也是很大的乐趣。我希望它能火，并且也下力气让它火，但是它火不了的话也没关系。这不是阿Q的精神胜利法，这是全球各地绝大多数开源软件所面对的现实！ 那么，我做开源，有意义吗？当然有。简要地说，自己做开源基本上是业余，而不是全职的做商业软件，所以风险小。但如果火起来的话，会有商业利益过来。另外，开源的目的是知识的积累和分享，发起者在这个过程中可以得到全方位的成长：文档、测试、开发、协调、发布等，还可以认识到朋友和同仁来打通人脉。或许这个项目只能给不到一百甚至不到十个人带来益处，但只要它能给自己带来益处，就已经足够。 好，不谈哲学和自己做开源的其他好处，下面我们来谈谈想法和建议。 1. 要有好文档。好文档要告诉读者这个项目的目的，使用方法和流程，注意事项和如何扩展等。最好能做成维基式文档，这样的话可以便于别人的参与。这个文档要有典型的应用案例，给出自始至终的过程指导； 2. 要有良好的测试方法和机制，并把它写入文档。有效和系统的测试是生产可靠、稳定、高性能、高扩展软件的必要条件！ 3. 如果有了规模，注意建立起自己的mail list，forum，group等，这样便于知识的积累，便于提问和解疑； 4. 要有计划性，这表现在有好的设计、蓝图和具体的任务清单（software specification，blueprint和To-do list）等，这样便于和别人讨论和鼓励参与； 5. 应当还有别的。先写到这儿，欢迎指正]]></description> <content:encoded><![CDATA[<p><a
href="http://www.haidongji.com/2012/03/15/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%bb%ba/">有了沙盘</a>，<a
href="http://www.haidongji.com/2012/03/23/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e7%86%9f/">弄熟了工具</a>，下面我们来谈谈参与一个项目的开发和测试。我们先从项目的参与者角度开讲，之后再谈项目的发起者应注意的事项。如前所说，这些是我的一些体会和建议，很多方面都是“仁者见仁、智者见智”，所以欢迎大家拍砖、提建议和指教。</p><p>要参加一个项目，首先要开始学习，一举成名、一口气吃成个胖子的可能性不大。学习包括阅读文档，该项目的维基网页，加入mailing list，阅读项目发展蓝图，加入论坛（forum）潜水等。在做这些的同时，搞一个自己的branch，编译软件，练手调试，改变一些东西后再编译以满足自己的好奇心，这些都是非常有效的学习手段。</p><p>通过在mailing list和论坛上潜水，你可以了解到主要人员的活动、重要的源代码、发展方向、和他们的个性等。如果交流是以英文为主，还可以学习到常用的名词，为以后的研究、搜索、和提问带来方便，因为你会注意到，网上查资料搜索的关键是知道关键词！当然有些比较流行的软件还会有其他独立的社区，如Google group等，那里也可能有些有用的东西。</p><p>邮件表的历史很多都有归档，所以那里也可能有有价值的东西。另外，不少开源软件还有互联网聊天频道，IRC，一般是在freenode上。像MariaDB在freenode上的maria频道就比较活跃。这个真是因项目不同而异。一般来讲，我个人并不建议在聊天频道上呆太久，因为很浪费时间并且会分心，很难集中精力花时间做好一件事。但IRC频道的聊天有时也会有记录，所以周期性的快速浏览下可能发现点东西。如果你是有备而来，如果主力人物都在聊天频道上的话，有针对性的在IRC上讨论些问题可能会比较快和直接地找到答案。</p><p>在潜水的同时，也要注意性能和bug的标签。如在Launchpad上，有的项目给一些性能和故障贴上low hanging fruit，即易采摘果实的标签。你可以先从这里开始，看看自己能不能搞定。不妨先在自己的沙盘里大胆尝试下，写单元测试实验案例，改下代码，编译测试，推测和验证各种假设。反正是自己的沙盘，尝试下又有何妨？只有敢于尝试，满足自己的好奇心，才能提高自己的功力。</p><p>同时，参与并帮助一个项目的测试和文档也是融入该项目的好方法。开源项目是分布式开发，程序员分布在不同的地方，实际上不少非开源项目也是如此。人不在一个地方甚至国家，很可能有语言障碍，就需要花时间了解沟通和建立互信。如果你可以先在测试、文档等基本方面帮忙，就可以建立起良性的互动。这也是我建议先读文档、入邮件表、到论坛潜水学习的原因之一。比方说你可以帮助完善该项目的维基网页，提交一些自己亲身做过的how to文档，提交测试案例等。因为大家一开始对你不了解，如果你一上来不先做调查研究，做好功课，就开始指点江山、激扬文字，要显示自己的聪明才智和独到之处，那么，抱歉，没多少人会买你的帐。</p><p>在开发和使用的过程中，你可能会遇到故障。发生了这种情况，在提交故障报告（bug report）之前，请首先在故障表、邮件表、论坛里搜素下，看看别人是否已经提交。如果没有，那你应当提交一个故障报告。提交时，请注意说明系统环境和配置，有没有绕开该故障的办法，怎样才能重生该故障。如果你知道怎么来解决这个故障，那当然更好，那就请提交你自己的补丁。有的项目需要提交测试案例（test cases），有的不需要，但作为一个程序员，你要有自己的test case。我以后会专门写到测试。</p><p>&#8212;&#8212;</p><p>下面简单说说我关于项目发起的想法和建议。</p><p>首先，心里要有这个数：我这个项目是给自己kuai痒的（英文俚语scratch an itch，正式用语可能是抓痒吧，至少鲁南话说三声的kuai，不知有没有这个字）。这个项目满足了我的需求，对我本人有用，这是最重要的。能切实解决我的问题，那别人遇到类似情况，我的解决方案也就可能管用！我开发的过程中会有乐趣，会有挑战和能学到新东西，但知道它能帮助别人也是很大的乐趣。我希望它能火，并且也下力气让它火，但是它火不了的话也没关系。这不是阿Q的精神胜利法，这是全球各地绝大多数开源软件所面对的现实！</p><p>那么，我做开源，有意义吗？当然有。简要地说，自己做开源基本上是业余，而不是全职的做商业软件，所以风险小。但如果火起来的话，会有商业利益过来。另外，开源的目的是知识的积累和分享，发起者在这个过程中可以得到全方位的成长：文档、测试、开发、协调、发布等，还可以认识到朋友和同仁来打通人脉。或许这个项目只能给不到一百甚至不到十个人带来益处，但只要它能给自己带来益处，就已经足够。</p><p>好，不谈哲学和自己做开源的其他好处，下面我们来谈谈想法和建议。</p><p>1. 要有好文档。好文档要告诉读者这个项目的目的，使用方法和流程，注意事项和如何扩展等。最好能做成维基式文档，这样的话可以便于别人的参与。这个文档要有典型的应用案例，给出自始至终的过程指导；<br
/> 2. 要有良好的测试方法和机制，并把它写入文档。有效和系统的测试是生产可靠、稳定、高性能、高扩展软件的必要条件！<br
/> 3. 如果有了规模，注意建立起自己的mail list，forum，group等，这样便于知识的积累，便于提问和解疑；<br
/> 4. 要有计划性，这表现在有好的设计、蓝图和具体的任务清单（software specification，blueprint和To-do list）等，这样便于和别人讨论和鼓励参与；<br
/> 5. 应当还有别的。先写到这儿，欢迎指正 <img
src='http://www.haidongji.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://www.haidongji.com/2012/03/30/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%ad%a6/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>开源软件的参与及社区互动的一些体会和建议：熟悉源代码的管理方式和工具</title><link>http://www.haidongji.com/2012/03/23/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e7%86%9f/</link> <comments>http://www.haidongji.com/2012/03/23/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e7%86%9f/#comments</comments> <pubDate>Fri, 23 Mar 2012 22:25:54 +0000</pubDate> <dc:creator>Haidong Ji</dc:creator> <category><![CDATA[Chinese]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Windows]]></category> <guid
isPermaLink="false">http://www.haidongji.com/?p=1330</guid> <description><![CDATA[接上篇。上次讲到建立自己的沙盘。这是一个开源软件开发的小系列，简单介绍下一些经验和体会。 凡是有点规模的开发，都需要有源代码管理。实际上，即使是自己编个程序、写个脚本或文档，源代码管理也可以提供很多的便利。 源代码管理经历了几代的沿革和发展。从最初的单文件加锁和没有网络支持，发展到具有网络支持的集中式控制代码管理，现在这种方式还是占据不少的市场份额。在共同开发方面，集中统一式的管理要求你必须先合并（merge）后才能提交（commit）。代表性的统一式代码管理工具和产品有CVS，Subversion，TFS等。在统一式代码管理系统下，我们只有一个总代码库（repository）。 最近几年开始流行分布式源代码管理系统。跟传统的统一代码管理不同的一点是分散式代码库：即每一个开发员有会自己的代码库实例。代码被改动过之后，开发人员可以先提交到自己的实例上，然后合并。代表性的产品和工具有Bazaar，Git，和Mercurial。 我用过CVS，Subversion，Bazaar，和Git。我个人的经验是它们各有利弊，当然我没有build engineer的经历，所以我在这方面的经验并不丰富。Linus Torvalds几年前在股沟有一个关于Git的讲演。他讲得不错，有时间的话值得一看/听。当然用哪一个系统（中央vs分布）在很大程度上取决于开发团队的技术强项、熟悉程度、公司的目标和制度。不过现在从长远来看，分布式的源代码管理是大趋势。 插点花絮。Linus Torvalds（Linux的主创）和Monty Widenius（MySQL的主创）都是以瑞典语为母语的芬兰人。Linus讲基本上听不出外国口音的美式英语，个性比较高傲。Monty的英语口音比较重，但表达没问题。口音不可怕，能听懂，可以把意思说出来就好。 从开源的角度来看，用什么代码库和工具在很大程度上取决于这个项目放在什么平台上。如果你感兴趣的项目在Launchpad上，那你当然要花时间学好bzr，如果是在Github上，就要练习好git。当然如果你是一个项目的发起者，你就可以自己决定用哪个平台。现在比较流行的平台有Googlecode，Launchpad，Github，SourceForge等。Launchpad只用Bazaar；Github当然只有git;Googlecode支持Subversion，git和Mercurial（应当是三者选一）;SourceForge好像只支持CVS和Subversion。 不管哪个平台，特别是分布式代码系统的东西，很多情况下你需要通过ssh来和托管机器（hosting URL或机器）交流，这就需要你自己的ssh key。如果你还没有，可以通过Linux系统上的ssh-keygen来生成这个外向和私有的key。生成了自己的id_rsa和id_rsa.pub的key文件之后，要把它们保管好，因为那个id_rsa.pub的key会被提交到Github，Launchpad等地。而id_rsa.pub是外向的，我们可以用它来和私有的id_rsa来验明你的身份。 选中了源代码管理工具和托管的机器或平台，你可以自己建几个Utility的项目来练习一下，如果你对源代码工具不熟的话。像在Googlecode，Github，和Launchpad等地很容易就可以建立起自己的开源项目，你可以放进去自己常用的脚本和自己写得小工具等。这即可以保存自己的脑力劳动成果，也可以练习源代码工具的使用。实际上在开源领域里做，bzr/Launchpad，git/Github/Googlecode等都要熟悉。常用的命令如clone，commit，pull，push，status，log，revert，blame等要明白和会用。 当然你也要知道怎样用diff来做个补丁（patch），和怎样来贴别人提交的补丁。这包括只补一个文件，多个文件，和多个分散在不同文件夹里的文件。关于运用diff和patch，这些东西只要可以接触到Linux的机器就可以练练。 说起diff，有很多的GUI工具比较好用。在Windows上你可以用开源免费的WinMerge。在Linux上我有时会用kdiff3，比较喜欢。我以前在公司里用Mac的时候，听说苹果的FileMerge比较好用，但我没试过。如果你用git和Linux，那么gitk这个GUI工具非常好，观看历史，分支，标签等都一目了然。我上次和MariaDB的wlad在一起，他告诉过我一个不错的bzr的GUI工具，好像是在Linux上，但我忘掉是哪一个了。 之所以讲diff，是因为我感觉在任何提交（commit）之前，你要再读一下diff。我以为这是一个最佳实践。阅读其他程序猿的diff也是一个好主意，这样你会对同事和合作伙伴有更多的了解。这也是一个非正式的code review，你也可能学到不少东西。 其他最佳实践还有要舍得用标签（tags）。标签不占地方，特别是在分布式代码管理上，但它却可以提供一个简洁明了的记号，便于管理和分类。另外，在提交时要写好的、言简意赅的短评。不要只说“bug 123 fix”，简要告诉我bug 123是怎么回事和如何改正。当然能做到言简意赅最好，如果做不到，没关系，以后慢慢提高，但请宁多勿缺，如果自己写不短的话，长一点没关系。 当然，在提交之前至少要过自己的unit test，并提交test cases。还要过其他的测试。测试太重要，以后会专门来写一篇。]]></description> <content:encoded><![CDATA[<p>接上篇。上次讲到<a
href="http://www.haidongji.com/2012/03/15/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%bb%ba/">建立自己的沙盘</a>。这是一个开源软件开发的小系列，简单介绍下一些经验和体会。</p><p>凡是有点规模的开发，都需要有源代码管理。实际上，即使是自己编个程序、写个脚本或文档，源代码管理也可以提供很多的便利。</p><p>源代码管理经历了几代的沿革和发展。从最初的单文件加锁和没有网络支持，发展到具有网络支持的集中式控制代码管理，现在这种方式还是占据不少的市场份额。在共同开发方面，集中统一式的管理要求你必须先合并（merge）后才能提交（commit）。代表性的统一式代码管理工具和产品有CVS，Subversion，TFS等。在统一式代码管理系统下，我们只有一个总代码库（repository）。</p><p>最近几年开始流行分布式源代码管理系统。跟传统的统一代码管理不同的一点是分散式代码库：即每一个开发员有会自己的代码库实例。代码被改动过之后，开发人员可以先提交到自己的实例上，然后合并。代表性的产品和工具有Bazaar，Git，和Mercurial。</p><p>我用过CVS，Subversion，Bazaar，和Git。我个人的经验是它们各有利弊，当然我没有build engineer的经历，所以我在这方面的经验并不丰富。Linus Torvalds几年前在股沟有一个关于Git的讲演。他讲得不错，有时间的话值得一看/听。当然用哪一个系统（中央vs分布）在很大程度上取决于开发团队的技术强项、熟悉程度、公司的目标和制度。不过现在从长远来看，分布式的源代码管理是大趋势。</p><p>插点花絮。Linus Torvalds（Linux的主创）和Monty Widenius（MySQL的主创）都是以瑞典语为母语的芬兰人。Linus讲基本上听不出外国口音的美式英语，个性比较高傲。Monty的英语口音比较重，但表达没问题。口音不可怕，能听懂，可以把意思说出来就好。</p><p>从开源的角度来看，用什么代码库和工具在很大程度上取决于这个项目放在什么平台上。如果你感兴趣的项目在Launchpad上，那你当然要花时间学好bzr，如果是在Github上，就要练习好git。当然如果你是一个项目的发起者，你就可以自己决定用哪个平台。现在比较流行的平台有Googlecode，Launchpad，Github，SourceForge等。Launchpad只用Bazaar；Github当然只有git;Googlecode支持Subversion，git和Mercurial（应当是三者选一）;SourceForge好像只支持CVS和Subversion。</p><p>不管哪个平台，特别是分布式代码系统的东西，很多情况下你需要通过ssh来和托管机器（hosting URL或机器）交流，这就需要你自己的ssh key。如果你还没有，可以通过Linux系统上的ssh-keygen来生成这个外向和私有的key。生成了自己的id_rsa和id_rsa.pub的key文件之后，要把它们保管好，因为那个id_rsa.pub的key会被提交到Github，Launchpad等地。而id_rsa.pub是外向的，我们可以用它来和私有的id_rsa来验明你的身份。</p><p>选中了源代码管理工具和托管的机器或平台，你可以自己建几个Utility的项目来练习一下，如果你对源代码工具不熟的话。像在Googlecode，Github，和Launchpad等地很容易就可以建立起自己的开源项目，你可以放进去自己常用的脚本和自己写得小工具等。这即可以保存自己的脑力劳动成果，也可以练习源代码工具的使用。实际上在开源领域里做，bzr/Launchpad，git/Github/Googlecode等都要熟悉。常用的命令如clone，commit，pull，push，status，log，revert，blame等要明白和会用。</p><p>当然你也要知道怎样用diff来做个补丁（patch），和怎样来贴别人提交的补丁。这包括只补一个文件，多个文件，和多个分散在不同文件夹里的文件。关于运用diff和patch，这些东西只要可以接触到Linux的机器就可以练练。</p><p>说起diff，有很多的GUI工具比较好用。在Windows上你可以用开源免费的WinMerge。在Linux上我有时会用kdiff3，比较喜欢。我以前在公司里用Mac的时候，听说苹果的FileMerge比较好用，但我没试过。如果你用git和Linux，那么gitk这个GUI工具非常好，观看历史，分支，标签等都一目了然。我上次和MariaDB的wlad在一起，他告诉过我一个不错的bzr的GUI工具，好像是在Linux上，但我忘掉是哪一个了。</p><p>之所以讲diff，是因为我感觉在任何提交（commit）之前，你要再读一下diff。我以为这是一个最佳实践。阅读其他程序猿的diff也是一个好主意，这样你会对同事和合作伙伴有更多的了解。这也是一个非正式的code review，你也可能学到不少东西。</p><p>其他最佳实践还有要舍得用标签（tags）。标签不占地方，特别是在分布式代码管理上，但它却可以提供一个简洁明了的记号，便于管理和分类。另外，在提交时要写好的、言简意赅的短评。不要只说“bug 123 fix”，简要告诉我bug 123是怎么回事和如何改正。当然能做到言简意赅最好，如果做不到，没关系，以后慢慢提高，但请宁多勿缺，如果自己写不短的话，长一点没关系。</p><p>当然，在提交之前至少要过自己的unit test，并提交test cases。还要过其他的测试。测试太重要，以后会专门来写一篇。</p> ]]></content:encoded> <wfw:commentRss>http://www.haidongji.com/2012/03/23/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e7%86%9f/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>看马云和其他</title><link>http://www.haidongji.com/2012/03/19/%e7%9c%8b%e9%a9%ac%e4%ba%91%e5%92%8c%e5%85%b6%e4%bb%96/</link> <comments>http://www.haidongji.com/2012/03/19/%e7%9c%8b%e9%a9%ac%e4%ba%91%e5%92%8c%e5%85%b6%e4%bb%96/#comments</comments> <pubDate>Mon, 19 Mar 2012 05:06:53 +0000</pubDate> <dc:creator>Haidong Ji</dc:creator> <category><![CDATA[Chinese]]></category> <category><![CDATA[EastWest]]></category> <guid
isPermaLink="false">http://www.haidongji.com/?p=1328</guid> <description><![CDATA[上次去北京，在中关村图书大厦买了《马云内部讲话》，最近抽空刚看完。这是马云在各种公司会议上的各种讲话的记录，很不错。看完之后，让我对他有了更多的兴趣，就在网上搜了下视频。我看了马云在2011年中国网商大会的演讲和问答，读了他的所有新浪微博，他去年在斯坦福大学的演讲和问答，黛安·索耶（Diane Sawyer美ABC新闻主持人）和他的访谈，查理-罗斯（Charlie Rose美PBS/CBS新闻主持人）和他的访谈。除了黛安-索耶的访谈比较接近美国主流媒体的主旋律没多大意思外，其他的马云的演讲和访谈都很好。马云的英语非常棒，很坦诚和直率。 从马云的演讲里我读到“客户第一，员工第二，股东第三”的原则，这个我很欣赏。这和很久以来美国华尔街投资银行和对冲基金之流的套现、忽悠、买空卖空、投机、腐败、官商勾结但却打着“股东利益最大化”的幌子形成了比较鲜明的对比。有意思的是，刚写完这段话的第二天，就读到了一位前员工对高盛的指控。很可惜，华尔街的这帮孙子把美国政府基本上买下，并且通过高级华丽的美国宣传部——所谓的自由但却是由金钱控制的高傲充满偏见“无冕之王”媒体——控制着全球舆论高地。这帮道貌岸然的人渣到处洗脑，养着大批帮腔造势的所谓新保守主义学者、评论员、经济学家、和智库，在全球各地忽悠和欺诈。 可悲的是，这种主义也迷惑了不少人。有的傻逼被人卖了还帮着数钱，如美国茶党——其中不乏种族主义者——和不少民主党成员。上次在北京看了徐静蕾的《亲密敌人》，不建议看，但如果看了之后就可以感觉到华尔街这帮孙子的潜移默化的影响力：哇噻，英俊潇洒靓丽的高帅富投行人员运用他/她们的犀智和常青藤教育在商场上运筹帷幄，舌战群儒。帅哥靓妹们喝着洋酒，用着刀叉，开着卡迪拉克，住着豪宅，为股东们努力敬业奋斗着。在这主旋律之下，穿插着幽默、搞笑、卖萌。更绝的是，影片一开始竟然还融入了崛起的中国在世界各地大肆掠夺原材料的meme！真是让人哭笑不得。这虚无缥缈的海市蜃楼构建了全球各地多少家长和莘莘学子的梦想啊！ 不可否认，喝洋酒，开大车，住豪宅，搞商战，歌颂投资银行某些人的敬业，这每一件事情的本身都没有什么，但把这些加在一起，基本上重复《华尔街日报》的主旋律，而事实是华尔街的虚体经济把以美国为首的全球经济拖垮到目前的地步，但你却在那儿歌功颂德？！不得不承认美国宣传部在世界各地的杀伤力依然很大！依我看，这电影的唯一可取之处就是基本上以正面的方式来描写女性：聪明、美丽、和有能力。 写这些，并不意味着金融业一无是处，要反对市场经济，凡是在金融业工作过的人都是坏蛋，鄙视金融工作人员等。我自己就是学金融出身，在期权期货交易所、投资炒股公司里干过，并且也有不少的朋友在这个行业，以后我也可能回到这个行业工作。但有华尔街高盛、花旗、摩根、说客（贿赂）公司、政府、国会等部门的狼狈为奸，如官商说客公司之间的旋转门和内定法规后走所谓民主程序；有明目张胆的欺诈犯罪行为，如次贷款危机和紧急援助（bailout）；而美国运行到目前为止的两党制金钱选举最近很难改变现状：两党制等于财团两边押宝，谁上台都输不了。所以当马云在Charlie Rose的访谈节目中提起华尔街的贪婪和企业的社会责任时，我深感赞同，也很佩服他的眼光和犀利。因为就我所体会和感觉到的国内的情况，我感觉真正持他这种观点的商人并且真正明白的人是少数，而个人感觉中国很需要更多的马云。 马云是中国互联网的开拓者和先驱之一。他多次提到要感谢所处的时代和环境，并且不以为那么多的金钱归他自己所有，而是很多都属于这个社会。他说起要帮助世界各地的中小企业，让世上没有难做的生意。他鼓励人们实干，不要抱怨。他说要以电子商务打头来帮助中国建立起新的以诚信为基础的新商业文明。他讲企业的社会责任并且说要给中国创造很多的就业机会。他关心自然环境，是大自然保护协会的理事。对任何人，不管他的外在形象如何，不管他如何会说，我们都要听其言，观其行，并且我们要一直“观其行”下去，因为人是非常奇怪的动物，人会随着时间的演变而可能会变好或变坏（请看竞选时的小奥和当选后的小奥）。并且我本人对于大的机构、组织和公司有很强烈的怀疑，因为大意味着价值稀释、不灵活和高沟通成本。但就我个人对阿里和淘宝的有限了解，我觉得马云是言行一致的。阿里和淘宝人，平均年龄26岁，我接触到的和跟踪的都非常优秀。我注意到他们在构建交流、开放的大环境的努力，和落到实处的在北京和杭州的与本地技术人员的交流，所以我要给他们加油喝彩！他们果断开除“坏苹果”也让我眼前一亮！（bad apple在英语里有这个意思：A person who is not wholesome, honest, or trustworthy, especially one who has an adverse influence on others）。 &#8212;&#8212; 说起企业的社会责任，我最近读完了Yvon Chouinard的《Let my people go surfing》，非常喜欢，力荐。Yvon Chouinard是个非常有社会责任感的企业家，尤其是环境保护方面。 当然说起社会责任，有太多的空话和套话，让人变得cynical，最后怀疑人们的诚意和动机。所以在搞好自己的事情的同时有负责任的行动，做到言行一致，就会给人以信心，带动起有意义的改变。大环境变好了，自己的日子也会过得更好。Chouinard的Patagonia户外运动服装和器材公司在这方面做得很不错。即使把社会责任感方面的东西拿掉，这本书也是一个非常好的商业书籍，像关于产品设计的讨论，和供应商的互动等。我感觉这本书和我认为的阿里淘宝文化很类似。该书有中文翻译，但我不知翻译质量如何。实际上该书的英文也比较好读，有不少照片，拿过来学英文也不错。由于是企鹅出版社所出，国内英文原版应当买的到吧。 最近还读了Rachel DeWoskin的Foreign Babes in Beijing，廖信忠的《我们台湾这些年》，Hans Blix的《Disarming Iraq》，Greg Turnquist的《Python Testing Cookbook》，都很不错。]]></description> <content:encoded><![CDATA[<p>上次去北京，在中关村图书大厦买了《马云内部讲话》，最近抽空刚看完。这是马云在各种公司会议上的各种讲话的记录，很不错。看完之后，让我对他有了更多的兴趣，就在网上搜了下视频。我看了马云在2011年中国网商大会的演讲和问答，读了他的所有新浪微博，他去年在斯坦福大学的演讲和问答，黛安·索耶（Diane Sawyer美ABC新闻主持人）和他的访谈，查理-罗斯（Charlie Rose美PBS/CBS新闻主持人）和他的访谈。除了黛安-索耶的访谈比较接近美国主流媒体的主旋律没多大意思外，其他的马云的演讲和访谈都很好。马云的英语非常棒，很坦诚和直率。</p><p>从马云的演讲里我读到“客户第一，员工第二，股东第三”的原则，这个我很欣赏。这和很久以来美国华尔街投资银行和对冲基金之流的套现、忽悠、买空卖空、投机、腐败、官商勾结但却打着“股东利益最大化”的幌子形成了比较鲜明的对比。有意思的是，刚写完这段话的第二天，就读到了一位前员工对高盛的指控。很可惜，华尔街的这帮孙子把美国政府基本上买下，并且通过高级华丽的美国宣传部——所谓的自由但却是由金钱控制的高傲充满偏见“无冕之王”媒体——控制着全球舆论高地。这帮道貌岸然的人渣到处洗脑，养着大批帮腔造势的所谓新保守主义学者、评论员、经济学家、和智库，在全球各地忽悠和欺诈。</p><p>可悲的是，这种主义也迷惑了不少人。有的傻逼被人卖了还帮着数钱，如美国茶党——其中不乏种族主义者——和不少民主党成员。上次在北京看了徐静蕾的《亲密敌人》，不建议看，但如果看了之后就可以感觉到华尔街这帮孙子的潜移默化的影响力：哇噻，英俊潇洒靓丽的高帅富投行人员运用他/她们的犀智和常青藤教育在商场上运筹帷幄，舌战群儒。帅哥靓妹们喝着洋酒，用着刀叉，开着卡迪拉克，住着豪宅，为股东们努力敬业奋斗着。在这主旋律之下，穿插着幽默、搞笑、卖萌。更绝的是，影片一开始竟然还融入了崛起的中国在世界各地大肆掠夺原材料的meme！真是让人哭笑不得。这虚无缥缈的海市蜃楼构建了全球各地多少家长和莘莘学子的梦想啊！</p><p>不可否认，喝洋酒，开大车，住豪宅，搞商战，歌颂投资银行某些人的敬业，这每一件事情的本身都没有什么，但把这些加在一起，基本上重复《华尔街日报》的主旋律，而事实是华尔街的虚体经济把以美国为首的全球经济拖垮到目前的地步，但你却在那儿歌功颂德？！不得不承认美国宣传部在世界各地的杀伤力依然很大！依我看，这电影的唯一可取之处就是基本上以正面的方式来描写女性：聪明、美丽、和有能力。</p><p>写这些，并不意味着金融业一无是处，要反对市场经济，凡是在金融业工作过的人都是坏蛋，鄙视金融工作人员等。我自己就是学金融出身，在期权期货交易所、投资炒股公司里干过，并且也有不少的朋友在这个行业，以后我也可能回到这个行业工作。但有华尔街高盛、花旗、摩根、说客（贿赂）公司、政府、国会等部门的狼狈为奸，如官商说客公司之间的旋转门和内定法规后走所谓民主程序；有明目张胆的欺诈犯罪行为，如次贷款危机和紧急援助（bailout）；而美国运行到目前为止的两党制金钱选举最近很难改变现状：两党制等于财团两边押宝，谁上台都输不了。所以当马云在Charlie Rose的访谈节目中提起华尔街的贪婪和企业的社会责任时，我深感赞同，也很佩服他的眼光和犀利。因为就我所体会和感觉到的国内的情况，我感觉真正持他这种观点的商人并且真正明白的人是少数，而个人感觉中国很需要更多的马云。</p><p>马云是中国互联网的开拓者和先驱之一。他多次提到要感谢所处的时代和环境，并且不以为那么多的金钱归他自己所有，而是很多都属于这个社会。他说起要帮助世界各地的中小企业，让世上没有难做的生意。他鼓励人们实干，不要抱怨。他说要以电子商务打头来帮助中国建立起新的以诚信为基础的新商业文明。他讲企业的社会责任并且说要给中国创造很多的就业机会。他关心自然环境，是大自然保护协会的理事。对任何人，不管他的外在形象如何，不管他如何会说，我们都要听其言，观其行，并且我们要一直“观其行”下去，因为人是非常奇怪的动物，人会随着时间的演变而可能会变好或变坏（请看竞选时的小奥和当选后的小奥）。并且我本人对于大的机构、组织和公司有很强烈的怀疑，因为大意味着价值稀释、不灵活和高沟通成本。但就我个人对阿里和淘宝的有限了解，我觉得马云是言行一致的。阿里和淘宝人，平均年龄26岁，我接触到的和跟踪的都非常优秀。我注意到他们<a
href="http://www.haidongji.com/2011/12/18/velocity-2011%e4%b8%ad%e5%9b%bd%e8%a1%8c%e9%9a%8f%e8%ae%b0/">在构建交流、开放的大环境的努力</a>，和落到实处的在北京和杭州的与本地技术人员的交流，所以我要给他们加油喝彩！他们果断开除“坏苹果”也让我眼前一亮！（bad apple在英语里有这个意思：A person who is not wholesome, honest, or trustworthy, especially one who has an adverse influence on others）。</p><p>&#8212;&#8212;</p><p>说起企业的社会责任，我最近读完了Yvon Chouinard的《Let my people go surfing》，非常喜欢，力荐。Yvon Chouinard是个非常有社会责任感的企业家，尤其是环境保护方面。</p><p>当然说起社会责任，有太多的空话和套话，让人变得cynical，最后怀疑人们的诚意和动机。所以在搞好自己的事情的同时有负责任的行动，做到言行一致，就会给人以信心，带动起有意义的改变。大环境变好了，自己的日子也会过得更好。Chouinard的Patagonia户外运动服装和器材公司在这方面做得很不错。即使把社会责任感方面的东西拿掉，这本书也是一个非常好的商业书籍，像关于产品设计的讨论，和供应商的互动等。我感觉这本书和我认为的阿里淘宝文化很类似。该书有中文翻译，但我不知翻译质量如何。实际上该书的英文也比较好读，有不少照片，拿过来学英文也不错。由于是企鹅出版社所出，国内英文原版应当买的到吧。</p><p>最近还读了Rachel DeWoskin的Foreign Babes in Beijing，廖信忠的《我们台湾这些年》，Hans Blix的《Disarming Iraq》，Greg Turnquist的《Python Testing Cookbook》，都很不错。</p> ]]></content:encoded> <wfw:commentRss>http://www.haidongji.com/2012/03/19/%e7%9c%8b%e9%a9%ac%e4%ba%91%e5%92%8c%e5%85%b6%e4%bb%96/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>开源软件的参与及社区互动的一些体会和建议：建立自己的沙盘</title><link>http://www.haidongji.com/2012/03/15/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%bb%ba/</link> <comments>http://www.haidongji.com/2012/03/15/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%bb%ba/#comments</comments> <pubDate>Thu, 15 Mar 2012 17:05:29 +0000</pubDate> <dc:creator>Haidong Ji</dc:creator> <category><![CDATA[Chinese]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Windows]]></category> <guid
isPermaLink="false">http://www.haidongji.com/?p=1325</guid> <description><![CDATA[接开门篇，这是个小系列。 古人说得好，吃一堑，长一智。又云：失败是成功之母。记得有位外国著名科学家曾经说过这样一句话：“砖家是在一个狭窄的领域里犯过所有痛苦错误的人”。总而言之，古今中外的经验告诉我们，人是在错误中成长起来，所以不要怕犯错。怕得是犯了错但不承认或不愿意从中学习。为了鼓励学习、尝试和应用一些新东西，把错误的成本最小化，我们可以做沙盘演练。而IT的沙盘，在很多情况下是虚拟机。（哈哈，哥想写范文。各位童鞋猜猜看，那句旁征博引用来讨老湿欢心的科学家名言，是我的编造还是真有类似的句子？） 下面是我个人的一些经验、体会和建议： 1. 建立自己的虚拟机，有Debian，Centos，Windows等。有了自己的虚拟机，可以以快照(snapshot)的方式保存基本的虚拟机器。在此基础之上，练习一些软件的编译和制作（compile and build），发现各个部分之间的依赖性(dependencies)，下载源代码并进行阅读和调试，安装一些软件和工具来尝试和学习等。如果做错了，可以打倒重建，没什么大不了的。所以要敢于尝试！ 我现在有一台联想的ThinkPad笔记本，用了Linux Mint 12 KDE的distro，然后自己下载并安装了VirtualBox。在此基础之上，我用Vagrant和veewee来构建和管理虚拟机，感觉非常给力。Vagrant和veewee的一个优势是可以用来比较容易地建立多机环境，web server，database server，proxy server等。我这有个介绍。 2. 用云计算服务来搭建自己的沙盘，虽然我现在用得少了些。 我在云计算厂商（Amazon和Rackspace）有自己的账户。我对国内的云计算厂商的运营方式不了解，但我一月初在北京时听说国内也有类似服务。我经常在Amazon和Rackspace上启动几个机器来做实验，因为花不了几个钱。像在Rackspace上起一个256MB的Linux虚机，一小时也就一美分左右。所以如果国内有这样的服务，自己开个户玩玩挺有意思的。 3. 购买自己的主机服务，一为练手，二为翻墙。 能翻墙是必须的，因为长城很弱智，阻挡了太多的科技信息和交流。每个国家都有网络监管并且也需要网络监管，每个国家都要采取措施来保证信息和网络安全，每个国家都想支持本国的IT发展并且也会出台政策和举措来保护本国产业，这些都无可厚非，没啥偷偷摸摸，不好意思的。但长城，和中国的不少做法一样，搞一刀切，那么僵硬、笨重和愚蠢，里外都不讨好，该想办法改进和提高了！ 翻墙的一个很流行的办法是VPN，而不少VPN是要付费的。这就不如在国外买个主机服务，因为国外的主机服务可以起到一石二鸟的作用：有了自己折腾的机器，同时还可以用来翻墙。主机服务不会比VPN贵到哪里去。有了它之后，你可以用国外主机来暗渡陈仓，搞个ssh tunnel上网，长城拿你没办法。但这要求主机服务允许你这样折腾，所以要注意用哪个厂家的。感觉Linode比较靠谱，因为看上去给你root，并且可以打倒重建。在这方面，冯大辉的这篇博客有不少好建议。搞个具备境外支付的信用卡也是个好主意。我几年前写过怎样用ssh在Windows上挖个地道来传输http的交通，那时公司内网管得紧。不知道现在还管用吧，但至少可以提供些关键词供你查询。 有了自己的沙盘，就可以无后顾之忧地在上面耍耍，满足自己的好奇心，多尝试和总结经验教训，我想就会慢慢提高自己的内功。]]></description> <content:encoded><![CDATA[<p><a
href="http://www.haidongji.com/2012/03/11/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%bc%80%e9%97%a8%e7%af%87/">接开门篇</a>，这是个小系列。</p><p>古人说得好，吃一堑，长一智。又云：失败是成功之母。记得有位外国著名科学家曾经说过这样一句话：“砖家是在一个狭窄的领域里犯过所有痛苦错误的人”。总而言之，古今中外的经验告诉我们，人是在错误中成长起来，所以不要怕犯错。怕得是犯了错但不承认或不愿意从中学习。为了鼓励学习、尝试和应用一些新东西，把错误的成本最小化，我们可以做沙盘演练。而IT的沙盘，在很多情况下是虚拟机。（哈哈，哥想写范文。各位童鞋猜猜看，那句旁征博引用来讨老湿欢心的科学家名言，是我的编造还是真有类似的句子？）</p><p>下面是我个人的一些经验、体会和建议：</p><p>1. 建立自己的虚拟机，有Debian，Centos，Windows等。有了自己的虚拟机，可以以快照(snapshot)的方式保存基本的虚拟机器。在此基础之上，练习一些软件的编译和制作（compile and build），发现各个部分之间的依赖性(dependencies)，下载源代码并进行阅读和调试，安装一些软件和工具来尝试和学习等。如果做错了，可以打倒重建，没什么大不了的。所以要敢于尝试！</p><p>我现在有一台联想的ThinkPad笔记本，用了Linux Mint 12 KDE的distro，然后自己下载并安装了VirtualBox。在此基础之上，我用Vagrant和veewee来构建和管理虚拟机，感觉非常给力。Vagrant和veewee的一个优势是可以用来比较容易地建立多机环境，web server，database server，proxy server等。我<a
href="http://www.haidongji.com/2012/02/24/recommendation-vagrant-and-veewee/">这有个介绍</a>。</p><p>2. 用云计算服务来搭建自己的沙盘，虽然我现在用得少了些。<br
/> 我在云计算厂商（Amazon和Rackspace）有自己的账户。我对国内的云计算厂商的运营方式不了解，但我一月初在北京时听说国内也有类似服务。我经常在Amazon和Rackspace上启动几个机器来做实验，因为花不了几个钱。像在Rackspace上起一个256MB的Linux虚机，一小时也就一美分左右。所以如果国内有这样的服务，自己开个户玩玩挺有意思的。</p><p>3. 购买自己的主机服务，一为练手，二为翻墙。</p><p>能翻墙是必须的，因为长城很弱智，阻挡了太多的科技信息和交流。每个国家都有网络监管并且也需要网络监管，每个国家都要采取措施来保证信息和网络安全，每个国家都想支持本国的IT发展并且也会出台政策和举措来保护本国产业，这些都无可厚非，没啥偷偷摸摸，不好意思的。但长城，和中国的不少做法一样，搞一刀切，那么僵硬、笨重和愚蠢，里外都不讨好，该想办法改进和提高了！</p><p>翻墙的一个很流行的办法是VPN，而不少VPN是要付费的。这就不如在国外买个主机服务，因为国外的主机服务可以起到一石二鸟的作用：有了自己折腾的机器，同时还可以用来翻墙。主机服务不会比VPN贵到哪里去。有了它之后，你可以用国外主机来暗渡陈仓，搞个ssh tunnel上网，长城拿你没办法。但这要求主机服务允许你这样折腾，所以要注意用哪个厂家的。感觉Linode比较靠谱，因为看上去给你root，并且可以打倒重建。在这方面，冯大辉的<a
href="http://www.dbanotes.net/startup/Tech_Startup_Ver_002.html">这篇博客有不少好建议</a>。搞个具备境外支付的信用卡也是个好主意。我几年前写过<a
href="http://www.haidongji.com/2006/03/14/tunneling-http-traffic-through-ssh/">怎样用ssh在Windows上挖个地道来传输http的交通</a>，那时公司内网管得紧。不知道现在还管用吧，但至少可以提供些关键词供你查询。</p><p>有了自己的沙盘，就可以无后顾之忧地在上面耍耍，满足自己的好奇心，多尝试和总结经验教训，我想就会慢慢提高自己的内功。</p> ]]></content:encoded> <wfw:commentRss>http://www.haidongji.com/2012/03/15/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%bb%ba/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Managing Windows services with sysinternals tools and Python</title><link>http://www.haidongji.com/2012/03/14/managing-windows-services-with-sysinternals-tools-and-python/</link> <comments>http://www.haidongji.com/2012/03/14/managing-windows-services-with-sysinternals-tools-and-python/#comments</comments> <pubDate>Wed, 14 Mar 2012 22:13:52 +0000</pubDate> <dc:creator>Haidong Ji</dc:creator> <category><![CDATA[Python]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[Windows]]></category> <guid
isPermaLink="false">http://www.haidongji.com/?p=1323</guid> <description><![CDATA[Below is the copy of the README file from one of my github repo. Feel free to download the code and play with it. If you have ideas and good Python Windows admin scripts, share them! &#8212; Working with Windows, one frequently needs to manage various services: finding their status, startup modes, startup accounts, stopping [...]]]></description> <content:encoded><![CDATA[<p>Below is the copy of the README file from <a
href="https://github.com/haidong/winUtilitiesPy">one of my github repo</a>. Feel free to download the code and play with it. If you have ideas and good Python Windows admin scripts, share them!<br
/> &#8212;<br
/> Working with Windows, one frequently needs to manage various services: finding their status, startup modes, startup accounts, stopping them, starting them, restarting them, etc. One can manage all this via a GUI tool by runninng &#8220;services.msc&#8221; manually, which is useful and handy. But manual method does not scale and is error prone. For example, when it comes time to stop and patch certain service on many servers, it is nice to have a proven, automated way of managing them.</p><p>For that, we need command line tools and automation. On the command line, Windows has NET commands, sc.exe from the Resource Kit, and psservice.exe from Sysinternals. Those are the set of tools I&#8217;ve used. Of the three, I like psservice the best, because it supports managing servers remotely and is easy to install (unzipping and no registry and directory pollution). Yes, I am aware of PowerShell, pywin32, etc., but that is not the focus of this project.</p><p>winServicePy combines Python and Sysinternal tools, psservice in particular, to manage Windows services easily across many servers in a company. All base functions in winUtility.py have been tested with unittest module. Tests are included in the tests folder.</p><p>Prerequisites:<br
/> 1. Python 2.7;<br
/> 2. Sysinternals tools in PATH;<br
/> 3. Access to an administrative login on the servers you are trying to manage, and run all utilities under that Administrative login account.<br
/> Initially I coded functions that accepted login and passwords, but due to the fact that password can contain all sorts of characters, thus making it very hard to escape, I gutted that function. The code that includes login and password parameters is tagged, as you can see in github.</p><p>These set of tools can do 5 things:<br
/> 1. getServiceAccount.py. Get service startup account;<br
/> 2. getServiceStartupType. Get service startup mode;<br
/> 3. getServiceStatus. Get service running status;<br
/> 4. setServiceStartupType.py. Set service startup mode auto|manual|disabled<br
/> 5. setServiceStatus.py. Set service status by issuing STOP|START|RESTART command</p><p>Usage:<br
/> Running python scriptName.py without any parameters gives the usage information. All 5 scripts accept at least 3 switches:</p><p>-f is a boolean switch. The presence of which indicates the input is a file.<br
/> -i is input for the script. If -f is present, then this should be a file that contains servers you want to manage, each one occupies its own line in the file. If -f is absent, then you can enter server names on command line, separated by a single comma only.<br
/> -s is service name. To find out a server name, go to service.msc and look at the service&#8217;s property.<br
/> -t, only available for setServiceStartupType.py, indicate the startup mode you want the service to be in. Possible choices are auto, manual, and disabled.<br
/> -a, only availabel for setServiceStatus.py, indicate if you want to stop, start, or restart the service. Possible choices are stop, start, and restart.</p> ]]></content:encoded> <wfw:commentRss>http://www.haidongji.com/2012/03/14/managing-windows-services-with-sysinternals-tools-and-python/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>开源软件的参与及社区互动的体会和建议：开门篇</title><link>http://www.haidongji.com/2012/03/11/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%bc%80%e9%97%a8%e7%af%87/</link> <comments>http://www.haidongji.com/2012/03/11/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%bc%80%e9%97%a8%e7%af%87/#comments</comments> <pubDate>Mon, 12 Mar 2012 03:53:15 +0000</pubDate> <dc:creator>Haidong Ji</dc:creator> <category><![CDATA[Chinese]]></category> <category><![CDATA[EastWest]]></category> <category><![CDATA[Technology]]></category> <guid
isPermaLink="false">http://www.haidongji.com/?p=1320</guid> <description><![CDATA[上次在北京和江枫聊天，谈到中国开源和美国还有其他国家的开源互动与合作的问题。当时我就想写一些东西，介绍我的感觉和体会。那时的想法主要是想写一下关于如何尽可能地缩小语言和沟通的障碍问题。回来后忙着帮朋友建立和Percona方面的沟通，然后因时间的关系离开Percona，但一直在想这件事儿，脑子里蹦出些想法（都很短）就记到了自己的本子上。 现在总结下我在自己的本子上乱写乱画的东西，有缩小语言和文化障碍的主意，也有很多关于软件开发的基本常识，没什么惊天地、泣鬼神的料。先写下个提纲，抛砖引玉，以后接着写，欢迎各位拍砖。如有问题，尽管提，我们一起来“头脑风暴”（brainstorm）。一些想法和主意经过思考和讨论，然后配上行动、尝试、反馈、改进的循环，那么这些主意和想法就会落到实处，一个高质量的产品（脚本、补丁、新性能等）就会随之而产生。这事儿，说容易也容易，说困难也困难。但你如果有想法、有行动，并且能认识到自己和别人的错误并从中学习，那么在这个过程就会大有收获！ 实际上我感觉很多东西不仅仅适用与开源软件，在商业软件开发上也同样适用。 1.建立起自己玩和犯错误的沙盘； 2.熟悉源代码的管理方式和工具; 3.学习和参与的建议； 4. 关于沟通和交流 5. 要懂得测试，测试，再测试； 6.自律的重要性，这个难 7&#8230;. 好吧，就这样，先起个头，以后接着写。]]></description> <content:encoded><![CDATA[<p>上次在北京和江枫聊天，谈到中国开源和美国还有其他国家的开源互动与合作的问题。当时我就想写一些东西，介绍我的感觉和体会。那时的想法主要是想写一下关于如何尽可能地缩小语言和沟通的障碍问题。回来后忙着帮朋友建立和Percona方面的沟通，然后因时间的关系离开Percona，但一直在想这件事儿，脑子里蹦出些想法（都很短）就记到了自己的本子上。</p><p>现在总结下我在自己的本子上乱写乱画的东西，有缩小语言和文化障碍的主意，也有很多关于软件开发的基本常识，没什么惊天地、泣鬼神的料。先写下个提纲，抛砖引玉，以后接着写，欢迎各位拍砖。如有问题，尽管提，我们一起来“头脑风暴”（brainstorm）。一些想法和主意经过思考和讨论，然后配上行动、尝试、反馈、改进的循环，那么这些主意和想法就会落到实处，一个高质量的产品（脚本、补丁、新性能等）就会随之而产生。这事儿，说容易也容易，说困难也困难。但你如果有想法、有行动，并且能认识到自己和别人的错误并从中学习，那么在这个过程就会大有收获！</p><p>实际上我感觉很多东西不仅仅适用与开源软件，在商业软件开发上也同样适用。</p><p>1.<a
href="http://www.haidongji.com/2012/03/15/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%bb%ba/">建立起自己玩和犯错误的沙盘</a>；<br
/> 2.<a
href="http://www.haidongji.com/2012/03/23/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e7%86%9f/">熟悉源代码的管理方式和工具</a>;<br
/> 3.<a
href="http://www.haidongji.com/2012/03/30/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%ad%a6/">学习和参与的建议</a>；<br
/> 4. <a
href="http://www.haidongji.com/2012/04/03/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%b8%80%e4%ba%9b%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e6%b2%9f/">关于沟通和交流</a><br
/> 5. 要懂得测试，测试，再测试；<br
/> 6.自律的重要性，这个难<br
/> 7&#8230;.</p><p>好吧，就这样，先起个头，以后接着写。</p> ]]></content:encoded> <wfw:commentRss>http://www.haidongji.com/2012/03/11/%e5%bc%80%e6%ba%90%e8%bd%af%e4%bb%b6%e7%9a%84%e5%8f%82%e4%b8%8e%e5%8f%8a%e7%a4%be%e5%8c%ba%e4%ba%92%e5%8a%a8%e7%9a%84%e4%bd%93%e4%bc%9a%e5%92%8c%e5%bb%ba%e8%ae%ae%ef%bc%9a%e5%bc%80%e9%97%a8%e7%af%87/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Recommendation: Vagrant and Veewee</title><link>http://www.haidongji.com/2012/02/24/recommendation-vagrant-and-veewee/</link> <comments>http://www.haidongji.com/2012/02/24/recommendation-vagrant-and-veewee/#comments</comments> <pubDate>Fri, 24 Feb 2012 05:13:19 +0000</pubDate> <dc:creator>Haidong Ji</dc:creator> <category><![CDATA[Linux]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Windows]]></category> <guid
isPermaLink="false">http://www.haidongji.com/?p=1309</guid> <description><![CDATA[Quoting from Vagrant&#8217;s web site: Vagrant is a tool for building and distributing virtualized development environments. By providing automated creation and provisioning of virtual machines using Oracle&#8217;s VirtualBox, Vagrant provides the tools to create and configure lightweight, reproducible, and portable virtual environments. A complementary technology called Veewee makes building VirtualBox VMs easier by automating away [...]]]></description> <content:encoded><![CDATA[<p>Quoting from <a
href="http://vagrantup.com/">Vagrant&#8217;s web site</a>:</p><blockquote><p>Vagrant is a tool for building and distributing virtualized development environments. By providing automated creation and provisioning of virtual machines using Oracle&#8217;s VirtualBox, Vagrant provides the tools to create and configure lightweight, reproducible, and portable virtual environments.</p></blockquote><p>A complementary technology called <a
href="https://github.com/jedi4ever/veewee">Veewee</a> makes building VirtualBox VMs easier by automating away a lot of manual steps. Marius Ducea has <a
href="http://www.ducea.com/2011/08/15/building-vagrant-boxes-with-veewee/">a great blog post on how to use it</a>.</p><p><strong>My observations:</strong><br
/> 1. According to Vagrant&#8217;s web site, it should work on Windows. I&#8217;ve tried that with unsatisficatory results. I think it works better on Linux and Mac;<br
/> 2. Vagrant 0.9 was released recently, and is the version that I am using. However, 0.9 broke some backward compatibility such that a lot of examples on Vagrant configuration file in its web site no longer work. But it does provide good enough error message for you to fix and adjust;<br
/> 3. Just a couple of weeks ago, Veewee was not compatible with Vagrant 0.9, but that has since been fixed. I mention this because things appear to be a bit fluid, and you may need to roll up your sleeves and tweak a few things yourself to get what you want;<br
/> 4. Using Veewee to build Windows VM is not as smooth as doing the same for Linux VMs. In fact a few of the templates do not have the Cygwin setup file that definition.rb refers to. Another drawback is that the initial VM harddisk size is too small (10 gig I believe). Darn it, I forgot where I changed the setting to make it bigger before building it. Share that with me if you know please <img
src='http://www.haidongji.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br
/> 5. In addition, it seems hard to build a Multi-VM environment with Windows in the mix. It looks possible, though. Once again please share that with me if you know!</p><p><strong>Potential use cases:</strong><br
/> 1. Hacking, learning, and development. It provides a safe environment to play around, build and compile things, learn new technologies, etc. For example, I&#8217;ve used it to test and play with Tengine and Nginx. I&#8217;ve also built a Multi-VM environment where I tested MariaDB 5.3 and the new Percona Tools, pt-table-checksum and pt-table-sync in particular. I think Vagrant is a great tool to learn Chef, Puppet, and Hadoop;<br
/> 2. Testing: testing software on different distros, continuous integration testing for server software (web server such as Tengine, database server such as MariaDB and Percona Server). In fact, using a Centos 6.2 VM, I found Percona&#8217;s 5.5 RPM packages still haven&#8217;t resolved header file conflicts, an old problem.</p><p><strong>Sample Multi-VM Vagrant file</strong><br
/> It is really convinient to have a Multi-VM environment for development and testing. Vagrant can do that but there is a shortage of good samples, especially for Vagrant 0.9. Here is a sample that worked for me. Note that:<br
/> 1. The VMs in the environment can be made from the same image. In the sample below, &#8220;debian&#8221; and &#8220;xiaosaier&#8221;&#8216;s daddy is &#8220;debian6&#8243;. No joke intended;<br
/> 2. Use &#8220;vagrant ssh debian&#8221;, &#8220;vagrant ssh centos&#8221;, and &#8220;vagrant ssh xiaosaier&#8221; to get to each VM. Each VM can talk to one another via the IP address defined. Therefore it can be used for good, realistic testing. After having good Chef recipe or Puppet files, the VMs can be made in a certain way, which can be used for Continuous Integration Testing.<br
/> 3. The hostonly network IP address works very well. However,  the VM takes the name of the image it is based on by default. It will be nice to be able to customize the VMs&#8217; names. Let me know if you know how;<br
/> <code><br
/> Vagrant::Config.run do |config|</p><p> config.vm.define :debian do |debian_config|<br
/> debian_config.vm.box = "debian6"<br
/> debian_config.vm.network :hostonly, "33.33.33.10"<br
/> end</p><p> config.vm.define :centos do |centos_config|<br
/> centos_config.vm.box = "centos62"<br
/> centos_config.vm.network :hostonly, "33.33.33.11"<br
/> end</p><p> config.vm.define <img
src='http://www.haidongji.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' /> iaosaier do |xiaosaier_config|<br
/> xiaosaier_config.vm.box = "debian6"<br
/> xiaosaier_config.vm.network :hostonly, "33.33.33.12"<br
/> end<br
/> </code><br
/> PS. Note, the combination of colon and letter x turns into an emotion icon above, at least viewed via the web page. Watch out!</p> ]]></content:encoded> <wfw:commentRss>http://www.haidongji.com/2012/02/24/recommendation-vagrant-and-veewee/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
