<?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>All About Free &#187; 计算机</title>
	<atom:link href="http://www.free-z.net/tag/%e8%ae%a1%e7%ae%97%e6%9c%ba/feed" rel="self" type="application/rss+xml" />
	<link>http://www.free-z.net</link>
	<description></description>
	<lastBuildDate>Sun, 09 Oct 2011 14:00:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
	
<!-- Start Of Script Generated By WP-PostViews Plus -->
<script type='text/javascript' src='http://www.free-z.net/wp-includes/js/jquery/jquery.js?ver=1.4.4'></script>
<script type="text/javascript">
/* <![CDATA[ */
jQuery.ajax({type:'GET',url:'http://www.free-z.net/wp-content/plugins/wp-postviews-plus/postviews_plus.php',data:'todowppvp=add&type=tag&id=20_1',cache:false,dataType:'script'});
/* ]]> */
</script>
<!-- End Of Script Generated By WP-PostViews Plus -->
	<item>
		<title>给计算机系学生的建议</title>
		<link>http://www.free-z.net/681</link>
		<comments>http://www.free-z.net/681#comments</comments>
		<pubDate>Fri, 11 Dec 2009 02:34:51 +0000</pubDate>
		<dc:creator>Free</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[我所爱的]]></category>
		<category><![CDATA[建议]]></category>
		<category><![CDATA[计算机]]></category>

		<guid isPermaLink="false">http://all.aboutfree.me/?p=681</guid>
		<description><![CDATA[虽然是一篇老文了，但不管怎样，都值得阅读，并且学习 作者： 周思博 (Joel Spolsky) 译者： Chen Bin 2005年1月2日 虽然大概一两年前我还在夸夸其谈桌面应用程序是将来的潮流，大学生们现在还是偶尔向我请教职业发展的问题。所以我把我的建议写下来。以供学生们阅读，嘲笑，忽略。 大多数锐气十足的学生从来不向前辈征求意见。在计算机科学领域，这样做是正确的。因为前辈们很可能说些“在2010年前，市场对于那些只会敲击键盘的代码工人的需求将会超过一亿（因此前景是乐观的）”，或者诸如“Lisp语言现在真的很热门”。 我 和那些前辈也差不多，当我给别人建议时，实际上我不知道自己在说些什么。我是如此的落后于时尚，以至于连AIM也搞不明白，而不得不使用 email（恐龙时代的产品，在那个时代，音乐是刻在扁扁的的圆圆的盒子上，噢，那种盒子叫cd）。（译者按：我认为祖儿这里在说反话，后文很多地方作者 都在说反话，读者尽量理解这种美国式幽默吧。） 所以你最好不要理睬我将要说的，你应该立刻去制作某种在线交友软件。 然而， 如 果你喜欢编程，那就感谢上帝吧:你属于幸运的少数人，这些人喜欢工作，他们的工作可以保证他们能过上舒适的生活。大多数人没有这么幸运。对大多数人来说， 工作是不愉快的，忍受工作的目的攒钱，是为了在年满65岁退休后能过上自己想过的生活。如果他们想过的生活不需要灵活的膝盖，明亮的眼镜，轻盈的脚步的 话。 现在让我回到主题，我将提供一些建议。 好了，不罗嗦了，下面就是Joel给计算机系学生们七条免费的建议: 1. 毕业前学会写作 2. 毕业前学会C语言 3. 毕业前学习微观经济学（microeconomics） 4. 不要因为某些非计算机课程枯燥无趣就敬而远之 5. 学习有大量编程实践的课程 6. 不要担心工作都跑到印度去了 7. 好好做夏季毕业实习 让 我逐条解释这些建议。但解释之前我要说明一下，如果因为这些建议是Joel的建议你就打算无条件地接受，以至于连我的理由都想跳过，那么你就太单纯，太容 易被别人骗了。如果你是那种单纯的人，我还要给你第八条建议，找心理医生咨询一下如何培养自信（self-esteem）。 毕业前学会写作 如果Linus Torvalds不懂如何布道的话，Linux会成功吗？ 正象每一个黑客，Linus精通写作，他知道如何准确地在email和邮件讨论组中使用书面英语表达自己的思想，所以他能够从全世界召集大量志愿者为Linux工作。 你听说过最近风靡全世界的极限编程（Extreme Programming）吗？ 即使你不懂什么是极限编程，你至少听说过这个词。为什么？因为宣传极限编程的人都是天才的作者和演说家。 就看看你身边的那些小型的软件开发组织吧，最有权力和影响力的人是那些可以用自信，准确，舒适的英语交流的人。好吧，我承认这些人也许言过其实，但是你无可奈何。 一 个合格的程序员和一个伟大的程序员的区别不在于知道多少种编程语言，不在于他们是喜欢Python或者Java，而是在于他们是否擅长表达。他们能够说 服，所以他们获得权力。他们能够写清楚明白的评论和接口文档，所以他们使得别人不用重写，而可以重用他们的代码，否则他们的代码就是毫无用处的。他们也能 够写出清晰的用户手册，于是最终用户可以理解他们的代码是做什么用的，明白了他们的工作的价值。sourceforge埋葬着许多精美的代码，这些已死的 代码无人使用，因为代码的作者很少写（或者根本不写）用户手册。 我不会雇佣一个不懂写作的程序员。如果你擅长写，你就很容易找到工作，紧接着你就会被要求写技术规格文档，这意味着你已经被管理层注意到了。 大学里有一些课程，要求你做很多的写作练习，不要犹豫，赶快参加这些课程。不要错过任何要求你每周或者每天练习写作的课程。 [...]]]></description>
			<content:encoded><![CDATA[<p>虽然是一篇老文了，但不管怎样，都值得阅读，并且学习</p>
<p><span id="more-681"></span><span><span id="ls_contents-0">作者： 周思博 (Joel Spolsky)<br />
译者： Chen Bin<br />
2005年1月2日</span></span></p>
<p>虽然大概一两年前我还在夸夸其谈桌面应用程序是将来的潮流，大学生们现在还是偶尔向我请教职业发展的问题。所以我把我的建议写下来。以供学生们阅读，嘲笑，忽略。</p>
<p>大多数锐气十足的学生从来不向前辈征求意见。在计算机科学领域，这样做是正确的。因为前辈们很可能说些“在2010年前，市场对于那些只会敲击键盘的代码工人的需求将会超过一亿（因此前景是乐观的）”，或者诸如“Lisp语言现在真的很热门”。</p>
<p>我 和那些前辈也差不多，当我给别人建议时，实际上我不知道自己在说些什么。我是如此的落后于时尚，以至于连AIM也搞不明白，而不得不使用 email（恐龙时代的产品，在那个时代，音乐是刻在扁扁的的圆圆的盒子上，噢，那种盒子叫cd）。（译者按：我认为祖儿这里在说反话，后文很多地方作者 都在说反话，读者尽量理解这种美国式幽默吧。）</p>
<p>所以你最好不要理睬我将要说的，你应该立刻去制作某种在线交友软件。</p>
<p>然而，</p>
<p>如 果你喜欢编程，那就感谢上帝吧:你属于幸运的少数人，这些人喜欢工作，他们的工作可以保证他们能过上舒适的生活。大多数人没有这么幸运。对大多数人来说， 工作是不愉快的，忍受工作的目的攒钱，是为了在年满65岁退休后能过上自己想过的生活。如果他们想过的生活不需要灵活的膝盖，明亮的眼镜，轻盈的脚步的 话。</p>
<p>现在让我回到主题，我将提供一些建议。</p>
<p>好了，不罗嗦了，下面就是Joel给计算机系学生们七条免费的建议:</p>
<p>1. 毕业前学会写作<br />
2. 毕业前学会C语言<br />
3. 毕业前学习微观经济学（microeconomics）<br />
4. 不要因为某些非计算机课程枯燥无趣就敬而远之<br />
5. 学习有大量编程实践的课程<br />
6. 不要担心工作都跑到印度去了<br />
7. 好好做夏季毕业实习</p>
<p>让 我逐条解释这些建议。但解释之前我要说明一下，如果因为这些建议是Joel的建议你就打算无条件地接受，以至于连我的理由都想跳过，那么你就太单纯，太容 易被别人骗了。如果你是那种单纯的人，我还要给你第八条建议，找心理医生咨询一下如何培养自信（self-esteem）。</p>
<p><strong>毕业前学会写作</strong></p>
<p>如果Linus Torvalds不懂如何布道的话，Linux会成功吗？ 正象每一个黑客，Linus精通写作，他知道如何准确地在email和邮件讨论组中使用书面英语表达自己的思想，所以他能够从全世界召集大量志愿者为Linux工作。</p>
<p>你听说过最近风靡全世界的极限编程（Extreme Programming）吗？ 即使你不懂什么是极限编程，你至少听说过这个词。为什么？因为宣传极限编程的人都是天才的作者和演说家。</p>
<p>就看看你身边的那些小型的软件开发组织吧，最有权力和影响力的人是那些可以用自信，准确，舒适的英语交流的人。好吧，我承认这些人也许言过其实，但是你无可奈何。</p>
<p>一 个合格的程序员和一个伟大的程序员的区别不在于知道多少种编程语言，不在于他们是喜欢Python或者<a href="http://www.free-z.net/tag/java" class="st_tag internal_tag" rel="tag" title="Posts tagged with java">Java</a>，而是在于他们是否擅长表达。他们能够说 服，所以他们获得权力。他们能够写清楚明白的评论和接口文档，所以他们使得别人不用重写，而可以重用他们的代码，否则他们的代码就是毫无用处的。他们也能 够写出清晰的用户手册，于是最终用户可以理解他们的代码是做什么用的，明白了他们的工作的价值。sourceforge埋葬着许多精美的代码，这些已死的 代码无人使用，因为代码的作者很少写（或者根本不写）用户手册。</p>
<p>我不会雇佣一个不懂写作的程序员。如果你擅长写，你就很容易找到工作，紧接着你就会被要求写技术规格文档，这意味着你已经被管理层注意到了。</p>
<p>大学里有一些课程，要求你做很多的写作练习，不要犹豫，赶快参加这些课程。不要错过任何要求你每周或者每天练习写作的课程。</p>
<p>给自己建立一个网络日志（weblog）。在上面写的越多，你会写地越容易。写地越容易，你就写地越多，这是一个正向地循环激励。</p>
<p><strong>毕业前学会C语言</strong></p>
<p>我 可没有说是C++。虽然现在用C的工作不多，但是掌握各种编程语言的程序员事实上用C来交流（lingua franca）；更重要的是，C比某些“现代”语言更接近机器语言。我不管现在大学里在教什么流行的垃圾语言（trendy junk），你至少得花一个学期接近机器。否则，你不可能使用高级语言写出高效的代码。这意味这你不会有机会写编译器或者操作系统，也许这是更好的编程工 作；别人不会相信你能够为大项目设计架构。无论你知道多少高级的控制结构，知道如何进行错误处理，如果你不能解释为什么while （*s++ = *t++）;的意思是进行字符串拷贝（而且对你而言这是世界上最自然，最易懂的代码），那么你就是在对编程一窍不通的状态下编程（programming based on superstition）。打个比方，就好比一个医生不懂基本的解剖学就给你开处方，如果你问这个医生为什么开这种药而不是那种药，他会说因为医药销售 代表说这种药有用。</p>
<p><strong>毕业前学习微观经济学（microeconomics）</strong></p>
<p>我个人对 经济学的一些理解：在经济学刚诞生的时候，它只是局限于有限的领域，在这些领域中人们发展和发现了很多有用的理论和很有趣的事实，这些理论和事实是从逻辑 上是可以证明的。然后， 经济学开始走下坡路了。 “有限的领域”就是微观经济学，它对于商业可以进行有意义的指导。然后，事情就开始变糟了（以下部分你可以跳过），你接下来碰到的是讨论诸如失业率和银行 利率之间关系之类东东的宏观经济学，很多时候宏观经济学讨论的理论都是无法证明正确或者错误的。接下来事态更加恶化了，经济学中的一些领域开始和物理学搭 界，嗯，学习物理经济学也许你帮你在华尔街找到好工作。言归正传，无论如何请学习微观经济学，因为你需要知道什么是“供给和需求”，什么是竞争优势，什么 是净现值（NPVs，Net Present Value，指项目经济寿命期内现金流入总和与现金流出总和之差额），什么是折扣和边际效用（discounting and marginal utility），如果你真想了解商业是如何运作的话。</p>
<p>为什么计算机系的学生要学习经济学？因为理解商业基本规律的程序员对商业界来说是 宝贵的程序员。我记得无数个程序员使我非常沮丧，因为他们在代码中坚持某些疯狂的设计，这些设计从技术上来说，完美；从资本主义的角度来看，发疯。如果你 是一个理解商业的程序员，商业会给你回报。这就是你要学习经济学的原因。</p>
<p><strong>不要因为某些非计算机课程枯燥无趣就敬而远之</strong></p>
<p>首先，你需要让你的学分平均分（GPA）看起来漂亮点。</p>
<p>不 要低估学分平均分的威力。很多雇主和人事经理（包括我）阅读简历时首先看成绩，为什么？因为这代表了大部分的教授在很长的时期内对你的学业的一个平均的看 法。托福成绩（美国的托福大致相对于我国的高考中的语文考试）？哈，几个小时的测验而已。当然学分不一定说明了一切，如果你修的是很难的课程，学分就有可 能低一点。即使你的学分平均分很高，我还是要看各科分数是否一致。如果你应聘的是软件工程师职位，我为什么要关心你在大学里学的欧洲历史课程分数的高低 呢？毕竟，历史很枯燥。那么要是你要编程的部分也是很枯燥的，你是不是要放弃了？事实上，有时候编程是枯燥的，如果你不能忍受编程中的枯燥部分的话，你就 不能完成整个工作，雇主不愿意雇佣你这样的员工。</p>
<p>我在大学里修过一门叫做“文化人类学”的课程，因为那时候我也搞不懂我到底要学什么，听起来这么课程可能还蛮有意思的。</p>
<p>出 乎我的意料。我不得不阅读大量讲述巴西热带雨林中的印第安人如何如何的书，让人真昏昏欲睡。听老师讲解也好不到哪去，我发觉看教室外的草如何长更有趣点。 土著人如何烤蕃薯藤和我有什么关系？我为什么要去讨论如何烤蕃薯藤？但是期中考试马上就要到了，我暗暗下定决心，如果我能跨越“文化人类学”这个障碍，以 后也许没有什么能难倒我了。我决心得A并且得到了A。以后当我不得不坐在林肯中心，连看18个小时的瓦格纳的《尼伯龙根的指环》时，我终于明白我为什么要 学习“文化人类学”了，相比之下，我也能忍受这种歌剧了。</p>
<p><strong>学习有大量编程实践的课程</strong></p>
<p>我还记得决定不去读研究生的那一刻。</p>
<p>就是在学习《动态逻辑》（Dynamic Logic）这门课的时候，我记得是耶鲁的Lenore Zuck（一个天才的教师）教的。</p>
<p>修这门课的时候，我已经不再是雄心勃勃了。我可不指望在这么课程中得个A，我梦想的是混个及格。逻辑本质上是很简单的：如果结论正确，前提必须正确。例如，如果“所有读书好的人都能找到工作”并且“张三的读书好”，那么“张三能够找到好工作”。就这么简单。</p>
<p>但是我要学的是动态逻辑， 动态逻辑和一般逻辑差不多，但是要考虑时间因素。例如，“在你开灯之后，你可以看见你的鞋子”加上“过去灯被打开了”意味着“你现在可以看到你的鞋子”</p>
<p>动态逻辑学对于象Zuck教授这样的天才理论家来说非常诱人，因为这门学科的知识也许可以用来证明计算机程序是否正确。我记得在第一堂课上，为了证明“如果你有一盏关着的灯”并且“你按了一下开关”，那么“现在灯亮了”，Zuck教授就使用了两黑板加上边上的墙壁。</p>
<p>证明过程难以置信的复杂。我觉得如此复杂的证明过程很可能会有小错误，但是我没办法证明证明过程本身是正确的。事实上，写在黑板上的证明跳过了很多中间步骤，许多步的证明使用了演绎法，使用了归纳法，以及一些研究生才懂的证明方法。</p>
<p>作为课后作业，我们需要证明以下命题：如果灯过去是关着的，并且现在它是开着的，请证明有人按了开关</p>
<p>我真的试着证明它了。</p>
<p>我花了许多小时，试图证明这个命题。</p>
<p>在 无数个小时的努力后，我发觉Zuck博士的原始的证明有一个逻辑上的错误，也许这个错误是我的笔记抄错了，我不知道。于是我终于认识到，如果为了证明一个 简单的问题需要花三个小时写下几黑板的证明步骤，再考虑到这个漫长的证明过程中可能会引入种种错误，那么这种机制是不可能用来证明任何有趣的东西的。</p>
<p>对动态逻辑学家来说，有用是无关紧要的。</p>
<p>于是我退出了那门课程，发誓永远不会去读计算机系的研究生。</p>
<p>这 个故事的主题是，计算机科学和软件开发不一样。如果你非常非常幸运，你的学校会开软件开发的课程。然而，他们也可能不开这样的课程，因为名牌大学认为教授 实用技巧的事情应该留给那些二三流的技术学院或者某些释放犯人再安置计划。你可以在任何地方学习编程，我们是耶鲁大学，我们培养未来的世界领导人。你付给 耶鲁16万美元的学费就是为了学习如何写循环语句吗？你把耶鲁当成什么地方了？<a href="http://www.free-z.net/tag/java" class="st_tag internal_tag" rel="tag" title="Posts tagged with java">Java</a>速成班吗？哼。</p>
<p>问题在于，我们没有一个专业的学校教授软件开发。所以如果你想成为一个程序员，你可以进计算机系读书（当然计算机科学也值得学习），但是你学的不是软件开发。</p>
<p>如 果走运的话，你可以在计算机系发掘出很多有大量编程实践的课程，就象你能在历史系找到很多提供写作水平的课程一样。这些课程绝对值得学习。如果你喜欢编 程，不要为你不能上教授诸如lambda算子或者线性代数的课程沮丧，在那里你连摸一下计算机的机会都没有。找找看有没有名字中带有“实习 （Practicum）”字样的课程，不要在乎Practicum是个拉丁语。有用的（无奈状）课程就是需要在课程名中塞一些拉丁语，才能从那些装模作样 （Liberal Artsy Fartsy）管理层的眼前蒙混过关。</p>
<p><strong>不要担心工作都跑到印度去了</strong></p>
<p>啊哈，如果你人在印度，你就无所谓了。愿你享受外包带来的工作机会并顺祝身体健康。</p>
<p>但 是我听说现在愿意读计算机系的学生越来越少了。据说原因之一是工作机会都跑到印度去了。我认为这种观点是大错特错。首先，根据眼前的商业时尚选择事业是非 常愚蠢的。其次，即使工作真的都跑到印度和中国去了，编程对于其他有趣的工作来说都是极好的训练，例如业务流程工程（business process engineering）。第三，无论是在美国还是印度，好程序员仍然是非常短缺的，请相信我。当然，现在有许多所谓搞IT的人吵吵嚷嚷地说就业形势不 好，工作太难找。但是事实如何？恕我直言，好程序员找工作还是很容易。第四，你还有更好的主意吗？历史系的毕业生找工作更容易吗？去法学院如何？据我所 知，99％的律师恨他们的工作，每分钟都恨。而且律师一周工作90小时。正象我以前说过的，如果你喜欢计算机，那么感谢上帝，你将属于全世界人中的极少数 的幸运儿，这些幸运儿热爱他们的工作，而且工作也可以提供体面的收入。</p>
<p>实际上，我也不认为报考计算机系的人越来越少有多大的意义。相对于 internet泡沫时期大家都疯狂的往计算机系挤，现在的人数回落只是回归正常水平而已。在泡沫时期，我们这个行业涌入了许多对计算机毫无兴趣的南郭先 生，他们梦想的是拿着高的吓人的薪水加诱人的期权，然后年轻退休。谢天谢地，现在这些人都跑了。</p>
<p><strong>好好做夏季毕业实习</strong></p>
<p>明智的招聘者知道热爱编程的人初中就为当地的牙医写数据库程序，高中就在计算机夏令营教课，为校报规划网站，在某个软件公司做实习。他们找的就是这样的人。</p>
<p>如 果你喜欢编程，你最容易犯的最大的错误就是“有活就接”。我知道，其他专业的学生假期打工可顾不了这些条条框框。但是你不一样，你拥有一种特殊技能，不要 浪费它。当你毕业时，你的简历上应该已经罗列一堆的编程工作实习。让其他人去“为大家提供租车服务”（Tom Welling是个例外，他业余时间去演超人）。</p>
<p>最后，为了让你的生活更容易一点，也为了说明我这篇文章是能够自圆其说的，我将给我自己 的公司的做做广告。我的公司Fog Creek软件公司，可以为大学生提供软件开发方面的实习机会。在我们公司，你可以学习“编码，开发，商业”。去年在我们公司实习的Ben就是这么说的， 可不是因为我给他什么好处他才这么说。二月一号截至，抓紧机会吧。</p>
<p>如果你听了我的建议，你就会太早地卖掉Microsoft公司的股票，拒绝Google提供的职位，原因是因为你已经拥有自己的公司了。到时候可别后悔，更别怪我，呵呵。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.free-z.net/681/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About Rui Fu</title>
		<link>http://www.free-z.net/about</link>
		<comments>http://www.free-z.net/about#comments</comments>
		<pubDate>Mon, 06 Apr 2009 13:52:28 +0000</pubDate>
		<dc:creator>Free</dc:creator>
				<category><![CDATA[无归类文章]]></category>
		<category><![CDATA[计算机]]></category>

		<guid isPermaLink="false">http://www.anniesblog.cn/freeznet/?page_id=2</guid>
		<description><![CDATA[About Mii Name: Rui Fu Age: 21 Location : Sheffield, South Yorkshire, United Kingdom Email: freelz # gmail.com QQ:19890425 MSN: freeznet # hotmail.com Study: From 2008 &#8211; MComp Computer Science and Artificial Intelligence &#8211; Sheffield University My WebsItEs: http://www.17175.cn/ http://www.free-z.net/ http://www.aboutfree.me/ http://www.zuiuk.com/ http://www.ischungemale.com/ http://www.iszenggemale.com/ 是个对语言及其没有天赋的人,虽然还是明白hello how are you的意思 热衷于各种有关于计算机的技术 非常讨厌Eclipse 点点点&#8230;]]></description>
			<content:encoded><![CDATA[<p>About Mii</p>
<p>Name: Rui Fu<br />
Age: 21<br />
Location : Sheffield, South Yorkshire, United Kingdom<br />
Email: freelz # gmail.com<br />
QQ:19890425<br />
MSN: freeznet # hotmail.com</p>
<p>Study:<br />
From 2008 &#8211; MComp Computer Science and Artificial Intelligence &#8211; Sheffield University</p>
<p>My WebsItEs:</p>
<p>http://www.17175.cn/</p>
<p>http://www.free-z.net/</p>
<p>http://www.aboutfree.me/</p>
<p>http://www.zuiuk.com/</p>
<p>http://www.ischungemale.com/</p>
<p>http://www.iszenggemale.com/</p>
<p>是个对语言及其没有天赋的人,虽然还是明白hello how are you的意思<br />
热衷于各种有关于计算机的技术<br />
非常讨厌Eclipse<br />
点点点&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.free-z.net/about/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>简单的机器人操控。</title>
		<link>http://www.free-z.net/59</link>
		<comments>http://www.free-z.net/59#comments</comments>
		<pubDate>Tue, 16 Sep 2008 00:54:37 +0000</pubDate>
		<dc:creator>Free</dc:creator>
				<category><![CDATA[原QQ空间文章]]></category>
		<category><![CDATA[技术存档]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[机器人]]></category>
		<category><![CDATA[计算机]]></category>

		<guid isPermaLink="false">http://www.free-z.net/archives/59</guid>
		<description><![CDATA[前几天收到了谢大发来的关于入学第一周的安排，很明显我将miss掉所有的节目，因为航班的原因。 当然大学那边我也已经联系好，我将在我抵达后再去报道。 不过，收到了一份我比较感兴趣的资料，关于第一周的一个机器人比赛的准备文档。 这个就是所谓的机器人。 从文档中我能了解到，这个机器人名叫Lego Mindstorm NXT robot，机器人通过蓝牙技术与计算机进行交互。 除此之外，机器人控制程序采用JAVA语言编写，这点让我很大吃一惊，JAVA我可以说是从来没有接触过的。 不过看了文档中的介绍，还是对机器人程序编写有了一定的认识。 控制机器人行走的为两个马达，motor B与motor C，左边为B，右边为C 控制速度与方向的程序代码如下 Motor.B.setSpeed(50); Motor.C.setSpeed(50); Motor.B.forward(); Motor.C.forward(); 此段代码是让机器人以半速前进。 如此类推，机器人还有backward和stop的子程序 至于转向，则可以设置两个马达不同的速度以及不同的运行模式来进行转向。 例如可以 Motor.B.setSpeed(50); Motor.B.forward(); Motor.C.stop(); 则是让机器人向C马达方向进行转向。 除此之外，机器人还有传感器来感应自己与物体的距离。 传感器分为distanceSensor,leftDistanceSensor，rightDistanceSensor，touchSensor，ultrasonic sensor 这是文档中介绍过的传感器 对于distanceSensor，在java程序中有一个已存在的子程序getDistance，可以直接调用 distanceSensor.getDistance()返回一个最近的物体与机器人的距离，cm为单位，整数型。 通过这个子程序，我们可以很好的控制机器人的速度，因为是比赛，所以需要机器人达到最优，所以可以通过判定语句来使控制机器人的速度和运行状况 例如 int dist = distanceSensor.getDistance(); if (dist]]></description>
			<content:encoded><![CDATA[<p>前几天收到了谢大发来的关于入学第一周的安排，很明显我将miss掉所有的节目，因为航班的原因。 <br />当然大学那边我也已经联系好，我将在我抵达后再去报道。 <br />不过，收到了一份我比较感兴趣的资料，关于第一周的一个机器人比赛的准备文档。 </p>
<p>这个就是所谓的机器人。 <br /><img src="http://sz1.photo.store.qq.com/http_imgload.cgi?/rurl4_b=66d94cd28c2484c02947411066342752729275c0a7e4fd68b67739c96444f27512f8e087b440ebcf14081747f6acb89a06c88dc29e49950f38253d4b318a4931c5a0a2adde8bde43597bf50ea0456da09f634c88" width="" height="" border="0"/> </p>
<p>从文档中我能了解到，这个机器人名叫Lego Mindstorm NXT robot，机器人通过蓝牙技术与计算机进行交互。 <br />除此之外，机器人控制程序采用<a href="http://www.free-z.net/tag/java" class="st_tag internal_tag" rel="tag" title="Posts tagged with java">JAVA</a>语言编写，这点让我很大吃一惊，<a href="http://www.free-z.net/tag/java" class="st_tag internal_tag" rel="tag" title="Posts tagged with java">JAVA</a>我可以说是从来没有接触过的。 </p>
<p>不过看了文档中的介绍，还是对机器人程序编写有了一定的认识。 </p>
<p>控制机器人行走的为两个马达，motor B与motor C，左边为B，右边为C <br />控制速度与方向的程序代码如下 <br />Motor.B.setSpeed(50); <br />Motor.C.setSpeed(50); <br />Motor.B.forward(); <br />Motor.C.forward(); <br />此段代码是让机器人以半速前进。 <br />如此类推，机器人还有backward和stop的子程序 <br />至于转向，则可以设置两个马达不同的速度以及不同的运行模式来进行转向。 <br />例如可以 <br />Motor.B.setSpeed(50); <br />Motor.B.forward(); <br />Motor.C.stop(); <br />则是让机器人向C马达方向进行转向。 </p>
<p>除此之外，机器人还有传感器来感应自己与物体的距离。 <br />传感器分为distanceSensor,leftDistanceSensor，rightDistanceSensor，touchSensor，ultrasonic sensor <br />这是文档中介绍过的传感器 <br />对于distanceSensor，在<a href="http://www.free-z.net/tag/java" class="st_tag internal_tag" rel="tag" title="Posts tagged with java">java</a>程序中有一个已存在的子程序getDistance，可以直接调用 <br />distanceSensor.getDistance()返回一个最近的物体与机器人的距离，cm为单位，整数型。 <br />通过这个子程序，我们可以很好的控制机器人的速度，因为是比赛，所以需要机器人达到最优，所以可以通过判定语句来使控制机器人的速度和运行状况 <br />例如 <br />int dist = distanceSensor.getDistance(); <br />if (dist <10){ <br />Motor.B.stop(); <br />Motor.C.stop(); <br />} <br />如此一来，可以让机器人在距离一个物件小于10cm时停下 <br />当然，程序中还有leftDistanceSensor，rightDistanceSensor，通过这两个子程序，我们可以让机器人做到智能转向。 <br />int leftdist = leftDistanceSensor.getDistance(); <br />int rightdist = rightDistanceSensor.getDistance(); <br />while (leftdist<=10){ <br />Motor.C.setSpeed(10); <br />Motor.B.setSpeed(50); <br />Motor.B.forward(); <br />Motor.C.forward(); <br />int leftdist = leftDistanceSensor.getDistance();} <br />除此之外我们还可以再编写一个子程序NormalForward()包含机器人正常速度前进的代码 <br />然后在控制自动转向完毕后调用，机器人就会自动前进了。 </p>
<p>对于touchSensor，包含一个isPressed的子程序，返回值为布尔型。 <br />这个传感器位于机器人前方，可以感触是否接触到物件，如果是，则返回true，如果假则返回false <br />调用方式很简单 <br />boolean touch = touchSensor.isPressed() <br />文档中要求说如果机器人传感器触碰到什么东西，则后退 <br />那么所应该的代码即 <br />boolean touch = touchSensor.isPressed() <br />if (touch = true){ <br />motor.B.setSpeed(50); <br />motor.C.setSpeed(50); <br />motor.B.backward; <br />motor.C.backward; <br />} </p>
<p>机器人包含了ultrasonic sensor来精确测量机器人与最近的物体的距离，但是传感器可能会受到周围噪音的影响，所以如何处理这些从传感器中所接收到的噪音数据呢？ <br />我个人感觉，其他的噪声与超声有着不同的频率，超声波的频率至少大于20000HZ。 <br />计算机能发出10-60000HZ的声波，我们可以定义一个特殊的频率来发射，即 <br />int soundFrequency = 30000; <br />然后通过程序分析所采集到的声波的频率，只有获取到特定的频率的声波才进行分析，这样就能解决其他噪音的干扰了。 <br />至于如何通过程序来解决，虽然简单的if判定可以解决，但是我不知道所需要的子程序和具体方式，代码只有搁置了。 </p>
<p>说实话蛮想参加那个活动，毕竟是开学，能有个展示自己的地方，不过也罢，因为有人说，今后的机会还会有很多的。 Because she is important in my heart. <br />虽然没参赛，但我已经学会了不少，嘿嘿。 </p>
<p>P.S.文中程序代码部分为自己原创，部分为文档中附带。或许部分程序会有错误，如果您发现，请指出，谢谢。 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.free-z.net/59/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Base64编码与迅雷/快车/旋风专用链原理分析</title>
		<link>http://www.free-z.net/60</link>
		<comments>http://www.free-z.net/60#comments</comments>
		<pubDate>Thu, 11 Sep 2008 23:01:45 +0000</pubDate>
		<dc:creator>Free</dc:creator>
				<category><![CDATA[原QQ空间文章]]></category>
		<category><![CDATA[技术存档]]></category>
		<category><![CDATA[计算机]]></category>

		<guid isPermaLink="false">http://www.free-z.net/archives/60</guid>
		<description><![CDATA[额- -再怎么说自己也是个学计算机的 再怎么贪玩也总该有点东西写吧 所以说 闲来无聊 就写了这篇文章- &#8211; ================================== 首先呢，要说说Base64编码。 Base64编码是一种加密/解密字符串的算法 他可以把一段字符串A通过特定的加密算法变成字符串B 并且单凭你的肉眼是无法通过B来反推出A来 但通过逆推算法便能很迅速的将字符串B转换为字符串A 这就是加密/解密字符串的算法。 简单的来说，Base64编码的特点就是 加密解密速度快，并且须通过特定算法解密。 下面这段代码就是一段通过Base64加密后的字符串 5qyi6L+O5p2l5Yiw5LuY552/55qE6YOo6JC95qC844CC 通过肉眼你根本无法知道这段代码的意义，以下则是解密后的字符串 欢迎来到付睿的部落格。 下面开始说说实质性的东西。 Base64是较为常见的一种用于传输8Bit字节代码的编码方式之一，他要求把3个8Bit的字节转换为4个6Bit的字节，既3&#215;8=4&#215;6=24，然后把6Bit高位用0补成8Bit，使得3个8bit原文变成4个8Bit字节的代码，所以说转换后的字符串会比原字符串长。 举个例子（仅仅是个例子e113） 原文为 qweqweqw asdasdas zxczxczx 转换后 00qweqwe 00qwasda 00sdaszx 00czxczx 转换后的字符串对应一个编码表，即Base64编码的码表（摘自RFC2045） Table 1: The Base64 Alphabet Value Encoding Value Encoding Value Encoding Value Encoding 0 A 17 R 34 i 51 z 1 [...]]]></description>
			<content:encoded><![CDATA[<p>额- -再怎么说自己也是个学计算机的 <br />再怎么贪玩也总该有点东西写吧 <br />所以说 <br />闲来无聊 <br />就写了这篇文章- &#8211; <br />================================== <br />首先呢，要说说Base64编码。 <br />Base64编码是一种加密/解密字符串的算法 <br />他可以把一段字符串A通过特定的加密算法变成字符串B <br />并且单凭你的肉眼是无法通过B来反推出A来 <br />但通过逆推算法便能很迅速的将字符串B转换为字符串A <br />这就是加密/解密字符串的算法。 <br />简单的来说，Base64编码的特点就是 <br />加密解密速度快，并且须通过特定算法解密。 </p>
<p>下面这段代码就是一段通过Base64加密后的字符串 <br />5qyi6L+O5p2l5Yiw5LuY552/55qE6YOo6JC95qC844CC </p>
<p>通过肉眼你根本无法知道这段代码的意义，以下则是解密后的字符串 <br />欢迎来到付睿的部落格。 </p>
<p>下面开始说说实质性的东西。 <br />Base64是较为常见的一种用于传输8Bit字节代码的编码方式之一，他要求把3个8Bit的字节转换为4个6Bit的字节，既3&#215;8=4&#215;6=24，然后把6Bit高位用0补成8Bit，使得3个8bit原文变成4个8Bit字节的代码，所以说转换后的字符串会比原字符串长。 </p>
<p>举个例子（仅仅是个例子e113） <br />原文为 qweqweqw asdasdas zxczxczx <br />转换后 00qweqwe 00qwasda 00sdaszx 00czxczx </p>
<p>转换后的字符串对应一个编码表，即Base64编码的码表（摘自RFC2045） <br />                            Table 1: The Base64 Alphabet <br />      Value Encoding  Value Encoding  Value Encoding  Value Encoding <br />           0 A            17 R            34 i            51 z <br />           1 B            18 S            35 j            52 0 <br />           2 C            19 T            36 k            53 1 <br />           3 D            20 U            37 l            54 2 <br />           4 E            21 V            38 m            55 3 <br />           5 F            22 W            39 n            56 4 <br />           6 G            23 X            40 o            57 5 <br />           7 H            24 Y            41 p            58 6 <br />           8 I            25 Z            42 q            59 7 <br />           9 J            26 a            43 r            60 8 <br />          10 K            27 b            44 s            61 9 <br />          11 L            28 c            45 t            62 + <br />          12 M            29 d            46 u            63 / <br />          13 N            30 e            47 v <br />          14 O            31 f            48 w         (pad) = <br />          15 P            32 g            49 x <br />          16 Q            33 h            50 y </p>
<p>如此一来便能使4个8Bit的译文有对应的字符代表。 <br />那么再来看一个实际的例子（2进制表示） </p>
<p>转换前 10101101 10111010 01110110 <br />转换后 00101011 00011011 00101001 00110110 <br />十进制 43       27       41       54 <br />对应值 r        b        p        2 </p>
<p>所以说编码后字符串为 rbp2 <br />如此也可以逆向推算出原文。 </p>
<p>但是，我们也可能遇到一个问题 <br />就是如果原文字节数是10，11或者13该怎么办？（非3整数倍） <br />Base64编码是这样来解决的： <br />原文字节不够的地方全部用0来补足，转换时用=代替。 <br />但是编码后的字符串不会含有2个以上的=，因为等号个数=原文字节数 mod 3 </p>
<p>ok，这就是简单的Base64编码的介绍。 <br />当然，我是看了老罗的文章后才了解到的。 </p>
<p>接下来，说说专用链和Base64的关系。 <br />其实呢，说白了专用链就是使用了Base64编码，因为我之前提到的Base64的特点，他的高速的加密以及解密。 <br />接下来我将是用一个软件的下载地址来做示范，讲解3种程序的专用链。 </p>
<p>例子的下载地址是(此链接不存在，仅作为演示) <br /><a href="http://www.free-z.net/1.rar" target="_blank">http://www.free-z.net/1.rar</a> </p>
<p>迅雷专用链 <br />迅雷的专用链是在原地址的前面加&#8221;AA&#8221;，最后加&#8221;ZZ&#8221;后再是用Base64加密 <br />即使用Base64编码如下字符串 <br />AA<a href="http://www.free-z.net/1.rar" target="_blank">http://www.free-z.net/1.rar</a>ZZ </p>
<p>编码后字符串为 <br />QUFodHRwOi8vd3d3LmZyZWUtei5uZXQvMS5yYXJaWg== </p>
<p>迅雷专用链即在此字符串前加thunder://，即 <br />thunder://QUFodHRwOi8vd3d3LmZyZWUtei5uZXQvMS5yYXJaWg== </p>
<p>快车专用链 <br />快车的专用链是在原地址的前面和后面都加上&#8221;"后再是用Base64加密 <br />即使用Base64编码如下字符串 <br /><a href="http://www.free-z.net/1.rar" target="_blank">http://www.free-z.net/1.rar</a> </p>
<p>编码后字符串为 <br />W0ZMQVNIR0VUXWh0dHA6Ly93d3cuZnJlZS16Lm5ldC8xLnJhcltGTEFTSEdFVF0= </p>
<p>快车专用链即在此字符串前加Flashget://，尾部加&#038;freeznet，即 <br />Flashget://W0ZMQVNIR0VUXWh0dHA6Ly93d3cuZnJlZS16Lm5ldC8xLnJhcltGTEFTSEdFVF0=&#038;freeznet </p>
<p>腾讯旋风专用链 <br />腾讯旋风专用链是最为简单的，直接将原地址Base64编码即可，即 <br />对字符串<a href="http://www.free-z.net/1.rar" target="_blank">http://www.free-z.net/1.rar</a>直接编码，可获得 <br />aHR0cDovL3d3dy5mcmVlLXoubmV0LzEucmFy </p>
<p>然后在此字符串之前加qqdl://即可，即 <br />qqdl://aHR0cDovL3d3dy5mcmVlLXoubmV0LzEucmFy </p>
<p>原理就是这样的，够简单吧 &#8211; -e113</p>
]]></content:encoded>
			<wfw:commentRss>http://www.free-z.net/60/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

