Reader's Digest

Digest your Internet

Archive for January, 2011

“Hello World!”的十个问题

我觉得,基本上可以说每个程序员都很熟悉“Hello World!”程序。依照惯例,它是学习编程语言、编译并运行你的首个程序的一种快速方法。然而,除此之外,它的价值不大。下面是我认为Hello World的十个问题。 我觉得,基本上可以说每个程序员都很熟悉“Hello World!”程序。依照惯例,它是学习编程语言、编译并运行你的首个程序的一种快速方法。然而,除此之外,它的价值不大。下面是我认为Hello World的十个问题。 10. 为什么是“Hello World”?为什么不叫“Hello Dave”或者“It Works!”?(Dave就是《2011太空漫游》中的HAL 9000) 我知道这个问题有点夸张。“Hello World”这种说法从何而来呢?除你之外,最后一次有人运行你的程序是什么时候?也许用“Hello <输入你的名字>”更合理些。 9. 它只适用于一件事情”? 我不是在发表“Hello World”一无是处的言论。然而,他们唯一擅长的就是合理性检查。 “Hello World”并不能帮你学习任何编程语言,它能做的只是帮你写一个能编译和运行的简单程序。 它可以帮助你检查其合理性,然后你便可以告诉你自己,“我成功了!” 8. 既不给力又不好玩 随着游戏中精细图形及互联网交互性的发展,几乎没有人再对那些在屏幕上输出一些字的应用程序感兴趣。 就像刚才说的那样,写一个“Hello World!”程序,除了你自己之外,不会给任何人留下印象。此外,它也不可能是你学习编程的动力。 7. 它不切实际 你最后一次编写仅要求将字符串显示到标准输出的程序是什么时候?有人可能会说,现在很少有程序不包含图形用户界面——不管是网页、窗口界面,或者甚至是对文件、数据库的操作。可能它在学术界很实用,在学术界可以始终如一地让程序显示运算或者数值,但专业领域并非如此。 6. 没有交互性 “Hello Word!”这个例子,除了需要终端用户验证“HelloWorld!”是否显示在屏幕上之外,不依赖用户做任何其它操作。它没有要求用户输入用户名、退 出程序或重新运行程序之类的交互。关于终端用户和程序之间如何进行交互,“Hello Word!”并没有涉及相关内容。 5. 没有逻辑和运算 计算处理非常依赖于逻辑结构(如:当这个条件为真时,打印这条语句)和运算。大多数程序的编写将运用一些标准下的决策逻辑。甚至计算机的基本组成部分(机器代码)也代表一种逻辑表达式:1=真,0=假。 4. 在不同语言下,太过相似 如果你观察一下不同语言编写的“Hello World!”程序,你会发现它们之间非常相似。 一旦你精通于用一种语言写出 “Hello World!”程序,那么你也差不多能用其他语言熟练地编写这个程序。 3. 只使用一个关键字 如果你看过各种Hello World范例,你会发现他们的共同点就是都只使用一个关键字。 一门编程语言有多少关键字:数百?上千?在编程语言的学习中,只学一个关键字是微乎其微的一步。   2. 忽略了变量和常量   […]

Read the rest of this entry »

后台挂QQ挂MSN不是梦Backgrounder终极教程

  有很多人说iPhone 4开始  4.0以后的固件已经支持后台运行了,为什么还需要Backgrounder????   我想说双击Home键出来的叫做最近运行程序列表,出现在这个列表里面的唯一、充分且必要条件是最近运行过的程序,跟任何别的因素没有关系。而且列表里面的图标是按最近运行的顺序排序的。这个列表里面的程序有可能是在后台驻留的,也有可能是已经完全退出的,还有可能是真后台还在继续运行的。总之,都有可能,因为是否后台跟是否出现在这个列表无关。我们可以肯定的只有一点:不在这个列表里面的程序必定是已经完全退出了的。在后台驻留但不出现在最近程序列表里面这种情况是不允许发生的。 如果你在这个列表里面手动叉掉一个程序图标,那么: 1、如果程序本来就已经完全退出,那么什么事情也不会发生,只是删掉了一个图标而已。 2、如果程序是在原生后台,那么程序会释放内存并退出,如果程序在运行系统支持的那几项原生后台任务(音乐,GPS什么的),会被终止。 3、如果程序在真后台运行,那么程序会终止运行并完全退出。并有可能丢失未保存的数据,这一点我不是很肯定,需要进一步观察。   有很多人问为什么把程序设成完全关闭之后在双击Home键弹出的任务管理器里面还是存在,似乎大家都觉得Backgrounder的完全关闭还是没有在任务管理器里面手动删掉后台程序干净,这一点似乎让很多强迫症病患、偏执狂以及完美主义者极度不爽。关于这个问题,iOS4用户手册繁体中文版官方说明书说得很清楚了,双击Home键你看到的只是最近运行的程序,跟后台不后台没有一毛钱关系。你在这里删除的,也只是最近运行的程序图标而已,跟程序是否退出也没有一毛钱关系。而双击Home键弹出来这个东东也不叫任务管理器,只是最近运行程序列表而已。之所以你以为这个是任务管理器,只是你想当然而已,或许还有部分白痴评测文章的影响。总之,这个故事告诉我们,不要总以为自己看到的、自己想象的东西是正确的,多看说明书是正道。   在网上看了半天,没有看到一个到位的Backgrounder教程,大多数都是截个图,告诉你照他这样设就好了。且不说各人的使用习惯不一样照猫画虎行不行,单说发这些教程的人很多自己也没搞清楚那些选项的真正意思,各种版本的教程问题多多。   偏偏Backgrounder又是个对系统行为影响巨大的程序,个人感觉那些越狱之后大叫越狱费电厉害的一大半是因为这个程序。而Backgrounder的设置又是无比的绕,不仔细想想是不大能搞清楚的,这个程序的设置是需要思考的。所以小弟我认真做了个教程,希望能够帮大家正确使用这个程序。所有的说明以iOS4为标准,更早的系统我没有用过,没办法帮到大家。 后台模式设置(Backgrounding method)   对于正确使用Backgrounder,最重要的就是对于iOS4原生后台模式的理解。这个问题Backgrounder自带的说明就已经讲得很清楚了。   iOS4提供的伪后台支持后台音乐播放,GPS定位,网络语音通话,以及任务完成。也就是说仅只有这四项工作可以真正在后台运行。所谓任务完成是指在程序退出的时候还有工作没处理完,比如保存进度存档,那么系统允许程序在后台继续工作,然后在完成保存进度之后停止运行。   除了上述四项后台功能,系统还提供一个程序快速切换的功能,这个功能也算是iOS4多任务的一部分。个人观点,这个功能是iOS4多任务中最先进最有用的功能。它让程序在最小化的时候仅仅是暂停运行,但并不释放内存,保持程序当前的状态,这样当你再次打开这个程序的时候,程序不需要重新从硬盘(闪存)中读出,不需要重新Load数据,而是瞬间恢复到上次退出程序时的状态,这个特性会给用户很强的多任务的感觉,仿佛程序从来没有退出过一样。而这个功能所花费的代价只是一块内存,而并不消耗cpu时间。什么意思呢?就是说快速切换并不比退出程序多耗一丝电,相反,由于再次打开程序的时候不需要读硬盘(闪存),它比退出程序再重新启动更省电!   关于程序快速切换,了解到这个程度还不够,我们还需要知道更深入一点才能正确地使用Backgrounder。   第一点是:为快速切换所保留的内存空间是可以被挤占的。iOS4是没有内存交换空间的,它不会像Windows那样把硬盘(闪存)虚拟成内存来建立一个对应用程序来说无限的虚拟内存空间。所以,在iOS4中,当前台程序内存空间不足的时候,系统会释放掉为后台程序保留的用于快速切换的内存,提供给前台程序使用。当然,如果所有能释放的内存都释放了,还不能满足前台程序的内存要求的话,系统会直接中止前台程序的运行,这就是我们为什么会看到有些程序运行中无故退出的原因。用于快速切换的内存可以被挤占这个特性是很先进的内存动态管理方式,特别适合于内存资源紧张的移动设备。这种内存管理策略的优点是在几乎不消耗任何额外的时间(CPU时间,程序在后台暂停)、空间(内存空间,可以被挤占)资源的情况下,可以提供一个性能优良的伪多任务环境。但是正因为快速切换的内存可以被挤占,所以它的缺点就是它不总是可用的。大家都有经验打开Safari的时候,有时能够直接显示上次退出时候的网页,有时候就需要重新载入,就是这个原因。   关于快速切换我们需要知道的另外一点是,在每个程序最小化的时候,系统都会给程序发送一个通知,告诉程序你现在已经被最小化了。这时候一个优雅、精良的程序会释放掉可以释放的一部分无关紧要的空间以节省内存,比如画面缓存。这个特性的意思是支持iOS4多任务的程序被快速切换到后台以后占用的内存空间会比在前台运行时少。Backgrounder的真后台的操作方式就是在程序最小化的时候不给程序发送这个最小化的通知,所以程序不知道自己已经在后台了,不仅是仍然占用和在前台时一样多的内存,而且还在继续运行,和在前台时一样烧电。而除了几个操作系统底层的精灵进程之外,所有程序在iOS4的原生后台状态下都是暂停运行的,不烧电的。不仅如此,就算是已经在后台的程序,如果它支持iOS4多任务,那么它在收到系统发出的内存不足通知的时候,它还可以继续释放更多内存。比如Safari,在刚最小化的时候,它是保留所有打开的网页的,之后如果系统发出内存不足通知,Safari就可以一个一个地释放已打开的网页所占用的内存。   好了,说了这么多,就是为了帮助大家正确选择Backgrounder最重要的一项选择:全局后台模式选择。对于这个选择,小弟只有一个推荐:原生模式。   第一项:程序退出。上面已经说了,相比原生后台模式没有任何优势,两者都不会让程序在后台运行都不耗电,两者都不占内存(原生模式快速切换的内存可被释放),但是程序的退出和启动要比原生的快速切换多耗电且速度慢(你每次打开植物大战僵尸都要等那条草皮重新展开一次)。这里要顺便说一下,那些喜欢双击home键调出任务栏然后一个一个关掉任务栏上所有程序的同学,你们的这种偏执行为没有任何意义。   第三项:真后台模式。这是Backgrounder的精华,是它存在的意义所在,但是也是很危险的选择。你需要时刻牢记的是,程序在真后台的时候在和前台时一样全速运行,一样刷新要显示的每一帧画面,除了背光,跟在前台的时候一样耗电。你更需要小心的是除了电,真后台的程序还跟在前台的时候一样在消耗流量!!!我的建议是:切勿在全局设置里面选择这一项。只有你真的需要一个程序在后台运行的时候才在覆盖设置里面添加你要的程序,然后选择这一项。别的程序选择真后台除了烧电以外没有任何意义,说不定还会让你错过很多东西:等你接完电话切回去一看,僵尸早就把你家铲了。   第四项:自动选择模式。这个模式的意思是:对于支持iOS4多任务的程序使用原生模式,对于不支持iOS4多任务原生后台的老程序启用真后台模式。我个人的看法还是不要选这一项,需要真后台的程序还是要在覆盖设置里面手动添加。因为你不知道哪些程序是不支持原生后台的,所以很容易某个老游戏糊里糊涂地就被真后台了,然后疯狂偷电偷流量,尤其是在菊花显示没有打开的情况下。 原生后台模式选项(Option for “Native”)   第一项:程序快速切换。不用说,一定要打开。如果关闭这一项,那么除了音乐、GPS、VOIP和任务完成之外就跟关闭后台没有区别了。   第二项:即使程序不支持快速切换也强行打开。对于这一项就要小心了,主要有两个问题。一是不支持原生后台快速切换的程序在打开这个Backgrounder提供的快速切换的时候不会主动释放部分内存,跟在前台时占用的内存一样。二是程序通过这种方式被快速切换到后台之后,如果所保留的内存被别的程序挤占的话,未保存的进度和工作会全部丢失。支持快速切换的程序不会出现这种情况,因为他们在收到最小化通知的时候就会自动存盘。所以,个人意见不推荐打开这个选项。 真后台模式选项(Option for “Backgrounder”) 后台开关选项(Backgrounding state) 后台状态显示选项(Indicate state via…) Miscellaneous 这几项都涉及到后台模式切换,而且比较绕,所以放到一起讲。 这几项之所以绕,是因为后台模式切换的问题Backgrounder的说明里面没有说得很直白清楚。   Backgrounder可以让我们在应用程序运行中通过Activator的手势或者按键在两种后台模式之间切换,但是具体是在哪两种模式之间切换很多人都没搞清楚。现在我们一共有三种模式:无后台模式(完全退出),原生模式和真后台模式(自动检测不算一个模式)。这三种模式的切换方式是: 1、对于设置为原生后台模式的程序,它会在原生后台和完全退出之间切换。原生后台的时候显示蓝菊花和N图标,完全退出模式时无菊花和图标。比如ipod程序,在切换到无后台模式之后一按Home键歌声就停止了,跟在任务栏里面手动关掉一个效果。 2、对于真后台模式的程序,可以通过真后台切换模式选项:Fall back to Native来选择是切换到完全退出还是切换到原生后台。我选择的是切换到原生后台,因为在我现在的理解中,无后台模式没有存在的价值。当然,既然作者做了完全退出的选项,说明完全退出还是有存在的意义的,只是现在我对iOS的理解还不深,还看不到其中的原因。 3、对于设置为完全退出的程序,则无法切换后台状态,只能完全退出,没有选择。 4、有一种神奇的程序是完全无法后台的,不管你设成原生后台还是真后台,它们永远都不会在后台运行,这是因为它们被有意地设计成在最小化的时候就完全退出。这类程序也无法切换后台状态,也永远不会有后台图标或者菊花显示,因为它们永远不会在后台运行。我对装软件这种事情是很谨慎的,尤其是修改系统的软件,不是我需要的我绝对不会装,我这年纪的人已经没有那么大好奇心了。所以这类程序我还没有遇到过,但是Backgrounder的作者在FAQ里面是有提到的,我理解可能是出于安全原因吧,比如网银程序之类。这类程序要是后台了然后你手机被偷了你就仆街了,所以我想一到后台就退出这种设计是很有存在的意义的。另外说一下Cydia,回帖里面有同学说Cydia是可以后台的,我试了一下,用真后台模式确实是可以后台的。之所以我之前以为是不能后台的,是因为目前Cydia还没有为iOS4更新,所以不支持原生后台模式。另外Backgrounder的作者说Activator的作者在他的程序中有意屏蔽了Cydia,所以在Cydia运行的时候无法切换后台模式,具体原因不详。以上两点导致了我的误解,大家对Cydia打开真后台并且打开Enable at launch就可以后台它了。   后台开关选项用于定义程序打开和最小化程序时的后台状态。这两个选项相当绕,个人觉得作者应该改进这两个选项。为了说清楚这两个选项,我必须先说Minimize on Toggle。   Minimize on Toggle的意思是在切换后台模式的时候最小化程序。作者做这个选项的意图是为了让你有两种退出程序的方法。比如说按照缺省设置:长按Home键切换后台模式,那么如果Minimize […]

Read the rest of this entry »