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

<channel>
	<title>非鱼观点-互联网观察</title>
	<atom:link href="http://www.unfish.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.unfish.net</link>
	<description>if(I&#039;m awake){I&#039;m writing code;}else{I&#039;m ready to write code;}</description>
	<lastBuildDate>Fri, 02 Dec 2011 07:43:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>asp.net实现OAuth认证服务端接口</title>
		<link>http://www.unfish.net/archives/714-20111202.html</link>
		<comments>http://www.unfish.net/archives/714-20111202.html#comments</comments>
		<pubDate>Fri, 02 Dec 2011 07:43:14 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[技术文章]]></category>

		<guid isPermaLink="false">http://www.unfish.net/?p=714</guid>
		<description><![CDATA[现在的互联网是开放的互联网，你要想融入这个开放的环境，当然自己也要开放一点。如果你希望别人能够很方便的使用你的网站上的用户及数据，当然要提供比较开放一点的接口。如果能够实现标准的OAuth认证接口，第三方用户在开发的时候就会容易很多，因为他们很可能在开发微博程序的时候已经做过同样的事写过很多这样的代码了。 不过C#实现OAuth认证还真是挺烦的，主要是，类库有好几个，但是，都找不到文档。适用于客户端实现的文档倒是有很多，适用于服务器端的真的没有。连类库的官方文档都找不到，只有源码里仅存的一份简易Test可以作为参考。费了九牛二虎之力终于算是实现了一个几乎一模一样的OAuth认证接口，记录一下。 经过搜索，比较，读资源，读源码，再比较，最后选择了oauth-dot-net这个类库。虽然它已经一年多没更新了，曾经承诺的2.0接口也没有动静，但是，它的Server端实现算是最容易理解和操作的了。 下载源码也好，Release版本也好，把一堆dll引入到自己的项目中。关于这个项目的类型，直接用VS新建网站即可，不需要web application，也不需要web service，也不需要WCF。但是呢，使用过程中你需要新建几个类，而且这几个类需要在web.config中指定，所以它需要完整的命名空间，简单起见，新建一个类库，把所有的类定义和通用的方法放到这里面，当然，因为我们的项目原本就有一个用来定义类变量和公共方法的dll，就直接放一起了。 然后你需要实现几个东西：ConsumerStore，CallbackStore，TokenGenerator，TokenStore，它们分别实现自己的名字前面加上I的那个接口。具体如何实现以及每个函数的作用，可以参考源码中提供的InMemoryXXX的实现方式。具体来讲，consumer是一个个应用，或者第三方的接入网站，每个应用有个唯一的appkey和appsecret，跟新浪的应用一样，你需要在这儿实现根据appkey查找该consumer的功能，每次请求发起，都需要调用。因为创建应用一般来说有自己的流程，所以在这个store可以不用管它。callback是调用者的返回URL，在申请request_token的时候会传递过来，需要保存下来到用户亲自授权完成以后再读出来进行跳转。TokenGenerator只有两个函数，用来生成新的request_token和access_token，如何生成它里面的key和secret，随便你自己，只要永远不重复就可以了，嫌麻烦就直接用GUID。TokenStore是用来查询token的，比如根据tokenkey查找request_token或者access_token，你可以用自己的数据库来实现，字段也就那几个，也是以后每个请求都要读取的。但是它自己的实现接口里面忽略了很重要的一点，就是没有把access_token跟用户Id绑定起来，这个一定要自己实现的，不然程序传一个access_token过来，你找不到是哪个合法用户。 实现了这几个类以后，在源码里面找到OAuth.Net.Examples.EchoServiceProvider这个示例项目，把它的web.config里面的oauth.net.serviceprovider和oauth.net.components两段配置信息拷到自己的web.config里面来，然后修改oauth.net.components这一段里面对应的四个自己已经实现的类，指向自己的类库的位置。 然后添加一个global.asax，对于网站项目，这个文件是没有codefile文件的，可以直接在asax下面写代码，把示例项目中的那个Init方法复制过来。这时候，基础工作就完成了。 然后需要实现三个过程，申请request_token（这一步没有界面，对方直接用代码读你的URL获取这个信息），用户跳到authorize的页面，输入用户名和密码，验证并授权给该客户端，验证完成后返回用户指定的callbackurl，用户再拿该返回链接中的参数申请access_token（这一步也没有界面，通过程序间完成），保存下你返回的token和secret就可以用在其它所有的读取数据的请求上了。 示例中已经给你准备好了一个RequestTokenHandler.cs和AccessTokenHandler.cs，不过这两个示例除了把你搞哭没啥大作用。 新建一个request_token.ashx文件，像RequestTokenHandler.cs一样继承OAuth.Net.ServiceProvider.RequestTokenHandler这个类，实现里面的IssueRequestToken方法，这个时候，建议你就不要再参考示例项目里面的这个代码了，而去OAuth.Net.ServiceProvider.RequestTokenHandler这个类里面，参考它的IssueRequestToken方法。因为示例项目里面的token和secret都是写死的（包括consumer也是写死的），因此它没有对生成的token做任何保存的动作。实际上，你需要将这个token保存到数据库里，同时保存callbackurl，至于要调用CallbackStore来保存还是你直接操作自己的数据库字段，无所谓。这个文件最后是把生成的token和secret以纯文本的形式返回给客户端。 然后客户端把得到的token字符串作为参数，跳到你的authorize.aspx页面，这里你需要提供用户的登录框，和一个授权按钮。当用户点下授权按钮的时候，检查用户名密码是否正确，然后根据用户跳转过来的时候传过来的那个oauth_token参数，找到你前面生成的request_token对应的其它字段（如果你要对request_token设置有效时间，这里需要判断该时间），读出其中的callbackurl字段，然后，调用ServiceProviderContext.VerificationProvider.Generate()方法根据该request_token生成一个oauth_verifier字符串，将该值附加到callbackurl的后面，跳转过去。但是在跳转过去之前，你必须做一件事。 用户的callbackurl页面收到你的oauth_verifier以后，再连同前面的request_token一起来访问你的access_token.ashx，申请access_t0ken。所以用户端也必须保存你前面生成的request_token才可以（临时性的，每次授权前读取，申请到access_token就作废，所以一般用session来保存就行了）。对于access_token.ashx的内容，源码同样提供了一个例子，不过同样是个一点用都没有的例子，因为它完全没有涉及到授权和生成全局唯一access_token的过程。你可以让你的access_token的handler继承自OAuth.Net.ServiceProvider.AccessTokenHandler，然后重写IssueAccessToken方法。这个方法其实很简单，因为父类已经帮你检测了传过来的所有的参数以及签名的正确性，甚至连access_token和verifier是否匹配都验证过了，所以你要做的就是把对应的access_token返回给用户。你可以生成一个新的access_token返回给用户，因为它里面包含的token和secret其实就是两个普通的字符串，跟前面用到的所有的变量都没有直接关系，你只要保存token是唯一的就可以了，因为以后用户做所有的请求，实际都只使用这个token字符串作为自己的唯一身份标志。所以，理所当然，你要把生成的这个access_token永久性的保存到自己的数据库里，还要把这个token跟进行授权的用户的id关联起来，以便以后每次可以查询到这个用户的身份，才能传递他的数据回去。 等等，客户端在申请access_token的时候，只传递了request_token和一个verifier的字符串过来，授权的用户的信息并没有再传回来，你如何知道把哪一个用户关联到这个access_token上？ 所以，你需要把创建新access_token的过程提前，放到authorize的时候，在跳转回callbackurl之前，直接在这里创建一个新的access_token，将它和你的request_token还有你的用户的信息关联起来，保存到数据库里。然后在用户申请access_token的时候，你只要根据传递过来的request_token去数据库里找到前面生成的access_token，把两个值返回给客户端就OK了。 现在，认证过程已经完成了，用户可以使用你的数据接口了。 示例中也为你准备了一个echoHandler的测试代码，但是，悲剧的是，这个代码并不包含任何身份验证的过程，是个完全干净的独立的handler，不知道开发团队提供这样一个示例代码的意义何在？ 你可以自己新建一个echoHandler.ashx（或者随便什么名字），你需要以前面的OAuth.Net.ServiceProvider.AccessTokenHandler作为模板开始你的工作。将它的代码完整的复制到你的handler文件里面来，慢慢修改。首先，ParseParamters里，检查参数完整性，把VerifierParameter删掉，同样的把this.CheckVerifier(context, requestContext);也删掉，verifier参数只在申请access_token的时候才会出现。然后把parameters.AllowOnly检查过程删掉，原因很简单。然后修改SetRequestToken函数，它的代码是通过token参数找到request_token对象，把它改成通过token参数读取你的数据库里的access_token对象（当然，同时把它关联的用户的信息也读出来），然后，把IssueAccessToken函数的过程改成你的业务处理过程，比如输出个用户详细信息啥的。至于输出成json还是xml，就看你的个人喜好和用户的要求了。每个业务处理的handler的返回格式实际是无固定格式的，因为这毕竟是跟你自己的网站业务紧密相关的。 这个时候，你的网站的标准的RESTful格式的api接口就准备好了，如果用户有开发新浪微博客户端的经验，同样的代码拿过来稍微改改就能完成你的网站的OAuth认证，然后就可以方便的调用你的其它的数据接口了。（不过新浪现在已经开始推广OAuth2.0接口，而oauth-dot-net类库目前还没有提供2.0相关的验证方法。如果你有兴趣，可以自己实现一下2.0的交换参数的过程，然后，告诉我一下。]]></description>
			<content:encoded><![CDATA[<p>现在的互联网是开放的互联网，你要想融入这个开放的环境，当然自己也要开放一点。如果你希望别人能够很方便的使用你的网站上的用户及数据，当然要提供比较开放一点的接口。如果能够实现标准的OAuth认证接口，第三方用户在开发的时候就会容易很多，因为他们很可能在开发微博程序的时候已经做过同样的事写过很多这样的代码了。</p>
<p>不过C#实现OAuth认证还真是挺烦的，主要是，类库有好几个，但是，都找不到文档。适用于客户端实现的文档倒是有很多，适用于服务器端的真的没有。连类库的官方文档都找不到，只有源码里仅存的一份简易Test可以作为参考。费了九牛二虎之力终于算是实现了一个几乎一模一样的OAuth认证接口，记录一下。</p>
<p>经过搜索，比较，读资源，读源码，再比较，最后选择了oauth-dot-net这个类库。虽然它已经一年多没更新了，曾经承诺的2.0接口也没有动静，但是，它的Server端实现算是最容易理解和操作的了。</p>
<p>下载源码也好，Release版本也好，把一堆dll引入到自己的项目中。关于这个项目的类型，直接用VS新建网站即可，不需要web application，也不需要web service，也不需要WCF。但是呢，使用过程中你需要新建几个类，而且这几个类需要在web.config中指定，所以它需要完整的命名空间，简单起见，新建一个类库，把所有的类定义和通用的方法放到这里面，当然，因为我们的项目原本就有一个用来定义类变量和公共方法的dll，就直接放一起了。</p>
<p>然后你需要实现几个东西：ConsumerStore，CallbackStore，TokenGenerator，TokenStore，它们分别实现自己的名字前面加上I的那个接口。具体如何实现以及每个函数的作用，可以参考源码中提供的InMemoryXXX的实现方式。具体来讲，consumer是一个个应用，或者第三方的接入网站，每个应用有个唯一的appkey和appsecret，跟新浪的应用一样，你需要在这儿实现根据appkey查找该consumer的功能，每次请求发起，都需要调用。因为创建应用一般来说有自己的流程，所以在这个store可以不用管它。callback是调用者的返回URL，在申请request_token的时候会传递过来，需要保存下来到用户亲自授权完成以后再读出来进行跳转。TokenGenerator只有两个函数，用来生成新的request_token和access_token，如何生成它里面的key和secret，随便你自己，只要永远不重复就可以了，嫌麻烦就直接用GUID。TokenStore是用来查询token的，比如根据tokenkey查找request_token或者access_token，你可以用自己的数据库来实现，字段也就那几个，也是以后每个请求都要读取的。但是它自己的实现接口里面忽略了很重要的一点，就是没有把access_token跟用户Id绑定起来，这个一定要自己实现的，不然程序传一个access_token过来，你找不到是哪个合法用户。</p>
<p>实现了这几个类以后，在源码里面找到OAuth.Net.Examples.EchoServiceProvider这个示例项目，把它的web.config里面的oauth.net.serviceprovider和oauth.net.components两段配置信息拷到自己的web.config里面来，然后修改oauth.net.components这一段里面对应的四个自己已经实现的类，指向自己的类库的位置。</p>
<p>然后添加一个global.asax，对于网站项目，这个文件是没有codefile文件的，可以直接在asax下面写代码，把示例项目中的那个Init方法复制过来。这时候，基础工作就完成了。</p>
<p>然后需要实现三个过程，申请request_token（这一步没有界面，对方直接用代码读你的URL获取这个信息），用户跳到authorize的页面，输入用户名和密码，验证并授权给该客户端，验证完成后返回用户指定的callbackurl，用户再拿该返回链接中的参数申请access_token（这一步也没有界面，通过程序间完成），保存下你返回的token和secret就可以用在其它所有的读取数据的请求上了。</p>
<p>示例中已经给你准备好了一个RequestTokenHandler.cs和AccessTokenHandler.cs，不过这两个示例除了把你搞哭没啥大作用。</p>
<p>新建一个request_token.ashx文件，像RequestTokenHandler.cs一样继承OAuth.Net.ServiceProvider.RequestTokenHandler这个类，实现里面的IssueRequestToken方法，这个时候，建议你就不要再参考示例项目里面的这个代码了，而去OAuth.Net.ServiceProvider.RequestTokenHandler这个类里面，参考它的IssueRequestToken方法。因为示例项目里面的token和secret都是写死的（包括consumer也是写死的），因此它没有对生成的token做任何保存的动作。实际上，你需要将这个token保存到数据库里，同时保存callbackurl，至于要调用CallbackStore来保存还是你直接操作自己的数据库字段，无所谓。这个文件最后是把生成的token和secret以纯文本的形式返回给客户端。</p>
<p>然后客户端把得到的token字符串作为参数，跳到你的authorize.aspx页面，这里你需要提供用户的登录框，和一个授权按钮。当用户点下授权按钮的时候，检查用户名密码是否正确，然后根据用户跳转过来的时候传过来的那个oauth_token参数，找到你前面生成的request_token对应的其它字段（如果你要对request_token设置有效时间，这里需要判断该时间），读出其中的callbackurl字段，然后，调用ServiceProviderContext.VerificationProvider.Generate()方法根据该request_token生成一个oauth_verifier字符串，将该值附加到callbackurl的后面，跳转过去。但是在跳转过去之前，你必须做一件事。</p>
<p>用户的callbackurl页面收到你的oauth_verifier以后，再连同前面的request_token一起来访问你的access_token.ashx，申请access_t0ken。所以用户端也必须保存你前面生成的request_token才可以（临时性的，每次授权前读取，申请到access_token就作废，所以一般用session来保存就行了）。对于access_token.ashx的内容，源码同样提供了一个例子，不过同样是个一点用都没有的例子，因为它完全没有涉及到授权和生成全局唯一access_token的过程。你可以让你的access_token的handler继承自OAuth.Net.ServiceProvider.AccessTokenHandler，然后重写IssueAccessToken方法。这个方法其实很简单，因为父类已经帮你检测了传过来的所有的参数以及签名的正确性，甚至连access_token和verifier是否匹配都验证过了，所以你要做的就是把对应的access_token返回给用户。你可以生成一个新的access_token返回给用户，因为它里面包含的token和secret其实就是两个普通的字符串，跟前面用到的所有的变量都没有直接关系，你只要保存token是唯一的就可以了，因为以后用户做所有的请求，实际都只使用这个token字符串作为自己的唯一身份标志。所以，理所当然，你要把生成的这个access_token永久性的保存到自己的数据库里，还要把这个token跟进行授权的用户的id关联起来，以便以后每次可以查询到这个用户的身份，才能传递他的数据回去。</p>
<p>等等，客户端在申请access_token的时候，只传递了request_token和一个verifier的字符串过来，授权的用户的信息并没有再传回来，你如何知道把哪一个用户关联到这个access_token上？</p>
<p>所以，你需要把创建新access_token的过程提前，放到authorize的时候，在跳转回callbackurl之前，直接在这里创建一个新的access_token，将它和你的request_token还有你的用户的信息关联起来，保存到数据库里。然后在用户申请access_token的时候，你只要根据传递过来的request_token去数据库里找到前面生成的access_token，把两个值返回给客户端就OK了。</p>
<p>现在，认证过程已经完成了，用户可以使用你的数据接口了。</p>
<p>示例中也为你准备了一个echoHandler的测试代码，但是，悲剧的是，这个代码并不包含任何身份验证的过程，是个完全干净的独立的handler，不知道开发团队提供这样一个示例代码的意义何在？</p>
<p>你可以自己新建一个echoHandler.ashx（或者随便什么名字），你需要以前面的OAuth.Net.ServiceProvider.AccessTokenHandler作为模板开始你的工作。将它的代码完整的复制到你的handler文件里面来，慢慢修改。首先，ParseParamters里，检查参数完整性，把VerifierParameter删掉，同样的把this.CheckVerifier(context, requestContext);也删掉，verifier参数只在申请access_token的时候才会出现。然后把parameters.AllowOnly检查过程删掉，原因很简单。然后修改SetRequestToken函数，它的代码是通过token参数找到request_token对象，把它改成通过token参数读取你的数据库里的access_token对象（当然，同时把它关联的用户的信息也读出来），然后，把IssueAccessToken函数的过程改成你的业务处理过程，比如输出个用户详细信息啥的。至于输出成json还是xml，就看你的个人喜好和用户的要求了。每个业务处理的handler的返回格式实际是无固定格式的，因为这毕竟是跟你自己的网站业务紧密相关的。</p>
<p>这个时候，你的网站的标准的RESTful格式的api接口就准备好了，如果用户有开发新浪微博客户端的经验，同样的代码拿过来稍微改改就能完成你的网站的OAuth认证，然后就可以方便的调用你的其它的数据接口了。（不过新浪现在已经开始推广OAuth2.0接口，而oauth-dot-net类库目前还没有提供2.0相关的验证方法。如果你有兴趣，可以自己实现一下2.0的交换参数的过程，然后，告诉我一下。</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F714-20111202.html&title=asp.net%E5%AE%9E%E7%8E%B0OAuth%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8E%A5%E5%8F%A3" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/714-20111202.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone开发中两个UIViewController间传递变量和调用方法的处理</title>
		<link>http://www.unfish.net/archives/710-20111019.html</link>
		<comments>http://www.unfish.net/archives/710-20111019.html#comments</comments>
		<pubDate>Wed, 19 Oct 2011 06:42:34 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[IPhone]]></category>

		<guid isPermaLink="false">http://www.unfish.net/?p=710</guid>
		<description><![CDATA[写这样的文章容易露怯，因为我不知道什么是业界真正规范的做法，这里写的只是自己认为比较简单易用的最佳实践，写出来恐怕会被大牛笑话，也影响自己的多年码农的形象。不过方法越多，新人越难掌握，所以提示一下也是好的，欢迎探讨。 其实这个题目里包含了两个东西，传递变量和调用方法，这两个的处理是不一样的，因为之前看了CocoaChina上的那篇文章是混在一起写的，所以这里也放在一篇文章里写。 变量传递 通常就是指要在一个ViewController里面读取到另外一个ViewController中的变量，比如弹出一个新界面的时候，需要知道原来的界面当前的SegmentControl现在选中的是哪个状态之类的，当然也有更复杂的，全局通用变量的处理也在这个范畴内，很多View都要用到同一个变量，比如当前登录用户的身份。 这里最简单的方式有两个，一是通过文件方式传递，当然，你不用自己实现读写文件，只要使用NSUserDefaults就可以了，它里面可以放进任何能够被序列化的简单变量，全局都可以读取，因为这个类本身是提供单例模式访问的，只要在任何地方修改了某个key对应的value，调用一下同步函数，这个值就被写入磁盘了，在任何其它的地方重新读取这个key，就能取到最新的value。而且这个值是永久保存的，程序重启也没关系。 第二个方法是通过appDelegate，它也是全局的，本身提供单例模式访问，所以不必担心访问到同一个类不同对象的不同变量值。只要你在AppDelegate.h里面定义的变量，在任何ViewController里面，获取[[UIAppcation sharedApplication] delegate]，再调用它的该变量的名字就可以了，取值或者赋值都无所谓，该变量对整个应用程序都是可以访问的。系统提供的CoreData模板中Context的访问方式就是这样实现的。 还有第三个方式，跟下面的方法调用一起说。 方法调用 方法调用就是指在一个ViewController里面需要调用另外一个ViewController里面的某个方法，事件也可以归为这一类，比如当前端的这个ViewController完成了处理任务需要关闭的时候，要求它后面即将需要显示出来的那个ViewController刷新自己的页面，以便把最新的数据显示出来。 实现事件调用的办法最标准的是delegate。定义一个新的delegate接口，里面是某个方法或者事件的定义，不包含具体实现。被调用一方的ViewController实现该接口，并实现该方法的具体内容。调用一方需要声明该delegate类型的一个变量，在需要调用的时候，直接把这个变量当成被调用的那个Controller类来用，比如myDelegate.DoXXX(); 这样做了之后，在调用方的ViewController实例化的时候，需要将被调用方的实例赋值给它的myDelegate变量才行，要不然它就是个空指针了。这种实现方式之所以标准，是因为对调用方没有约束，这个类可以方便的重用，也就是松耦合设计，以后其它的项目可以把这个类复制过去，一行不用改，只要保证有别的类实现了这个delegate并被传递进来就可以了。 另外一种简化的方法是，直接将被调用方的类定义成调用方的一个变量。比如在ChildController里面定义一个变量RootViewController myRoot;然后实例化该类的时候直接child.myRoot=self;这时候在child内部，对myRoot这个变量是可以为所欲为的，它里面的方法你可以随便调用，包括刷新它自己的界面，或者改变某个控件的状态和值，或者改变它里面的某个变量的值（这就是上面说的传递变量的第三种方法，仅限于两个Controller之间），都是可以的。不过这时候就是紧耦合了，这个ChildController不方便拿到别的项目里去用，因为它里面把RootViewController的方法给写死了。不过如果你也没打算以后在别的项目里重用它，这样做可以省掉不少代码。不过同时你还得小心被你调用的那个rootController，此时有没有被系统给释放掉。如果在child里面定义变量或者传递变量过来的时候把它retain了，一般不会出现这种问题。 OK，就说这么多。]]></description>
			<content:encoded><![CDATA[<p>写这样的文章容易露怯，因为我不知道什么是业界真正规范的做法，这里写的只是自己认为比较简单易用的最佳实践，写出来恐怕会被大牛笑话，也影响自己的多年码农的形象。不过方法越多，新人越难掌握，所以提示一下也是好的，欢迎探讨。</p>
<p>其实这个题目里包含了两个东西，传递变量和调用方法，这两个的处理是不一样的，因为之前看了CocoaChina上的那篇文章是混在一起写的，所以这里也放在一篇文章里写。</p>
<p><strong>变量传递</strong></p>
<p>通常就是指要在一个ViewController里面读取到另外一个ViewController中的变量，比如弹出一个新界面的时候，需要知道原来的界面当前的SegmentControl现在选中的是哪个状态之类的，当然也有更复杂的，全局通用变量的处理也在这个范畴内，很多View都要用到同一个变量，比如当前登录用户的身份。</p>
<p>这里最简单的方式有两个，一是通过文件方式传递，当然，你不用自己实现读写文件，只要使用NSUserDefaults就可以了，它里面可以放进任何能够被序列化的简单变量，全局都可以读取，因为这个类本身是提供单例模式访问的，只要在任何地方修改了某个key对应的value，调用一下同步函数，这个值就被写入磁盘了，在任何其它的地方重新读取这个key，就能取到最新的value。而且这个值是永久保存的，程序重启也没关系。</p>
<p>第二个方法是通过appDelegate，它也是全局的，本身提供单例模式访问，所以不必担心访问到同一个类不同对象的不同变量值。只要你在AppDelegate.h里面定义的变量，在任何ViewController里面，获取[[UIAppcation sharedApplication] delegate]，再调用它的该变量的名字就可以了，取值或者赋值都无所谓，该变量对整个应用程序都是可以访问的。系统提供的CoreData模板中Context的访问方式就是这样实现的。</p>
<p>还有第三个方式，跟下面的方法调用一起说。</p>
<p><strong>方法调用</strong></p>
<p>方法调用就是指在一个ViewController里面需要调用另外一个ViewController里面的某个方法，事件也可以归为这一类，比如当前端的这个ViewController完成了处理任务需要关闭的时候，要求它后面即将需要显示出来的那个ViewController刷新自己的页面，以便把最新的数据显示出来。</p>
<p>实现事件调用的办法最标准的是delegate。定义一个新的delegate接口，里面是某个方法或者事件的定义，不包含具体实现。被调用一方的ViewController实现该接口，并实现该方法的具体内容。调用一方需要声明该delegate类型的一个变量，在需要调用的时候，直接把这个变量当成被调用的那个Controller类来用，比如myDelegate.DoXXX(); 这样做了之后，在调用方的ViewController实例化的时候，需要将被调用方的实例赋值给它的myDelegate变量才行，要不然它就是个空指针了。这种实现方式之所以标准，是因为对调用方没有约束，这个类可以方便的重用，也就是松耦合设计，以后其它的项目可以把这个类复制过去，一行不用改，只要保证有别的类实现了这个delegate并被传递进来就可以了。</p>
<p>另外一种简化的方法是，直接将被调用方的类定义成调用方的一个变量。比如在ChildController里面定义一个变量RootViewController myRoot;然后实例化该类的时候直接child.myRoot=self;这时候在child内部，对myRoot这个变量是可以为所欲为的，它里面的方法你可以随便调用，包括刷新它自己的界面，或者改变某个控件的状态和值，或者改变它里面的某个变量的值（这就是上面说的传递变量的第三种方法，仅限于两个Controller之间），都是可以的。不过这时候就是紧耦合了，这个ChildController不方便拿到别的项目里去用，因为它里面把RootViewController的方法给写死了。不过如果你也没打算以后在别的项目里重用它，这样做可以省掉不少代码。不过同时你还得小心被你调用的那个rootController，此时有没有被系统给释放掉。如果在child里面定义变量或者传递变量过来的时候把它retain了，一般不会出现这种问题。</p>
<p>OK，就说这么多。</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F710-20111019.html&title=iPhone%E5%BC%80%E5%8F%91%E4%B8%AD%E4%B8%A4%E4%B8%AAUIViewController%E9%97%B4%E4%BC%A0%E9%80%92%E5%8F%98%E9%87%8F%E5%92%8C%E8%B0%83%E7%94%A8%E6%96%B9%E6%B3%95%E7%9A%84%E5%A4%84%E7%90%86" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/710-20111019.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WikiOfflineConverter Help</title>
		<link>http://www.unfish.net/archives/693-20110709.html</link>
		<comments>http://www.unfish.net/archives/693-20110709.html#comments</comments>
		<pubDate>Sat, 09 Jul 2011 05:11:07 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[生活杂谈]]></category>

		<guid isPermaLink="false">http://www.unfish.net/?p=693</guid>
		<description><![CDATA[WikiOffline 是一款运行在iOS上的可以让你查看完整离线维基百科文件的App，不过使用内容之前需要将下载的维基离线dump文件转换一下格式，而且它的转换程序是windows的，写个简要说明在这儿。 1. Use iTunes File Share to get the install files. Copy these two files to your windows. &#160; 2. Run setup.exe to Install it. 3. Run the WikiOfflineConverter tool. 4. Click the link, Select the wiki language you want, and download the pages-articles.xml.bz2 file. 5. When download finished, use convert tool browse and [...]]]></description>
			<content:encoded><![CDATA[<p>WikiOffline 是一款运行在iOS上的可以让你查看完整离线维基百科文件的App，不过使用内容之前需要将下载的维基离线dump文件转换一下格式，而且它的转换程序是windows的，写个简要说明在这儿。</p>
<p>1. Use iTunes File Share to get the install files. Copy these two files to your windows.</p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630131615429.png"><img class="alignnone size-full wp-image-694" title="20110630131615429" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630131615429.png" alt="" width="809" height="425" /></a></p>
<p>&nbsp;</p>
<p>2. Run setup.exe to Install it.</p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630124220698.png"><img class="alignnone size-full wp-image-695" title="20110630124220698" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630124220698.png" alt="" width="503" height="410" /></a></p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630124247550.png"><img class="alignnone size-full wp-image-696" title="20110630124247550" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630124247550.png" alt="" width="503" height="410" /></a></p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630124544027.png"><img class="alignnone size-full wp-image-698" title="20110630124544027" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630124544027.png" alt="" width="111" height="154" /></a></p>
<p>3. Run the WikiOfflineConverter tool.</p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630125044308.png"><img class="alignnone size-full wp-image-699" title="20110630125044308" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630125044308.png" alt="" width="409" height="243" /></a></p>
<p>4. Click the link, Select the wiki language you want, and download the pages-articles.xml.bz2 file.</p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630125404867.png"><img class="alignnone size-full wp-image-700" title="20110630125404867" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630125404867.png" alt="" width="555" height="462" /></a></p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630125441679.png"><img class="alignnone size-full wp-image-701" title="20110630125441679" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630125441679.png" alt="" width="748" height="108" /></a></p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630125524165.png"><img class="alignnone size-full wp-image-702" title="20110630125524165" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630125524165.png" alt="" width="485" height="300" /></a></p>
<p>5. When download finished, use convert tool browse and select it. Then click Convert button.</p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630125616132.png"><img class="alignnone size-full wp-image-703" title="20110630125616132" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630125616132.png" alt="" width="409" height="243" /></a></p>
<p>6. Go to the install folder find the two files, upload them to app&#8217;s document folder use itunes&#8217;s file share.</p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630130051752.png"><img class="alignnone size-full wp-image-704" title="20110630130051752" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630130051752.png" alt="" width="209" height="161" /></a></p>
<p><a href="http://www.unfish.net/wp-content/uploads/2011/06/20110630131631525.png"><img class="alignnone size-full wp-image-705" title="20110630131631525" src="http://www.unfish.net/wp-content/uploads/2011/06/20110630131631525.png" alt="" width="809" height="425" /></a></p>
<p>7. Now, you can open the app in your iphone or ipad and search and read it.</p>
<p>最后附上我已经转换完成的最新的6月28日版中文离线dump文件：http://u.115.com/file/e6vjyqox 大家直接下载，可以省下转换的时间了，因为转换确实很慢。</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F693-20110709.html&title=WikiOfflineConverter+Help" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/693-20110709.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Phone 7开发工具安装过程真痛苦</title>
		<link>http://www.unfish.net/archives/691-20110213.html</link>
		<comments>http://www.unfish.net/archives/691-20110213.html#comments</comments>
		<pubDate>Sun, 13 Feb 2011 11:44:42 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[技术文章]]></category>

		<guid isPermaLink="false">http://www.unfish.net/?p=691</guid>
		<description><![CDATA[安装了一下WP7的开发环境，问题多多。 先安装了VS2010旗舰版，再安装开发工具，提示不支持win2008，修改了安装文件跳过去，开始自动下载了359M的安装文件，结果安装到第9/10步的时候卡死，到进程里kill掉一个补丁的进程，安装程序继续，但是最后一步仍然卡住，不停的跳出存在另一个安装进程的对话框。最后kill掉整个安装进程，重新开始安装，有三个选项，使用第一个选项“安装遗漏的组件”，自动开始安装前面被跳过的最后一个组件，最后终于安装完成了。 然后安装Update1补丁，进程里总是有个xde.exe占满CPU，kill掉了几次都跳不过去，索性不管它了，几分钟后安装成功。 然后再安装VS2010的一个补丁，跟上一个问题一样。 全部安装成功以后，发现开始菜单里除了原来的VS2010的旗舰版之外，又多了个VS2010 Express for Windows Phone，这破组件不会自动识别版本高低的啊？ 唯一舍得安慰的是，创建了一个Hello world项目以后，点击运行，顺利的启动了模拟器，把程序跑起来了。不过，这模拟器咋这么慢呢？]]></description>
			<content:encoded><![CDATA[<p>安装了一下WP7的开发环境，问题多多。</p>
<p>先安装了VS2010旗舰版，再安装开发工具，提示不支持win2008，修改了安装文件跳过去，开始自动下载了359M的安装文件，结果安装到第9/10步的时候卡死，到进程里kill掉一个补丁的进程，安装程序继续，但是最后一步仍然卡住，不停的跳出存在另一个安装进程的对话框。最后kill掉整个安装进程，重新开始安装，有三个选项，使用第一个选项“安装遗漏的组件”，自动开始安装前面被跳过的最后一个组件，最后终于安装完成了。</p>
<p>然后安装Update1补丁，进程里总是有个xde.exe占满CPU，kill掉了几次都跳不过去，索性不管它了，几分钟后安装成功。</p>
<p>然后再安装VS2010的一个补丁，跟上一个问题一样。</p>
<p>全部安装成功以后，发现开始菜单里除了原来的VS2010的旗舰版之外，又多了个VS2010 Express for Windows Phone，这破组件不会自动识别版本高低的啊？</p>
<p>唯一舍得安慰的是，创建了一个Hello world项目以后，点击运行，顺利的启动了模拟器，把程序跑起来了。不过，这模拟器咋这么慢呢？</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F691-20110213.html&title=Windows+Phone+7%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%E5%AE%89%E8%A3%85%E8%BF%87%E7%A8%8B%E7%9C%9F%E7%97%9B%E8%8B%A6" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/691-20110213.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parallels Desktop VS Virtual Box for Mac</title>
		<link>http://www.unfish.net/archives/686-20100901.html</link>
		<comments>http://www.unfish.net/archives/686-20100901.html#comments</comments>
		<pubDate>Wed, 01 Sep 2010 08:57:17 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[技术文章]]></category>

		<guid isPermaLink="false">http://www.unfish.net/?p=686</guid>
		<description><![CDATA[换了新的Macbook Pro以后，犹豫两三还是决定不装双系统了，日常的windows的工作就用虚拟机来搞定吧，比较安全，而且切换起来比较快，可以结合两个操作系统的软件优势，协作互补。鉴于以前在windows上一直使用virtual box，于是在Mac也延续使用下去，把原来windows上的虚拟机文件拷过来，打不开，新建虚拟机，使用原来的vdi虚拟硬盘，没有问题，一切正常。但是用了没几天，性能问题实在是有点受不了。整个系统就是反应慢一拍，浪费了这i7的CPU了，而且在virtual box的设置里面设了两个CPU，结果进系统看还是只能看到一个CPU。（virtual box 3.2.8，Guest系统是windows 2003 server）。另外接USB外接硬盘问题比较严重，必须在关机状态下添加到虚拟机的USB设备里，启动后插入才能自动连接到虚拟机里面，新拿过来的硬盘就没有连接到虚拟系统里去。而Mac系统又不能读写NTFS的外接硬盘。（还没装ntfs-3g）。另外切换全屏的过程中还崩溃了几次。 以前也在Mac下用了一阵子vmware fusion 3，相对来说要方便一些，每次连接USB设备都会自动询问是连接到主机还是虚拟机，整体的性能也算不错，但是有一套经常使用的virtual box的虚拟机，里面安装的环境比较复杂，涉及到另一个公司的内部VPN，不太好迁移，而vbox和vmware又不能同时启动，会导致其中一个直接挂掉，所以这次也没有办法把完整的环境切换到vmware上面来。 现在实在是受不了vbox的性能了，于是搜索了一下google，发现parallels desktop for mac 5的口碑不错，论坛上普遍评论其性能要高过vmware，甚至可以玩3d游戏，虽然最多只有20帧。不过这个软件似乎破解起来不太容易。官网直接下载，可以申请10天的试用序列号。 parallels的第一大优势，是导入其它虚拟机系统。virtual box和vmware都支持。选择了vbox的虚拟机的xml文件以后，提示文件格式不正确，可能还不能兼容这么高版本的，于是直接选择它的vdi虚拟硬盘文件，分析后正确的得出其中安装的操作系统版本，开始转换，完成后自动创建了对应的虚拟机系统，直接启动就可以了。第一次启动会花点时间进行配置，配置过程完全透明，在这个过程中，后台悄悄完成了虚拟系统中的Tools驱动的安装。启动后还自动把开始菜单里面可用的程序添加到了Dock上面一个文件夹，随时可以在Mac里打开windows里面的程序，再配置它默认的透明模式，windows程序直接将窗口完整的显示在Mac界面下，与Mac自己的程序毫无二致。不过我还是比较习惯虚拟机用窗口模式。如果要转换的虚拟机有多个硬盘，需要分开转换，转换完系统盘以后，再转换第二硬盘文件，分析后会提示该文件里面没有安装操作系统，是否转换成自己格式的硬盘文件，选是，转换完成后添加到前面的虚拟机配置里面就可以了。不过原来vbox的固定分配大小的虚拟机文件转换后成了动态大小。 parallels的第二大优势，就是运行速度。它终于可以正常的使用多CPU了，分配了三个CPU给虚拟系统，可以正常识别及使用，整体的运行效率高了一大截，磁盘效率也没有觉得比原来低，甚至比vbox的固定分配大小的硬盘还要快（打开我的电脑的直观感受）。根据网友测试的数据，其虚拟系统的各项得分并不比装双系统差。而且号称完美支持win7的aero特效，不管是窗口模式还是透明模式。在设置项中有多个选项用来提升虚拟机的性能，或者平衡与主系统的性能。 有这两条，已经足以让我痛快的卸载掉vmware和virtual box了。不过貌似有个缺点，虚拟系统里面的CPU占用率明明很低，但是在Mac系统下看虚拟机的CPU占用却很高，导致CPU温度很高，试一下改成只分配两个CPU会不会好一些。]]></description>
			<content:encoded><![CDATA[<p>换了新的Macbook Pro以后，犹豫两三还是决定不装双系统了，日常的windows的工作就用虚拟机来搞定吧，比较安全，而且切换起来比较快，可以结合两个操作系统的软件优势，协作互补。鉴于以前在windows上一直使用virtual box，于是在Mac也延续使用下去，把原来windows上的虚拟机文件拷过来，打不开，新建虚拟机，使用原来的vdi虚拟硬盘，没有问题，一切正常。但是用了没几天，性能问题实在是有点受不了。整个系统就是反应慢一拍，浪费了这i7的CPU了，而且在virtual box的设置里面设了两个CPU，结果进系统看还是只能看到一个CPU。（virtual box 3.2.8，Guest系统是windows 2003 server）。另外接USB外接硬盘问题比较严重，必须在关机状态下添加到虚拟机的USB设备里，启动后插入才能自动连接到虚拟机里面，新拿过来的硬盘就没有连接到虚拟系统里去。而Mac系统又不能读写NTFS的外接硬盘。（还没装ntfs-3g）。另外切换全屏的过程中还崩溃了几次。</p>
<p>以前也在Mac下用了一阵子vmware fusion 3，相对来说要方便一些，每次连接USB设备都会自动询问是连接到主机还是虚拟机，整体的性能也算不错，但是有一套经常使用的virtual box的虚拟机，里面安装的环境比较复杂，涉及到另一个公司的内部VPN，不太好迁移，而vbox和vmware又不能同时启动，会导致其中一个直接挂掉，所以这次也没有办法把完整的环境切换到vmware上面来。</p>
<p>现在实在是受不了vbox的性能了，于是搜索了一下google，发现parallels desktop for mac 5的口碑不错，论坛上普遍评论其性能要高过vmware，甚至可以玩3d游戏，虽然最多只有20帧。不过这个软件似乎破解起来不太容易。官网直接下载，可以申请10天的试用序列号。</p>
<p>parallels的第一大优势，是导入其它虚拟机系统。virtual box和vmware都支持。选择了vbox的虚拟机的xml文件以后，提示文件格式不正确，可能还不能兼容这么高版本的，于是直接选择它的vdi虚拟硬盘文件，分析后正确的得出其中安装的操作系统版本，开始转换，完成后自动创建了对应的虚拟机系统，直接启动就可以了。第一次启动会花点时间进行配置，配置过程完全透明，在这个过程中，后台悄悄完成了虚拟系统中的Tools驱动的安装。启动后还自动把开始菜单里面可用的程序添加到了Dock上面一个文件夹，随时可以在Mac里打开windows里面的程序，再配置它默认的透明模式，windows程序直接将窗口完整的显示在Mac界面下，与Mac自己的程序毫无二致。不过我还是比较习惯虚拟机用窗口模式。如果要转换的虚拟机有多个硬盘，需要分开转换，转换完系统盘以后，再转换第二硬盘文件，分析后会提示该文件里面没有安装操作系统，是否转换成自己格式的硬盘文件，选是，转换完成后添加到前面的虚拟机配置里面就可以了。不过原来vbox的固定分配大小的虚拟机文件转换后成了动态大小。</p>
<p>parallels的第二大优势，就是运行速度。它终于可以正常的使用多CPU了，分配了三个CPU给虚拟系统，可以正常识别及使用，整体的运行效率高了一大截，磁盘效率也没有觉得比原来低，甚至比vbox的固定分配大小的硬盘还要快（打开我的电脑的直观感受）。根据网友测试的数据，其虚拟系统的各项得分并不比装双系统差。而且号称完美支持win7的aero特效，不管是窗口模式还是透明模式。在设置项中有多个选项用来提升虚拟机的性能，或者平衡与主系统的性能。</p>
<p>有这两条，已经足以让我痛快的卸载掉vmware和virtual box了。不过貌似有个缺点，虚拟系统里面的CPU占用率明明很低，但是在Mac系统下看虚拟机的CPU占用却很高，导致CPU温度很高，试一下改成只分配两个CPU会不会好一些。</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F686-20100901.html&title=Parallels+Desktop+VS+Virtual+Box+for+Mac" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/686-20100901.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>怎么就找不着一个好用的邮件客户端呢？</title>
		<link>http://www.unfish.net/archives/684-20100826.html</link>
		<comments>http://www.unfish.net/archives/684-20100826.html#comments</comments>
		<pubDate>Thu, 26 Aug 2010 08:52:48 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[技术文章]]></category>

		<guid isPermaLink="false">http://www.unfish.net/?p=684</guid>
		<description><![CDATA[今天foxmail用着用着，突然挂了，其中一个账号所有的邮件标题列表变成了空白，但是点击以后正文还能显示出来，就是列表里面每一行都是空白的，发件人，标题，时间，全部是空白的。其它账号没有受影响，重启N次foxmail无效，于是又想换个客户端玩玩了。 先跑到dreammail的官网，网站很漂亮，下载完客户端，安装，启动，界面上一片空白，没有一个文字。到官方QQ群里询问，答我装的不完整。卸载掉。 然后跑到ThunderBird的官网，下载，安装完，启动，没问题，界面还挺漂亮，建账号，输入126邮箱的地址，自动开始探测服务器，结果测试出来是imap服务器，然后收邮件，总是报服务器连接错误，我想改成pop3地址，结果改了以后说该地址上没有找到imap协议，我想把协议改成pop3，没找着……。卸载掉。 然后跑到koomail的官网，网站比较简陋，不过程序的功能写的蛮强的。下载，安装，启动，询问是要新建账号还是导入别的客户端里面的账号，里面可以选foxmail，选中，自动探测到foxmail所在的路径，太赞了，开始导入。导入过程有点慢，不过有详细的进度提示，邮件箱的大小，邮件数。眼看就全部导完了（三个账号，加起来大概一万多邮件），程序崩溃自己退出了。然后去桌面上双击图标，启动不起来了。点了很多很多次，程序都启动不起来。卸载掉。 还有别的办法吗？难道一定要用Outlook？一来没有多账号分离的管理，二来程序太臃肿，而且，foxmail的邮件没办法导进去（有办法，只是相当麻烦）。放弃。 重启了一下电脑，foxmail里的邮件列表又恢复了，只是字体不太正常。唉，将就着用吧。说不定哪天又崩了。]]></description>
			<content:encoded><![CDATA[<p>今天foxmail用着用着，突然挂了，其中一个账号所有的邮件标题列表变成了空白，但是点击以后正文还能显示出来，就是列表里面每一行都是空白的，发件人，标题，时间，全部是空白的。其它账号没有受影响，重启N次foxmail无效，于是又想换个客户端玩玩了。</p>
<p>先跑到dreammail的官网，网站很漂亮，下载完客户端，安装，启动，界面上一片空白，没有一个文字。到官方QQ群里询问，答我装的不完整。卸载掉。</p>
<p>然后跑到ThunderBird的官网，下载，安装完，启动，没问题，界面还挺漂亮，建账号，输入126邮箱的地址，自动开始探测服务器，结果测试出来是imap服务器，然后收邮件，总是报服务器连接错误，我想改成pop3地址，结果改了以后说该地址上没有找到imap协议，我想把协议改成pop3，没找着……。卸载掉。</p>
<p>然后跑到koomail的官网，网站比较简陋，不过程序的功能写的蛮强的。下载，安装，启动，询问是要新建账号还是导入别的客户端里面的账号，里面可以选foxmail，选中，自动探测到foxmail所在的路径，太赞了，开始导入。导入过程有点慢，不过有详细的进度提示，邮件箱的大小，邮件数。眼看就全部导完了（三个账号，加起来大概一万多邮件），程序崩溃自己退出了。然后去桌面上双击图标，启动不起来了。点了很多很多次，程序都启动不起来。卸载掉。</p>
<p>还有别的办法吗？难道一定要用Outlook？一来没有多账号分离的管理，二来程序太臃肿，而且，foxmail的邮件没办法导进去（有办法，只是相当麻烦）。放弃。</p>
<p>重启了一下电脑，foxmail里的邮件列表又恢复了，只是字体不太正常。唉，将就着用吧。说不定哪天又崩了。</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F684-20100826.html&title=%E6%80%8E%E4%B9%88%E5%B0%B1%E6%89%BE%E4%B8%8D%E7%9D%80%E4%B8%80%E4%B8%AA%E5%A5%BD%E7%94%A8%E7%9A%84%E9%82%AE%E4%BB%B6%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%91%A2%EF%BC%9F" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/684-20100826.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何看待唐骏的学历门</title>
		<link>http://www.unfish.net/archives/681-20100712.html</link>
		<comments>http://www.unfish.net/archives/681-20100712.html#comments</comments>
		<pubDate>Mon, 12 Jul 2010 13:15:31 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[业界动态]]></category>
		<category><![CDATA[唐骏]]></category>
		<category><![CDATA[学历门]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/681-20100712.html</guid>
		<description><![CDATA[说实话，唐骏是我的偶像。 9年前大三的时候就参加微软的招聘会，第一次听唐骏的演讲，佩服的五体投地。第二年大四毕业又一次参加微软的招聘会，还是唐骏的演讲，还是同样的内容。 后来唐骏离开微软，加盟盛大，然后离开盛大，加盟新华都，这些都不影响我对他的崇拜。他上所有的节目，包括咏乐会，讲来讲去还是当年演讲的那几件值得骄傲的事。 如今突然搞出来的学历门，基本上已经毫无悬念的被证实了。 其实，学历的真假我并不怎么关心，如果他真的假造学历，这可能会影响他的人品，但是并不影响我对他的崇拜。作为一个软件行业从业人员，我更加关心的是他所描述的经历中，进入微软半年后自己研发出windows多语言化的技术从而一步迈入微软的中层管理者这一段经历是不是真的？他一个人带队来到中国，把微软中国支持中心最终发展成为微软亚洲支持中心，是不是真的？他从微软离职后，Bill Gates给他的微软有史以来唯一的一个终身荣誉总裁是不是真的？ 如果这些都是真的，那么，学历真的不是一个很重要的东西，只能说，不管有没有博士学历，他的能力确实是摆在那里的。 如果这些都是假的，那么，我真的不知道该说什么好了。中国的媒体都是白痴吗？]]></description>
			<content:encoded><![CDATA[</p>
<p>说实话，唐骏是我的偶像。 </p>
<p>9年前大三的时候就参加微软的招聘会，第一次听唐骏的演讲，佩服的五体投地。第二年大四毕业又一次参加微软的招聘会，还是唐骏的演讲，还是同样的内容。 </p>
<p>后来唐骏离开微软，加盟盛大，然后离开盛大，加盟新华都，这些都不影响我对他的崇拜。他上所有的节目，包括咏乐会，讲来讲去还是当年演讲的那几件值得骄傲的事。 </p>
<p>如今突然搞出来的学历门，基本上已经毫无悬念的被证实了。 </p>
<p>其实，学历的真假我并不怎么关心，如果他真的假造学历，这可能会影响他的人品，但是并不影响我对他的崇拜。作为一个软件行业从业人员，我更加关心的是他所描述的经历中，进入微软半年后自己研发出windows多语言化的技术从而一步迈入微软的中层管理者这一段经历是不是真的？他一个人带队来到中国，把微软中国支持中心最终发展成为微软亚洲支持中心，是不是真的？他从微软离职后，Bill Gates给他的微软有史以来唯一的一个终身荣誉总裁是不是真的？ </p>
<p>如果这些都是真的，那么，学历真的不是一个很重要的东西，只能说，不管有没有博士学历，他的能力确实是摆在那里的。 </p>
<p>如果这些都是假的，那么，我真的不知道该说什么好了。中国的媒体都是白痴吗？</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F681-20100712.html&title=%E5%A6%82%E4%BD%95%E7%9C%8B%E5%BE%85%E5%94%90%E9%AA%8F%E7%9A%84%E5%AD%A6%E5%8E%86%E9%97%A8" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/681-20100712.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone 4的国内乱象</title>
		<link>http://www.unfish.net/archives/680-20100702.html</link>
		<comments>http://www.unfish.net/archives/680-20100702.html#comments</comments>
		<pubDate>Fri, 02 Jul 2010 05:12:53 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[生活杂谈]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/680-20100702.html</guid>
		<description><![CDATA[苹果公司在6月7号正式发布iPhone 4，6月15号开始在线预定，6月24号五个国家正式上市，从这一天起，全世界人民见识到了什么叫做成功的营销。 根据官方数据，前三天五个国家的iPhone 4销量达到了170万台，如果不是因为各地全部出现了缺货，恐怕还远远不止这个数字。所有的在线购买的发货周期被迫推迟为三周以后，各地均出现了排队三五个小时以后被告知本店只有十几台机器大家请回这样的事情。在这么严峻的形式下，我们的水货商仍然成功的弄了点机器进来，每个大城市的大商家，可售数量基本都在个位数，因此，又让我们见识到了什么叫奇货可居。北京的水货iPhone 4成功的以28000卖出一台。目前，所有现货均报价12000以上，所有预定均没有到货日期。 为什么呢？ 说到底，它还只是一款手机而已，尤其是相对于自家的3GS来说，除了各个硬件参数的增加，唯一的功能性增强就是前后摄像头和视频通话功能。 为什么呢？ 说到底，哥买的不是手机，是缺货！ 全北京就这么几台，全北京有点新潮意识的人都能认的出来这是什么东西，所以，不管它是一部手机，或者只是一个钥匙串，值钱的是它的知名度，和它的稀缺。对于肯出2万8的人来说，你再加价7000对他也没有任何实际意义，区别只是一个数字而已。 再过两个月，上百万台水货iPhone 4进入中国的时候，这些人可能已经寻找到了新的彰显方式，他手里的iPhone 4，可能因为不好用已经被压箱底或者送给酒吧小mm了。 所以说中国人的钱好赚，当然，值得庆幸的是，这笔钱仍然在中国人的口袋里，并没有被老外赚了去。你需要造一件全中国都知道却都得不到的东西，它的价格和价值就是完全分离的了，随便你定多高的利润率。 iPhone论坛上每天都有一群穷酸的人在抱怨，在辱骂，说花2W买iPhone的人是SX，是脑袋被枪打了，实际上，他们只是自己还没有到那个对钱完全不敏感的程度而已。如果水货商不把价钱定这么高，而是平价出售，我想中关村一定会出现几个人为了抢一台iPhone打起来的情况。 当供求出现严重不平衡的时候，价格就会脱离价值往上走，在这个过程中需求的数量就会逐步减少，一直达到供需平衡，整个生态链才会和谐下来。 房价亦如此。]]></description>
			<content:encoded><![CDATA[<p>苹果公司在6月7号正式发布iPhone 4，6月15号开始在线预定，6月24号五个国家正式上市，从这一天起，全世界人民见识到了什么叫做成功的营销。</p>
<p>根据官方数据，前三天五个国家的iPhone 4销量达到了170万台，如果不是因为各地全部出现了缺货，恐怕还远远不止这个数字。所有的在线购买的发货周期被迫推迟为三周以后，各地均出现了排队三五个小时以后被告知本店只有十几台机器大家请回这样的事情。在这么严峻的形式下，我们的水货商仍然成功的弄了点机器进来，每个大城市的大商家，可售数量基本都在个位数，因此，又让我们见识到了什么叫奇货可居。北京的水货iPhone 4成功的以28000卖出一台。目前，所有现货均报价12000以上，所有预定均没有到货日期。</p>
<p>为什么呢？</p>
<p>说到底，它还只是一款手机而已，尤其是相对于自家的3GS来说，除了各个硬件参数的增加，唯一的功能性增强就是前后摄像头和视频通话功能。</p>
<p>为什么呢？</p>
<p>说到底，哥买的不是手机，是缺货！</p>
<p>全北京就这么几台，全北京有点新潮意识的人都能认的出来这是什么东西，所以，不管它是一部手机，或者只是一个钥匙串，值钱的是它的知名度，和它的稀缺。对于肯出2万8的人来说，你再加价7000对他也没有任何实际意义，区别只是一个数字而已。</p>
<p>再过两个月，上百万台水货iPhone 4进入中国的时候，这些人可能已经寻找到了新的彰显方式，他手里的iPhone 4，可能因为不好用已经被压箱底或者送给酒吧小mm了。</p>
<p>所以说中国人的钱好赚，当然，值得庆幸的是，这笔钱仍然在中国人的口袋里，并没有被老外赚了去。你需要造一件全中国都知道却都得不到的东西，它的价格和价值就是完全分离的了，随便你定多高的利润率。</p>
<p>iPhone论坛上每天都有一群穷酸的人在抱怨，在辱骂，说花2W买iPhone的人是SX，是脑袋被枪打了，实际上，他们只是自己还没有到那个对钱完全不敏感的程度而已。如果水货商不把价钱定这么高，而是平价出售，我想中关村一定会出现几个人为了抢一台iPhone打起来的情况。</p>
<p>当供求出现严重不平衡的时候，价格就会脱离价值往上走，在这个过程中需求的数量就会逐步减少，一直达到供需平衡，整个生态链才会和谐下来。</p>
<p>房价亦如此。</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F680-20100702.html&title=iPhone+4%E7%9A%84%E5%9B%BD%E5%86%85%E4%B9%B1%E8%B1%A1" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/680-20100702.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>玩具总动员3，触动8090的那根心弦</title>
		<link>http://www.unfish.net/archives/677-20100623.html</link>
		<comments>http://www.unfish.net/archives/677-20100623.html#comments</comments>
		<pubDate>Wed, 23 Jun 2010 04:59:04 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[影视杂谈]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/677-20100623.html</guid>
		<description><![CDATA[对电影本身来说，是不是3D完全不重要，这部跨越13年的曾经作为三维动画开创者的电影，来到今天，取胜的并不是它的技术和画面。人物角色基本没变（不知为何少了胡迪的另一半，牧羊姑娘，导致胡迪只能为友情而战，爱情戏全部给了巴斯光年），配音都没变，而电影的核心-剧情，依然完美。完美，真的。情节紧凑，丝毫没有多余，电影高潮部分超过半小时，跌宕起伏，搞笑手段完全超乎你的想像，每当人们以为高潮部分已经结束的时候，突然峰回路转，变得更加紧张刺激。 电影在高潮部分结束后的分别场面，才是真正献给80、90后的礼物。17岁的男孩面对从小陪伴自己长大，以后却不再适合在一起的玩具，表露出真心的不舍和无耐，最后一句谢谢，彻底告别了自己的童年，而美好的回忆，却是永存的。玩具们的使命也将继续下去，孩子们继续一代一代的成长起来。我们每一个人，都经历过这样的离别吧。 不知道玩具总动员系列会不会像史瑞克一样继续拍下去，如果这是最后一部，那么这一份大礼，够我们珍藏和欣赏很长一段时间了。]]></description>
			<content:encoded><![CDATA[<p>对电影本身来说，是不是3D完全不重要，这部跨越13年的曾经作为三维动画开创者的电影，来到今天，取胜的并不是它的技术和画面。人物角色基本没变（不知为何少了胡迪的另一半，牧羊姑娘，导致胡迪只能为友情而战，爱情戏全部给了巴斯光年），配音都没变，而电影的核心-剧情，依然完美。完美，真的。情节紧凑，丝毫没有多余，电影高潮部分超过半小时，跌宕起伏，搞笑手段完全超乎你的想像，每当人们以为高潮部分已经结束的时候，突然峰回路转，变得更加紧张刺激。</p>
<p>电影在高潮部分结束后的分别场面，才是真正献给80、90后的礼物。17岁的男孩面对从小陪伴自己长大，以后却不再适合在一起的玩具，表露出真心的不舍和无耐，最后一句谢谢，彻底告别了自己的童年，而美好的回忆，却是永存的。玩具们的使命也将继续下去，孩子们继续一代一代的成长起来。我们每一个人，都经历过这样的离别吧。</p>
<p>不知道玩具总动员系列会不会像史瑞克一样继续拍下去，如果这是最后一部，那么这一份大礼，够我们珍藏和欣赏很长一段时间了。</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F677-20100623.html&title=%E7%8E%A9%E5%85%B7%E6%80%BB%E5%8A%A8%E5%91%983%EF%BC%8C%E8%A7%A6%E5%8A%A88090%E7%9A%84%E9%82%A3%E6%A0%B9%E5%BF%83%E5%BC%A6" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/677-20100623.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>苹果乱谈</title>
		<link>http://www.unfish.net/archives/669-20100520.html</link>
		<comments>http://www.unfish.net/archives/669-20100520.html#comments</comments>
		<pubDate>Thu, 20 May 2010 02:20:38 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[业界动态]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[IPhone]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/669-20100520.html</guid>
		<description><![CDATA[苹果公司最近风头正盛，cnbeta的首页每天都有至少1/3的新闻跟它有关，加上最近股票行情不错，市值超过微软只是早晚几天的事。加上最近公司本身动作频出，iPad风潮，升级MBP，泄露iPhone4代，泄露Macbook，泄露iPod Touch4代，跟Adobe的口水战…… 苹果是一家神奇的公司，发布了一些神奇的产品。如果说Macbook/P系列只是以精致的外观和做工取胜于高端市场（比PC市场最贵的Sony更贵），那么iPod市场以缺乏相当多功能的设备在MP3/4市场中独占鳌头就真的是个奇迹了。07年发布iPhone的时候Nokia说苹果不会做手机，居然把手机做成那样，不会有人买的。结果，现在iPhone已经超过了MOTO，成为美国第一大手机制造商。 我用iPhone已经两年了，它确实有很多缺点，比如系统封闭，很多功能苹果不让你用你就没得用，至今仍然没有找到一款可用的通话录音软件（即便在破解过的不再封闭的手机上）。当年iPhone把重力加速，电容式多点触摸屏，以及后来的磁力计塞进一部手机的时候，没有人想到手机还可以这样做，而如今随便一部智能手机都包含这些功能的时候，却又仅仅是扩大了iPhone在用户心中的地位。 iPhone在中国的发展之中是非常有趣的。可以这么说，是中国的山寨机加上灰色的电视直销，赋予了iPhone在中国如此难以置信的知名度。iPhone在相当多的中国用户的眼中，只是一部外部新奇的手机，它的外观跟MOTO和Nokia的手机放在一起的时候，自然而然的让人感觉到一种精致和档次。所以山寨机看准了这个市场，提前两三年为苹果预热中国市场。什么金苹果，心苹果，苹果王等等等等多的数不胜数的山寨机每天用超过电视剧的播放时间在电视台对着观众狂轰乱炸，让所有的中国人都认识到了这部有着漂亮外观和各种不可思议的神奇功能的手机。而且中国人向来有一分价钱一分货的意识，所以面对市场上同时存在着的599元的苹果手机，和5999元的苹果手机，并不会觉得惊讶，而是把这个当作了彰显自己品味的机会。于是，在联通成功引起了行货的苹果手机以后，苹果在中国的市场终于一炮打响。 很多用户对iPhone的功能其实并不是很满意，电话和短信功能都不是很方便，拍照效果也不怎么样，才320万像素，音乐功能嘛，同步音乐到手机上还相当麻烦，除此之外的功能呢，他们基本是不用的，苹果（联通）每天宣传自己的18万个程序，对于大部分用户来说是没有意义的，他们甚至根本不知道这些程序在哪，怎么下载，怎么装，更不用说怎么用Visa信用卡付费购买正版了。买手机的时候销售人员给他安装上什么程序，基本上这部手机这辈子的功能就是这些程序了。 iPad发布至今美国依然货源不足，全球上市一推再推，但是，反观身边的朋友，iPad却已不是什么稀罕之物，做IT的人很多都已经买到了，不知道这150万销量里，到底有多少流入了中国？不知道用iPad的美女们，有多少会破解机器，装自己喜欢的电子书、漫画、游戏上去？ 再有一个月，iPhone4代也要出来了，照片已经泄露了快一个月，论坛上对它的外形的评论也从一个极端走向了另一个极端，相信真正出来以后它的销量不会比iPad差，毕竟有4000万的基础用户在，而且能买的起5000块手机的人，贴2000块换个新手机也是很正常不过的事情了。 而相对个人用户的追捧而言，中国的企业的行为就更值得回味了。且不说已经立了大功的深圳山寨厂商们，现在就连联想和汉王都插一脚进来。联想挑战iPhone，汉王挑战iPad。联想的手机除了名字跟iPhone有点像叫乐Phone（不知道为什么不叫乐手机？不中不洋的名字更容易叫的响？）其它方面是没有什么关系的，外形没有借鉴，功能也是基于成熟的Android。联想做手机并不是第一次，以前的手机卖的怎么样不知道，反正这次挂上挑战iPhone的名字以后，手机卖的确实不错，据说第一天开卖预定数就超过了20万部。这样的销量恐怕已经远远超过中国很多一线手机厂商某一部产品的整个生命周期的销量了。另外，这部手机不但售前的宣传做的到位，售后的跟进也相当到位，上市第一天很多论坛上出现的民间评测（比各个手机门户的官方评测更有参考性也更具有人气）一面倒的在表扬这部手机。且不论这些文章的出处如何，能够如此重视并充分的利用民间论坛的宣传功能，就已经是一个相当大的进步了。 相对于联想的平稳且深入人心的宣传手段来说，汉王的做法简直让人无话可说。没有任何的前期铺垫的情况下，突然发布了产品，而产品的发布会又非要上演那么一手砸苹果的好戏，再配上主持人那些让人浑身发麻的解说台词，真的让人怀疑，这策划人员是不是从候总那里挖过来的？做企业，首要的一条是真诚，虽然杨元庆说的话听起来也蛮像大话的，但是人家在实际行动上证明了自己并不只是在说大话而已，而汉王……很难让人相信一部用触摸屏代替了键盘的上网本（Win7系统）能够跟iPad站在同一个赛场上比赛，就算你做个乔布斯的冰雕像再把它砸碎，也无法赢得市场。恰恰相反，在汉王的宣传文稿中（且不论是媒体自己原创的对比文章还是企业自己写好的软文给媒体去发的），一张张图片和功能的对比，反而是帮苹果做了免费的广告，还铺天盖地的去发。照这种势头下去，估计到8月iPad也会依然缺货。虽然iPad只是部放大版的MP4，虽然它是封闭的，不能把windows程序装进去，但是它有着很多自己的独到的优点，windows 7并不是一个放之四海而皆准的东西，有些环境，它并不是很合适。不能快速开关机，为鼠标而设计的系统不适合手指的操作，复杂的系统内核对硬件的限制也没办法把机器做到超轻超薄，更不用说什么电池续航时间了。 放眼国外的企业，看看大家都在做些什么？google还在潜心钻研自己的系统，虽然出了部手机试水，但是似乎没有下文了，可惜的是Android的版本实在太混乱了，而版本之间的兼容性又太差，软件都不能共用，打击开发人员，就是打击自己的市场。微软也还在潜心钻研自己的windows phone 7，至今只放出了两张挺丑的手机照片。在发表了WP7将不包含复制粘贴和多任务等特性之后，突然发觉自己着了苹果的道，因为苹果又把这两个功能加到了自己的系统里。Palm已经被HP收购，不知道什么时候可以看到成型的产品出来，Palm有着丰富的PDA市场的经验，虽然WebOS至今没有在市场上形成大的反响，但是我想这跟Palm自身的市场策略有关，只出CDMA版，而且不是机卡分离的。假如HP能够整合Palm的系统与自身的硬件设计能力，倒是真的很有希望出一款能够跟iPad抗衡的设备，只是，应用程序这块已经落后了两年多，想追是有点难了，但是也不是不可能的。至于Nokia，不知道什么时候能让用户不再感觉到慢这个字。 苹果的赚钱理念就是只卖贵的，不卖对的。乔布斯有足够的信心改变市场需求，改变用户习以为常的世界，iPhone从一代到四代，万变不离其宗，要想突破，还需要发布一个更强大更新颖的手机类设备。跟风是不可能积累到足够的资格挑战苹果的，国内企业能否做的到真正的突破和创新，让自己做出来的手机实现一些前所未闻而又物有所值的功能呢？]]></description>
			<content:encoded><![CDATA[<p>苹果公司最近风头正盛，cnbeta的首页每天都有至少1/3的新闻跟它有关，加上最近股票行情不错，市值超过微软只是早晚几天的事。加上最近公司本身动作频出，iPad风潮，升级MBP，泄露iPhone4代，泄露Macbook，泄露iPod Touch4代，跟Adobe的口水战……</p>
<p>苹果是一家神奇的公司，发布了一些神奇的产品。如果说Macbook/P系列只是以精致的外观和做工取胜于高端市场（比PC市场最贵的Sony更贵），那么iPod市场以缺乏相当多功能的设备在MP3/4市场中独占鳌头就真的是个奇迹了。07年发布iPhone的时候Nokia说苹果不会做手机，居然把手机做成那样，不会有人买的。结果，现在iPhone已经超过了MOTO，成为美国第一大手机制造商。</p>
<p>我用iPhone已经两年了，它确实有很多缺点，比如系统封闭，很多功能苹果不让你用你就没得用，至今仍然没有找到一款可用的通话录音软件（即便在破解过的不再封闭的手机上）。当年iPhone把重力加速，电容式多点触摸屏，以及后来的磁力计塞进一部手机的时候，没有人想到手机还可以这样做，而如今随便一部智能手机都包含这些功能的时候，却又仅仅是扩大了iPhone在用户心中的地位。</p>
<p>iPhone在中国的发展之中是非常有趣的。可以这么说，是中国的山寨机加上灰色的电视直销，赋予了iPhone在中国如此难以置信的知名度。iPhone在相当多的中国用户的眼中，只是一部外部新奇的手机，它的外观跟MOTO和Nokia的手机放在一起的时候，自然而然的让人感觉到一种精致和档次。所以山寨机看准了这个市场，提前两三年为苹果预热中国市场。什么金苹果，心苹果，苹果王等等等等多的数不胜数的山寨机每天用超过电视剧的播放时间在电视台对着观众狂轰乱炸，让所有的中国人都认识到了这部有着漂亮外观和各种不可思议的神奇功能的手机。而且中国人向来有一分价钱一分货的意识，所以面对市场上同时存在着的599元的苹果手机，和5999元的苹果手机，并不会觉得惊讶，而是把这个当作了彰显自己品味的机会。于是，在联通成功引起了行货的苹果手机以后，苹果在中国的市场终于一炮打响。</p>
<p>很多用户对iPhone的功能其实并不是很满意，电话和短信功能都不是很方便，拍照效果也不怎么样，才320万像素，音乐功能嘛，同步音乐到手机上还相当麻烦，除此之外的功能呢，他们基本是不用的，苹果（联通）每天宣传自己的18万个程序，对于大部分用户来说是没有意义的，他们甚至根本不知道这些程序在哪，怎么下载，怎么装，更不用说怎么用Visa信用卡付费购买正版了。买手机的时候销售人员给他安装上什么程序，基本上这部手机这辈子的功能就是这些程序了。</p>
<p>iPad发布至今美国依然货源不足，全球上市一推再推，但是，反观身边的朋友，iPad却已不是什么稀罕之物，做IT的人很多都已经买到了，不知道这150万销量里，到底有多少流入了中国？不知道用iPad的美女们，有多少会破解机器，装自己喜欢的电子书、漫画、游戏上去？</p>
<p>再有一个月，iPhone4代也要出来了，照片已经泄露了快一个月，论坛上对它的外形的评论也从一个极端走向了另一个极端，相信真正出来以后它的销量不会比iPad差，毕竟有4000万的基础用户在，而且能买的起5000块手机的人，贴2000块换个新手机也是很正常不过的事情了。</p>
<p>而相对个人用户的追捧而言，中国的企业的行为就更值得回味了。且不说已经立了大功的深圳山寨厂商们，现在就连联想和汉王都插一脚进来。联想挑战iPhone，汉王挑战iPad。联想的手机除了名字跟iPhone有点像叫乐Phone（不知道为什么不叫乐手机？不中不洋的名字更容易叫的响？）其它方面是没有什么关系的，外形没有借鉴，功能也是基于成熟的Android。联想做手机并不是第一次，以前的手机卖的怎么样不知道，反正这次挂上挑战iPhone的名字以后，手机卖的确实不错，据说第一天开卖预定数就超过了20万部。这样的销量恐怕已经远远超过中国很多一线手机厂商某一部产品的整个生命周期的销量了。另外，这部手机不但售前的宣传做的到位，售后的跟进也相当到位，上市第一天很多论坛上出现的民间评测（比各个手机门户的官方评测更有参考性也更具有人气）一面倒的在表扬这部手机。且不论这些文章的出处如何，能够如此重视并充分的利用民间论坛的宣传功能，就已经是一个相当大的进步了。</p>
<p>相对于联想的平稳且深入人心的宣传手段来说，汉王的做法简直让人无话可说。没有任何的前期铺垫的情况下，突然发布了产品，而产品的发布会又非要上演那么一手砸苹果的好戏，再配上主持人那些让人浑身发麻的解说台词，真的让人怀疑，这策划人员是不是从候总那里挖过来的？做企业，首要的一条是真诚，虽然杨元庆说的话听起来也蛮像大话的，但是人家在实际行动上证明了自己并不只是在说大话而已，而汉王……很难让人相信一部用触摸屏代替了键盘的上网本（Win7系统）能够跟iPad站在同一个赛场上比赛，就算你做个乔布斯的冰雕像再把它砸碎，也无法赢得市场。恰恰相反，在汉王的宣传文稿中（且不论是媒体自己原创的对比文章还是企业自己写好的软文给媒体去发的），一张张图片和功能的对比，反而是帮苹果做了免费的广告，还铺天盖地的去发。照这种势头下去，估计到8月iPad也会依然缺货。虽然iPad只是部放大版的MP4，虽然它是封闭的，不能把windows程序装进去，但是它有着很多自己的独到的优点，windows 7并不是一个放之四海而皆准的东西，有些环境，它并不是很合适。不能快速开关机，为鼠标而设计的系统不适合手指的操作，复杂的系统内核对硬件的限制也没办法把机器做到超轻超薄，更不用说什么电池续航时间了。</p>
<p>放眼国外的企业，看看大家都在做些什么？google还在潜心钻研自己的系统，虽然出了部手机试水，但是似乎没有下文了，可惜的是Android的版本实在太混乱了，而版本之间的兼容性又太差，软件都不能共用，打击开发人员，就是打击自己的市场。微软也还在潜心钻研自己的windows phone 7，至今只放出了两张挺丑的手机照片。在发表了WP7将不包含复制粘贴和多任务等特性之后，突然发觉自己着了苹果的道，因为苹果又把这两个功能加到了自己的系统里。Palm已经被HP收购，不知道什么时候可以看到成型的产品出来，Palm有着丰富的PDA市场的经验，虽然WebOS至今没有在市场上形成大的反响，但是我想这跟Palm自身的市场策略有关，只出CDMA版，而且不是机卡分离的。假如HP能够整合Palm的系统与自身的硬件设计能力，倒是真的很有希望出一款能够跟iPad抗衡的设备，只是，应用程序这块已经落后了两年多，想追是有点难了，但是也不是不可能的。至于Nokia，不知道什么时候能让用户不再感觉到慢这个字。</p>
<p>苹果的赚钱理念就是只卖贵的，不卖对的。乔布斯有足够的信心改变市场需求，改变用户习以为常的世界，iPhone从一代到四代，万变不离其宗，要想突破，还需要发布一个更强大更新颖的手机类设备。跟风是不可能积累到足够的资格挑战苹果的，国内企业能否做的到真正的突破和创新，让自己做出来的手机实现一些前所未闻而又物有所值的功能呢？</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F669-20100520.html&title=%E8%8B%B9%E6%9E%9C%E4%B9%B1%E8%B0%88" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/669-20100520.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>强悍的反删除恢复软件recuva</title>
		<link>http://www.unfish.net/archives/668-20100326.html</link>
		<comments>http://www.unfish.net/archives/668-20100326.html#comments</comments>
		<pubDate>Fri, 26 Mar 2010 09:09:01 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[技术文章]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/668-20100326.html</guid>
		<description><![CDATA[在清理硬盘的时候下载目录下面有个电子书目录，直接Shift+Delete给删了，结果删完才发现，居然系统默认的我的图片库在这个目录的下面，估计是以前转换系统目录的时候没留意，保存错了位置。这下惨了，上次家人到上海来玩的时候拍的所有的照片。于是赶紧上网找反删除的软件。结果，找到了这家。 http://www.piriform.com/recuva 这个跟大名鼎鼎的CCleaner同出一家，软件完全免费，支持所有windows系统，支持64位系统，下载的地方还分安装版和绿色版。没话说，赶紧下载绿色版，解压，运行。提示要恢复的文件类型（这个功能以前在其它恢复软件上还没见过），选图片，它们所在的目录，选了那个被删除的目录的上一级，下一步开始分析，分析半天只找到四张图片，还是无关的。 于是返回第一步，重来，所在目录直接选F盘，下一步分析，哇塞，不但分析出了所有被删除的图片，还能直接预览。选中旅游的这些照片，恢复，选恢复到另一个盘的目录中，Done！一个不差的全部恢复出来了。 如此可爱的软件，怎能不备一个？]]></description>
			<content:encoded><![CDATA[<p>在清理硬盘的时候下载目录下面有个电子书目录，直接Shift+Delete给删了，结果删完才发现，居然系统默认的我的图片库在这个目录的下面，估计是以前转换系统目录的时候没留意，保存错了位置。这下惨了，上次家人到上海来玩的时候拍的所有的照片。于是赶紧上网找反删除的软件。结果，找到了这家。</p>
<p><a title="http://www.piriform.com/recuva" href="http://www.piriform.com/recuva">http://www.piriform.com/recuva</a></p>
<p>这个跟大名鼎鼎的CCleaner同出一家，软件完全免费，支持所有windows系统，支持64位系统，下载的地方还分安装版和绿色版。没话说，赶紧下载绿色版，解压，运行。提示要恢复的文件类型（这个功能以前在其它恢复软件上还没见过），选图片，它们所在的目录，选了那个被删除的目录的上一级，下一步开始分析，分析半天只找到四张图片，还是无关的。</p>
<p>于是返回第一步，重来，所在目录直接选F盘，下一步分析，哇塞，不但分析出了所有被删除的图片，还能直接预览。选中旅游的这些照片，恢复，选恢复到另一个盘的目录中，Done！一个不差的全部恢复出来了。</p>
<p>如此可爱的软件，怎能不备一个？</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F668-20100326.html&title=%E5%BC%BA%E6%82%8D%E7%9A%84%E5%8F%8D%E5%88%A0%E9%99%A4%E6%81%A2%E5%A4%8D%E8%BD%AF%E4%BB%B6recuva" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/668-20100326.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>搬家，又搬家</title>
		<link>http://www.unfish.net/archives/662-20100131.html</link>
		<comments>http://www.unfish.net/archives/662-20100131.html#comments</comments>
		<pubDate>Sun, 31 Jan 2010 04:13:28 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[生活杂谈]]></category>
		<category><![CDATA[张江]]></category>
		<category><![CDATA[搬家]]></category>
		<category><![CDATA[租房]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/662-20100131.html</guid>
		<description><![CDATA[2008年4月搬家的时候，还以为这回可以安稳个四五年了，没想到，变化来的这么快。一年半，就又搬了一次。从头数来，毕业至今7年半的时间，已经搬了8次家。人家说搬家一次穷三年，那我……。从普陀到昌里，到蓝村路再到潍坊路，到金桥再到张江，如果再算上大学时期的杨浦和明年要去的闵行，那已经围着上海住遍一圈了。而住宿成本也从400到700到1100到1600再到2100，连搬家的成本也从100到200到300再到450再到了600，钱真是越来越不经花啊。这次搬家扔掉的东西原价估计也要我一个月工资了。 张江是个生活配套很缺乏房租却贵的离谱的神奇的地方，估计是因为这个小小的区域里挤进来了太多的有点钱而又不那么有钱（还是买不起房）的白骨精的原因。网上随便找到几个2000左右的房子进去看看都恶心的想赶紧逃掉。还好，最后在张江镇中心位置幸运的找到了一套别名“人才公寓”的别人刚腾出来的房子，老式酒店式公寓，内部面积不超过20（加上隔出来的半个上层），这还是这橦楼上最大的户型，每层30户只有一户是这种一室一厅的户型，其它的更惨，连卧室也没有，室内面积都只有10个平方，下面当客厅，上面半层睡觉。无法想像那种房子怎么住两个人。 &#160; 所谓的人才公寓，就是这样了。前面一个老外来看过房子，没有租下来的原因是，房顶比他的身高还要低10公分……不过在电梯里面确实看到的面孔都是年轻人，跟晶波坊那种老式动迁小区完全是不同的感觉（老年人也不可能住这么不方便的房子）。唯一的好处就是物业不错，至少楼道非常干净清爽，楼梯里的摄像头是也工作的，而且是有人看着的，屋里任何东西坏了一个电话马上就有人来修，即便你上班没时间，物业也可以直接用备用钥匙进来修。缺点是不允许换锁，给的钥匙也不允许丢，丢一次赔400块…… 昨天出去转了近一个小时，没找到送水的店，倒是发现了旁边有个火车票代售点，下午两点，排队超过200人，极其壮观。 以本小区为中心方圆一个红绿灯的范围内（大概不到1km）是比较热闹的，再远就只剩下办公楼了。从这里步行到公司25分钟，却没有一辆车可以直达，所有的公交车包括张江有轨电车都只能坐2/3的路程，还得再步行1/3。还是去买辆自行车吧。还借搬新家的机会跑去买了一把比我的床还贵的电脑椅，大大的奢侈了一把。都怪这个房子里给做的那个书桌高度实在太离谱，而且对这椅子向往已久。 生活，就是这么琐碎。转眼又春节了，按照惯例，回头再写个09年回顾和10年展望吧。]]></description>
			<content:encoded><![CDATA[<p>2008年4月搬家的时候，还以为这回可以安稳个四五年了，没想到，变化来的这么快。一年半，就又搬了一次。从头数来，毕业至今7年半的时间，已经搬了8次家。人家说搬家一次穷三年，那我……。从普陀到昌里，到蓝村路再到潍坊路，到金桥再到张江，如果再算上大学时期的杨浦和明年要去的闵行，那已经围着上海住遍一圈了。而住宿成本也从400到700到1100到1600再到2100，连搬家的成本也从100到200到300再到450再到了600，钱真是越来越不经花啊。这次搬家扔掉的东西原价估计也要我一个月工资了。</p>
<p>张江是个生活配套很缺乏房租却贵的离谱的神奇的地方，估计是因为这个小小的区域里挤进来了太多的有点钱而又不那么有钱（还是买不起房）的白骨精的原因。网上随便找到几个2000左右的房子进去看看都恶心的想赶紧逃掉。还好，最后在张江镇中心位置幸运的找到了一套别名“人才公寓”的别人刚腾出来的房子，老式酒店式公寓，内部面积不超过20（加上隔出来的半个上层），这还是这橦楼上最大的户型，每层30户只有一户是这种一室一厅的户型，其它的更惨，连卧室也没有，室内面积都只有10个平方，下面当客厅，上面半层睡觉。无法想像那种房子怎么住两个人。</p>
<p> <span id="more-662"></span>
<p>&#160;</p>
<p><a href="http://www.unfish.net/wp-content/uploads/2010/01/IMG_0043.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="客厅全貌" border="0" alt="客厅全貌" src="http://www.unfish.net/wp-content/uploads/2010/01/IMG_0043_thumb.jpg" width="244" height="184" /></a> <a href="http://www.unfish.net/wp-content/uploads/2010/01/IMG_0044.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="客厅上面的卧室" border="0" alt="客厅上面的卧室" src="http://www.unfish.net/wp-content/uploads/2010/01/IMG_0044_thumb.jpg" width="184" height="244" /></a> </p>
<p>所谓的人才公寓，就是这样了。前面一个老外来看过房子，没有租下来的原因是，房顶比他的身高还要低10公分……不过在电梯里面确实看到的面孔都是年轻人，跟晶波坊那种老式动迁小区完全是不同的感觉（老年人也不可能住这么不方便的房子）。唯一的好处就是物业不错，至少楼道非常干净清爽，楼梯里的摄像头是也工作的，而且是有人看着的，屋里任何东西坏了一个电话马上就有人来修，即便你上班没时间，物业也可以直接用备用钥匙进来修。缺点是不允许换锁，给的钥匙也不允许丢，丢一次赔400块……</p>
<p>昨天出去转了近一个小时，没找到送水的店，倒是发现了旁边有个火车票代售点，下午两点，排队超过200人，极其壮观。</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="火车票，外飘族永远的痛" border="0" alt="火车票，外飘族永远的痛" src="http://www.unfish.net/wp-content/uploads/2010/01/IMG_0042.jpg" width="474" height="342" /> </p>
<p>以本小区为中心方圆一个红绿灯的范围内（大概不到1km）是比较热闹的，再远就只剩下办公楼了。从这里步行到公司25分钟，却没有一辆车可以直达，所有的公交车包括张江有轨电车都只能坐2/3的路程，还得再步行1/3。还是去买辆自行车吧。还借搬新家的机会跑去买了一把比我的床还贵的电脑椅，大大的奢侈了一把。都怪这个房子里给做的那个书桌高度实在太离谱，而且对这椅子向往已久。</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="椅子很帅吧？" border="0" alt="椅子很帅吧？" src="http://www.unfish.net/wp-content/uploads/2010/01/T2gd4eXkAoVdNXXXXX_299734090.jpg" width="500" height="287" /> </p>
<p>生活，就是这么琐碎。转眼又春节了，按照惯例，回头再写个09年回顾和10年展望吧。</p>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fwww.unfish.net%2Farchives%2F662-20100131.html&title=%E6%90%AC%E5%AE%B6%EF%BC%8C%E5%8F%88%E6%90%AC%E5%AE%B6" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/662-20100131.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

