<?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="https://www.zhaojianfei.com/feed" rel="self" type="application/rss+xml" />
	<link>https://www.zhaojianfei.com</link>
	<description>深蹲救中国</description>
	<lastBuildDate>Thu, 13 Jun 2019 03:42:50 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.4</generator>
	<item>
		<title>如何自定义Core Image Filter——Core Image 编程指南（下） Core Image Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/756</link>
		<comments>https://www.zhaojianfei.com/archives/756#respond</comments>
		<pubDate>Tue, 05 Jun 2018 08:43:52 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=756</guid>
		<description><![CDATA[Core Image提供了编写自定义filter的支持。 自定义filter是你为其编写方法（称为内核）的filter，该过程指定要对每个源图像像素执行的计算。 如果你打算使用内置的Core Image filter，无论是本体还是继承它们，你都不需要阅读本文。 如果你打算编写自定义filter，则应阅读本章，以便了解自定义filter中的处理路径和组件。 如果你有意打包自定义filter进行分发，你还应该阅读Packaging and Loading Image Units。 Filter Clients and Filter Creators Core Image 为两种开发者设计——filter clients和filter creators。如果你只使用filter，那么你是个client；如果你写自己的filter，那就是 creator。 下图显示一个典型的filter的结构组成。阴影区域标出部分是“under the hood”——filter clients不需要知道的，但是filter creator 必须理解的。没有阴影的部分显示了两个方法——attributes and outputImage——给filter client 提供数据。filter的 attributes方法返回一个描述filter的建值对列表。outputImage 方法产生一个图片，图片来自： 一个从源抓去像素的采样器 一个处理像素的核心 典型filter的结构 每个自定义filter的核心就是 kernel。kernel 在每个 源图像素上的计算。kernel的计算可以是非常简单和复杂的。一个非常简单的kernel可能仅仅把源图像素返回（do nothing）： destination pixel = source pixel Filter creators 使用不同的 OpenGL Shading Language (glslang) 来指定每个像素计算。(See Core Image Kernel Language Reference.)  Kernel 对于filter client是不透明的。一个filter可能实际上使用多个 kernel 方式，传递一个的输出给另一个作为输入。 注意： Kernel 是实际的例程，使用 Core Image  glslang 编写，用于filter处理像素。一个CIKernel 对象是一个包含kernel 例程的Core Image 对象。当你创建一个filter，你会看到，kernel例程在 .cikernel 扩展名的文件中存在。你通过代码传递一个包含kernel 例程的字符串来创建一个CIKernel对象。 作为Filter Creator可以让他们的自定义filter对任何app都起作用，使用 NSBundle 类的指定架构，通过把他们打包成一个 plug-in，或者image unit。一个image unit 不止一个filter，如下图所示。你可以编写一组filters，执行不同的 edge detection、打包他们作为独立的image unit。Filter clients可以使用Core Image API记载image unit、得到一个包含在image unit中的filter列表。 一个包含一个或者多个filter定义的 image unit： The Processing Path 下图显示了一个一个处理两个源图像素的处理路径。源图总是CIImage 对象。Core Image提供不同的方式得到图片数据。你可以给image 提供一个URL，读取 raw 数据（使用 NSData类）；或者通过转换Quartz 2D image（CGContextRef）、一个 openGL 纹理、或者一个Core Image Video iage buffer（CVImageBufferRef）为CIimage对象。 注意，输出图片的实际数量、还有filter是否需要一个输入图片，依赖于filter本身。filter是非常灵活的，可以： 不需要input image。某些filter基于不是image的输入参数（比如， CICheckerboardGenerator and CIConstantColorGenerator filters in Core Image Filter Reference） 需要一个image（比如see the CIColorPosterize and CICMYKHalftone filters in Core Image Filter Reference.） 需要两个或者更多的images。组合图片的filter或使用一个image的值控制另一个图片像素处理的情况通常需要两个或者更多的images。一个input image可以作为一个shading image，一个可以是蒙板、背景图或者提供一个控制某些其他图处理的查找值的源（比如，see the CIShadedMaterial filter in Core Image Filter Reference.）。 当你处理一个image时，创建包含合适输入数据的CIImage对象是你的职责。 注意：尽管 CIImage对象有关联的image data，但是它不是一个image。你可以把CIImage看作一个image的“菜谱”。一个CIImage对象有所有创建image的信息，但是Core Image直到你通知它绘制时才会绘制image。 像素处理路径： 每个源图片的像素通过CISimpler对象取出，简称sampler采样者。按字面意思，一个sampler处理一个image的采样和把她们提供给kernel。filter creator为每个源图提供sampler。filter clients不需要知道sampler的信息。 sampler定义内容如下： a coordinate transform，如果不需要变换，它可以是恒等变换。 an interpolation mode，能被nearest neighbor sampling or bilinear interpolation（默认的） a wrapping mode，指定当采样区域在源图外时如何生产像素（使用透明block或者缩到某个程度） filter creator 在kernel中定义每像素图片计算，但是Core Image 处理实际计算的实现。Core Image决定计算在GPU还是CUP上执行。Core Image 在不同设备兼容性基础上，用Metal, OpenGL, or OpenGL ES 实现硬件栅格化rasterization。It implements software rasterization through an emulation environment specifically tuned for evaluating fragment<a class="moretag" href="https://www.zhaojianfei.com/archives/756"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/756/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Core Image 编程指南（中） Core Image Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/746</link>
		<comments>https://www.zhaojianfei.com/archives/746#respond</comments>
		<pubDate>Mon, 04 Jun 2018 10:50:16 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=746</guid>
		<description><![CDATA[接下来介绍如何继承一个 CIFilter，实现自定义效果。在继承CIFilter前先介绍两个内置的filter——Face Detecting 和 Auto Enhancing Images。 在 Image中探测人脸 Core Image 可以在图片中分析和找到人脸——人脸探测，不是人脸识别（能认出是谁）。人脸检测是对包含人脸特征的矩形的识别，而人脸识别则是对特定人脸的识别（能认出是谁）。Core Image 探测到人脸后，他和一提供面部功能的信息，比如眼睛和嘴的位置。也可以在视频中追踪标识人脸位置。 Core Image标识出图片中人脸的范围。 知道人脸在图片的什么位置能让你执行其他操作，比如裁切和调整脸部质量（tone balance, red-eye correction and so on）。也可以执行其他有趣的操作比如： 如何将pixellate filter应用到图像中的人脸。 如何给面部加入虚化。 检测面部 使用 CIDetector 在图片中识别面部，代码如下： CIContext *context = [CIContext context];                    // 1 NSDictionary *opts = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh };      // 2 CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace                                           context:context                                           options:opts];                    // 3 &#160; opts = @{ CIDetectorImageOrientation :           [[myImage properties] valueForKey:kCGImagePropertyOrientation] }; // 4 NSArray *features = [detector featuresInImage:myImage options:opts];        // 5 用默认选项创建一个CIContext。也可以使用 context的创建函数。创建detector是也可以提供context为nil 为detector创建一个options 字典容器。你可以选择低或高精度的。低精度（CIDetectorAccuracyLow）快，高精度精确但是慢。 为面部创建detector。目前智能创建人脸的detector 为查找人脸设置option字典。让Core Image知道图片是横屏还是竖屏，这样Core Image就能找到正确角度的人脸。大部分时间这个角度是从源图直接获得的，然后提供给option 字典。 使用detector在图片中找。图片对象必须是一个CIImage对象。Core Image返回一个CIFeature对象数组，每个对象表示一个图片中的人脸。 得到人脸数组后，你可能需要知道他们的特征，比如眼睛和嘴巴的位置。下面介绍方法。 得到面部和面部特征范围 面部特征包括： 左右眼睛位置 嘴巴位置 tracking ID和tracking frame数量，Core Image使用这些信息在一段视频中追踪人脸（iOS 6.0和 OS X 10.8以上） 从CIDetector拿到特征数组后，你可以迭代array来验证每个面部范围和每个面部里的其他特征。如下： for (CIFaceFeature *f in features) {     NSLog(@&#8221;%@&#8221;, NSStringFromRect(f.bounds)); &#160;     if (f.hasLeftEyePosition) {         NSLog(@&#8221;Left eye %g %g&#8221;, f.leftEyePosition.x, f.leftEyePosition.y);     }<a class="moretag" href="https://www.zhaojianfei.com/archives/746"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/746/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Core Image 编程指南（上） Core Image Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/740</link>
		<comments>https://www.zhaojianfei.com/archives/740#respond</comments>
		<pubDate>Thu, 31 May 2018 09:54:33 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=740</guid>
		<description><![CDATA[Core Image是一种用来为定格图片和视频图片提供近乎实时处理和分析的技术。它从 Core Graphic，Core Video和Image IO framework中操作各种图片数据类型，可以使用GPU和CPU的绘制路径。Core Image 隐藏了底层的图像处理，而提供了方便使用的编程接口API。你不需要知道OpenGL，OpenGL ES或者Metal影响GPU能力的细节，你也不需要了解GCD多核处理的优点。因为Core Image负责处理这些事情。 Core Image和操作系统的关系如图： Core Image 提供一下功能： 访问内建的图片处理filters 特性检测能力 Feature detection capability 支持自动图片增益 image enhancement 链接多个filters来创建自定义效果的能力 支持运行在GPU上的自定义filters的创建 基于feedback的图片处理能力 macOS上，Core Image也提供一种为其他app打包自定义filters的方法。 Core Image 是处理和分析图片非常有效和简单的方式 Core Image土工了数百个内建filter时。通过KVC为filter设置输入参数来配置filters。一个filter的输出可以成为另一个filter的输入，这让链接许多filter来创建惊艳的特效成为可能。如果你创建了一个复合的特效，你想要在某处再次使用它，你可以继承CIFilter类来把这个效果做成一个“配方”反复使用。 filters有许多的categories。很多是为了达到艺术效果而设计的，比如 stylize 和 halftone filter categories。其他的categories为处理图片问题而优化的，比如 red eye。你只需要调用他们来做这些事情。 Core Image能在定格图片中探测人脸、在视频图像中实时追踪人脸。知道人脸在哪里能帮助你决定在哪里放置一个 vignette 或者应用其他特定的filters。 通过查询 Core Image来得到一个filters的列表和他们的属性 Core Image为它的filters提供了“内置”的参考文档。你可以查询系统以找出哪些filters是可用的。然后，对于每个filters，你都可以检索包含它的属性的字典，例如它的输入参数、默认参数值、最小值和最大值、显示名称等等。 Core Image 可以实现实时视频优化 如果你的应用需要实时处理视频，你可以做一些事情来优化性能。 使用Image Accumulator 来支持基于feedback的处理 Use an Image Accumulator to Support Feedback-Based Processing CIImageAccumulator类是为高效的基于反馈的图像处理而设计的，如果你的应用需要图像动力系统，你可能会觉得有用。 创建一个分布式自定义核心和filters Create and Distribute Custom Kernels and Filters 如果没有内置的filters适合你的需要（即使是已经链接在一起的时候），这时也可以考虑创建一个定制filters。你需要了解内核（在像素级别上运行的程序），因为它们是每个filters的核心。 在macOS中，你可以将一个或多个自定义filters打包成一个图像单元，这样其他应用就可以加载和使用它们。 处理图片 处理图像意味着应用filters &#8211; 图像filters是一种软件，逐个像素地检查输入图像，并在算法上应用一些效果以创建输出图像。 在Core Image中，图像处理依赖于CIFilter和CIImage类，它们描述了filters及其输入和输出。 要应用filters并显示或导出结果，可以使用Core Image和其他system framework之间的集成，或使用CIContext类创建自己的render workflow渲染工作流。 下面介绍使用这些类来应用filters和渲染结果的关键概念。 app中有很多使用Core Image来处理图片的方式。下图展示了一个基本的例子，基本的为image应用一个filter： import CoreImage let context = CIContext()                                           // 1 let filter = CIFilter(name: &#8220;CISepiaTone&#8221;)!                         // 2 filter.setValue(0.8, forKey: kCIInputIntensityKey) let image = CIImage(contentsOfURL: myURL)                           // 3 filter.setValue(image, forKey: kCIInputImageKey) let result = filter.outputImage!                                    // 4 let cgImage = context.createCGImage(result, from: result.extent)    // 5 以上代码主要做了这几件事： 创建了一个CIContext 对象(用默认options)。你并不总是需要你自己的Core Image<a class="moretag" href="https://www.zhaojianfei.com/archives/740"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/740/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AVFoundation 编程指南（上） AVFoundation programming guide</title>
		<link>https://www.zhaojianfei.com/archives/730</link>
		<comments>https://www.zhaojianfei.com/archives/730#respond</comments>
		<pubDate>Wed, 23 May 2018 07:04:31 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=730</guid>
		<description><![CDATA[AVFoundation 是可以用来播放和创建基于时间的视听媒体的几个framework之一。它提供了OC接口来处理基于时间的视听数据。比如，你可以使用AVFoundation来测试，创建，编辑或者重新编发媒体文件，你也可以从设备拿到输入流，并在实时捕捉和回放过程中操作视频。 下入显示了 iOS AVFoundation的架构： 下图显示了 OS X的媒体架构组成： 一般使用高层可用的抽象来执行特定的任务。 如果想简单的播放movies，使用AVKit iOS上，录制视频，当只需要对格式进行最小限度的控制时，可以使用UIKit 注意：仍然，在AVFoundation中有某些古老的数据结构（包括时间相关数据结构、携带和描述媒体数据的不透明对象）在 Core Media中声明。 简介 At a Glance AVFoundation包含两个方面：和视频相关的api；音频相关api。更早的音频相关类提供处理音频的简单方式。 使用AVAudioPlayer播放音频 使用AVAudioRecorder录制音频 使用 AVAudioSession配置音频行为，在 Audio Session Programming Guide 提及。 用 AVFoundation 呈现和使用媒体 AVAsset时AVFoundation 用来呈现媒体的主要类。这个框架的设计主要是由这个需求来指导的。理解AVAsset的结构将会帮助你理解AVFoundation framework的原理。一个AVasset的实例是一片或者多片媒体数据组成的集合的一种聚合表达。Avasset提供关于整个集合的信息，比如 title，duration，natural presentation size等。AVasset  不纠结于特定数据格式。AVAsset 是那些用于从URL的媒体创建资产实例和创建新合成的superclass。 asset中每片独立的媒体数据有一个统一的类型，叫做 track。比如，一个 track 表达了音频部分，另一个track表达视频部分；在一个复杂的组合中可能有互相覆盖重合的视频和音频track。Assets可能还含有metadata。 AVFoundation 的一个重要的概念是——初始化一个asset或者一个track不代表它可以使用了。它可能需要一些时间来计算一个项目的duration（比如MP3，可能不含 summary 信息）。你请求一个值，通过callback（比如block）异步得到回应，而不是在值计算的时候阻塞当前线程。 播放 Playback AVFoundation允许你精确的管理asset的播放。为了支持这个，AVFoundation 从asset自身分离了一个asset的presentation state。比如，这可以让你同时播放同一个asset的两个不同段并且绘制到两个不同的分辨率。asset的presentation state通过一个 player item 对象管理；一个 asset内的每个 track 的presentation state通过 player item track 对象管理。你可以使用 player item和player item tracks来设置被player呈现的item的可视部分的大小；设置音频混合参数和视频组合设置，以便在回放期间应用；或者在播放中禁用asset的某个部分。 你可以使用 一个 player object播放 player items，把player的output指向CoreAnimation layer。你可以使用 一个 player queue来序列化的安排一组player items的播放。 如下图： Asset的读取，写入和重新编码 AVFoundation允许你用不同的方式创建新的asset的表达。你可以从新编码一个已知的asset，或者，在iOS 4.1以上中，你能操作asset的内容，存储结果为一个新asset。 你必须使用一个export session 来重新编码一个已知asset，编码为由某些定义好的常用的预先设置的格式。如果你需要在转换中进行更多控制，你可以使用 asset reader 和asset writer 对象协同工作，把asset从一种呈现转为另一种。使用这些对象，你可以选择你要的tracks来表达到输入文件，指定你自己的输出格式，或者在转换过程中修改asset。 缩略图 Thumbnails 为了创建视频表达的缩略图，你需要初始化一个 AVAssetImageGenerator。AVAssetImageGenerator 使用默认可用的视频tracks来生成图片。 编辑 AVFoundation 使用 compositions 来从已有media 片中创建新asset（在一个或多个视频和音频tracks中）。你使用一个 mutable composition 来添加和移除一个tracks、调整他们的时序。你也可以设置相应的音量和音频轨道;设置不透明度和不透明度的视频轨道。一个 composition 是一个 内存中 media 片的集合。当你导出一个 composition 时，使用 export session让他折叠为一个文件。 还可以从media创建asset，比如从sample buffers或still images中用一个asset writer 来创建 asset。 定格和视频媒体捕获 Still and Video Media Capture capture session负责从camera和麦克风记录输入。一个capture session协调从输入设备到输出的数据流，例如输出到一个电影文件。你可以为一个session配置多个输入和输出，甚至在session正在运行时都可以配置。你给session发送消息来启动和停止数据流。 另外，你可以使用一个 preview layer的实例来给用户显示camera正在录制的内容。 AVFoundation的并发编程 Block调用，kvo，消息处理（invocations of blocks, key-value observers, and notification handlers）这些从AVFoundation 来的callback，不能保证被放入任何特定的线程或者队列。相反，AVFoundation在执行其内部任务的线程或队列上调用这些处理程序。 就通知和线程而言，有两种一般的指导原则： UI相关的通知在主线程触发 需要创建或者指定一个队列queue的类或者方法将会在这个队列上返回通知。 除了这两个准则之外（还有一些例外，它们在参考文档中注明）， 你不应该假定通知将在任何特定的线程上返回。 如果你正在编写一个多线程app，你可以使用 NSThread 方法 isMainThread 或者 [[NSThread currentThread] isEqual:&#60;#A stored thread reference#&#62;] 来测试调用线程是否时你期待执行任务的那个。你可以用performSelectorOnMainThread:withObject:waitUntilDone: and performSelector:onThread:withObject:waitUntilDone:modes: 方法重定向消息给合适的线程。也可以使用 dispatch_async 在合适的queue上跳到你的block，要么是UI任务的主队列，要么是用于并发操作的队列。 AVCam-iOS: Using AVFoundation to Capture Images and Movies sample code是所有AVFoundation功能的主要示例，并且可以参考AVFoundation的线程和队列使用示例。 有几个AVFoundation示例包括两个对于理解和实现摄像头捕捉功能至关重要的示例：     AVCam-iOS: Using AVFoundation to Capture Images and Movies 是用于实现任何使用相机功能的程序的规范示例代码。它是一个完整的样本，有据可查，涵盖了大多数最佳实践。    AVCamManual: Extending AVCam to Use Manual Capture API  是AVCam的演示app。它使用手动相机控件实现相机功能。它是一个完整的例子，有据可查，应被视为示范。     RosyWriter 是一个演示实时帧处理的例子，特别是如何将过滤器应用于视频内容。这是一个非常常见的开发人员需求，这个例子涵盖了这个功能。     AVLocationPlayer: Using AVFoundation Metadata Reading APIs 演示使用元数据API。 使用<a class="moretag" href="https://www.zhaojianfei.com/archives/730"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/730/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OC 运行时编程指南文档笔记 Objective-C Runtime Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/724</link>
		<comments>https://www.zhaojianfei.com/archives/724#respond</comments>
		<pubDate>Thu, 17 May 2018 15:43:57 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=724</guid>
		<description><![CDATA[OC语言能在从编译时、连接时到运行时推迟许多决策。尽可能的，语言动态执行。这意味着语言不仅仅需要一个编译器，而且需要一个运行时系统来执行编译的代码。运行时系统扮演了一个OC的操作系统角色，让语言正常运行。 下面深入介绍NSObject class和OC程序如何与运行时交互，也介绍关于如何动态加载新class和对其他对象的消息转发，也提供关于在程序运行时如何找到队形的信息。 和Runtime交互的Level OC程序在3个直接层面和Runtime交互： 通过OC代码，通过 NSObject 里定义的方法， 通过直接调用运行时的functions。 OC源码 大部分情况，运行时系统在幕后自动工作。你通过编写和编译OC代码来使用它。 当你编译包含OC classes和method的代码是，编译器创建了实现动态语言特征的 数据结构和function。数据结构捕获在class，category和protocol里定义的信息，包括：OC中定义类和协议里讨论的类和协议对象，以及方法选择器selector，instance variable templates和从源代码提取的其他信息。主要的Runtime funtion之一是 sends message，将会在 Messaging 中讨论。 NSObject Methods 大部分 Cocoa里的对象都是NSObject的子类，所以大部分对象继承了NSObject的方法（例外是NSProxy类，参考Message Forwarding ）。因此，NSObject的方法建立了每个实例和每个类对象所固有的行为。但是，在少数情况下，NSObject类仅仅定义了一个模板，用于如何完成某些工作，它不提供所有必要的代码。 比如，NSObject类定一了一个descrtiption实例方法，返回一个类的内容描述字符串。这是GDB print-object返回的内容。NSObject实现这个方法，不知道类包含了什么，所以它返回对象的一个name和内存地址。NSObject的子类可以实现这个方法来返回更多信息。比如，NSArray返回一个它包含的对象的列表。 某些NSObject方法简单查询运行时系统来获取信息。这些方法允许对象来执行自我检查。比如一些class 方法：isKindOfClass: 或者 isMemberOfClass: 能测试一个对象在继承层级的位置；respondsToSelector方法能确定对象是否能接受一个特别的消息；conformsToProtocol: 能确定一个对象要求在指定协议中实现方法；还有 methodForSelector: 能提供method实现的地址。以上这些方法能让对象自己检查自己。 Runtime Functions Runtime 系统是以恶动态共享库，有一组在header文件里的函数和数据结构组成的公开接口，存储在 /usr/include/objc。这些方法中的许多方法允许你使用纯C来复制编译器在编译Objective-C代码时所做的事情。Others form the basis for functionality exported through the methods of the NSObject class. 。其他来自功能基础的方法通过NSObject 类的方法导出。这些functions 让开发runtime 系统的其他接口成为可能，也能产生增强开发环境的工具，这些方法在编写OC时时不必要的，但是，部分function可能在编写OC程序时很有用。所有functions都在 Objective-C Runtime Reference 。 关于消息 Messaging 下面介绍了消息表达式转为 objc_msgSent的调用、还有如何通过name来引用methods。然后解释了如何利用objc_msgsend和如何在需要的情况下避免动态绑定。 objc_msgSend 函数 OC中，消息知道运行时才绑定到方法的实现。编译器转换消息表达式 [receiver message] 为一个messaging 函数的调用——objc_msgSend。这个函数（也就是method selector）拿到了接收者receiver和message中关于方法的name作为两个主要参数，转换为：objc_msgSend(receiver, selector)。任何method的参数，凡是传入objc_msgSend的，也被他处理为：objc_msgSend(receiver, selector, arg1, arg2, &#8230;) 消息函数为动态绑定做了以下事情： 先找到selector引用的方法实现——因为相同的方法可以通过不同的类实现，所以它找到实现的精确过程取决于接收方的类。 然后调用方法实现，给方法实现传递接收对象（一个指向其数据的指针），以及为该方法指定的任何参数。 最后，它传递方法实现的返回值作为其自身的返回值。 注意： 编译器生成messaging function的调用。你不必在代码中直接调用。 消息传递的关键在于编译器为每个类和对象构建的结构。每个类结构包括以下两个基本的元素： 一个指向 superclass的指针。 一个调度表。该表具有将方法选择器method selector与它们识别的方法的类的特定地址相关联的条目。OC中的setOrigin::方法的selector和实现setOrigin::的地址关联；display method的selector和 display的地址关联。 当一个新对象创建的时候，内存已经初始化，他的实例变量也初始化。在这个对象变量的首位是一个指向他类结构的指针。这个指针就是 isa 指针，让对象方位到他的类而且通过这个类能找到所有这个类的继承来源。 注意：尽管不是该语言的一部分，但isa指针是一个对象与Objective-C运行时系统一起使用所必需的。 一个对象需要与一个struct objc_object（在objc / objc.h中定义的）在这个struct定义的任何字段中“等效”。 如果你很少需要创建自己的root object，那么从NSObject或NSProxy继承的对象自动具有isa变量。 这些类的元素和对象结构表示如下： 当消息发送给对象时，messaging function跟随这个对象的isa指针指向到的类结构，并且messaging function在这个类结构的调度表中查找 method selector。如果在这个类结构里找不到selector，objc_msgSend会跟随指向superclass的指针，并尝试在superclass的调度表中找selector。如果连续失败，会导致objc_msgSend一直在类层级中向上寻找，一直找到NSObject类。一旦它找到了selector，messaging function将调用进入表中的method并将接收对象的数据结构传递给他。 这是在运行时如何选择（找到）方法实现的方式 &#8211; 或者，在面向对象编程的术语中，方法（负责实现的）是动态绑定到消息（负责调用的）的。 为了加速消息传递过程，运行时系统在使用方法时缓存selector和实现method的地址。每个类都有一个单独的缓存，它可以包含继承method的selector以及类中定义的method。在搜索调度表之前，消息传递例程首先检查接收对象类的缓存（理论上曾经使用过的方法可能会再次使用）。如果方法选择器在缓存中，则消息传递仅比函数调用慢一点。一旦程序运行了足够长的时间来让缓存“热身”，几乎所有发送的消息都会找到一个缓存的方法。程序运行时，缓存会动态增长以适应新的消息。 使用隐藏的参数 当 objc_msgSend 找到方法实现的步骤，他会调用实现并且给方法实现传递所有参数。他也会传递两个隐藏参数给这个实现，这两个参数是：接收对象，method的selector 这些参数给每个方法实现明确的、关于调用它的消息表达式的两部分信息。这两个参数称为“隐藏”因为他们不在一定义的method的源码中公开。他们在编译时插入到实现中。 虽然参数不是显示公开的，源码依然能引用他们（和源码引用接收对象的实例变量一样）。方法将接收对象称为self，他自己的选择器是_cmd。下面的例子中，_cmd指代Strange方法，self指代接收strange消息的对象： &#8211; strange { id  target = getTheReceiver(); SEL method = getTheMethod(); if ( target == self &#124;&#124; method == _cmd ) return nil; return [target performSelector:method]; } self是两个参数中比较常用的那个。事实上，self是接收对象的实例变量对method 定义起作用的一种方式。 得到一个方法的地址 避免动态绑定的唯一方法就是得到一个方法的地址，如果是一个函数就直接调用他。这在某些少量场景中使用，比如一个特殊的方法会被调用很多次，你想避免每次方法执行是都进行消息传递时。 用在NSObject中定义的methodForSelector：方法，你可以求得一个指向实现方法步骤的指针，然后使用这个指针来调用实现步骤。methodForSelector放回的指针必须被小心的转换城何时的函数类型。返回类型和参数类型都应该被包含近转换中。 下面的例子显示了setFilled方法的实现步骤，可能会以下面的方式调用： void (*setter)(id, SEL, BOOL); int i; setter = (void (*)(id, SEL, BOOL))[target     methodForSelector:@selector(setFilled:)]; for ( i = 0 ; i &#60; 1000 ; i++ )     setter(targetList[i], @selector(setFilled:), YES); 上面例子中，前两个传递给方式实现的参数是：接收对象（self）和method selector（_cmd）.这些参数在method愈发中是隐藏的，但是在方法作为函数调用时，必须被显示标明。 使用 methodForSelector 方法来避免动态绑定省去了messaging需要的时间，但是，只有当一个特定的消息被重复多次时，节省的成本才会显著，比如在 for 循环中。 注意，methodForSelector是Cocoa runtime系统的，不是OC语言的一个feature。 动态方法解析 Dynamic Method Resolution 接下来描述你如何动态的提供一个方法实现。<a class="moretag" href="https://www.zhaojianfei.com/archives/724"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/724/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Framework 编程指南文档笔记 （下）创建framework指南，FrameWork Progremming Guide</title>
		<link>https://www.zhaojianfei.com/archives/716</link>
		<comments>https://www.zhaojianfei.com/archives/716#respond</comments>
		<pubDate>Sun, 13 May 2018 10:54:41 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=716</guid>
		<description><![CDATA[全局命名空间中的元素（例如类，函数和全局变量）应该都具有唯一的名称。 虽然两级命名空间可帮助dynamic linker在运行时找到正确的符号，但该功能不会防止由于多重定义的符号而出现静态链接错误。 例如，假设两个不同的Framework 定义了一个具有相同名称的符号。 如果你要创建一个包含这两个Framework 的项目，那么如果引用了相关符号，则会遇到静态链接错误。 静态链接器负责选择使用哪个Framework ，然后生成dynamic linker所需的两级命名空间提示。 因为两个Framework 都定义了符号，所以静态链接器不能选择并生成错误。 ]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/716/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Framework 编程指南文档笔记 （上）FrameWork progremming guide</title>
		<link>https://www.zhaojianfei.com/archives/713</link>
		<comments>https://www.zhaojianfei.com/archives/713#respond</comments>
		<pubDate>Sat, 12 May 2018 12:32:51 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=713</guid>
		<description><![CDATA[OS X作为桌面操作系统，大量使用framework来分发共享代码和资源。framework是一个层级目录，包含了共享的资源的单个包package，比如一个动态共享库，nib文件，image文件，localized string 文件，header文件和引用文档。多个app可以同时访问这些资源。系统按需要加载这些资源到内存，共享一份资源的copy给需要的app。 framework也是一个捆绑包，它的内容可以使用Core Foundation Bundle服务或Cocoa NSBundle类来访问。但是，与大多数bundle不同，framework bundle不会作为不透明文件出现在Finder中。 framework bundle是用户可以导航的标准目录。 这使得开发人员可以更轻松地浏览框架内容并查看任何包含的文档和头文件。 framework与static和dynamic  shared library具有相同的用途，即它们提供了可由应用程序调用以执行特定任务的例程库。 例如，Application Kit和Foundation框架为Cocoa类和方法提供了编程接口。 与static-linked libraries和其他类型的动态共享库相比，框架提供了以下优势： Frameworks将相关但独立的资源组合在一起。这个分组方便安装、卸载和定位这些资源。 Frameworks比libraries能包含更广泛种类类型的资源。比如，一个 framework能包含任意相关header file和文档。 同一个bundle能包含多个版本的framework，这让向下兼容旧版本程序成为可能。 无论有多少进程正在使用这些资源，在任何给定时间，只有一个框架的只读资源副本在物理内存中驻留。 这种资源共享减少了系统的内存占用量，并有助于提高性能。 注意: Frameworks 不要求提供编程接口，能仅仅只包含资源文件，虽然这种使用并不常见。 Darwin层包含许多 静态和动态库，但是除此之外，大部分OS X的接口被打包为frameworks。某些关键库为几个较小但相关的框架提供方便的分组 ，包扩 Carbon，Cocoa，Application Services, and Core Services。这些framework 分组成为umbrella frameworks，他们作为一种技术和实现技术的sub-framework之间的抽象层。 除了使用系统框架，你可以创建你自己的framework，私有的使用他们或者公开给其他开发者。私有framework适用于你想在app中使用的代码模块，但是不想让其他人使用。公开的framework意在被其他开发这使用，经常包含头文件和定义了framework公开接口的文档。 Framework bundle的概念 在OS X中，shared resources使用standard framework和umbrella framework进行打包。 这两种类型的框架都具有相同的基本结构，并且可以包含诸如shared library，nib文件，image文件，strings文件，information property list，文档，头文件等资源。 umbrella framework为标准框架结构添加了小的改进，例如包含其他框架的能力。 framework以bundle结构打包。 framework bundle目录以.framework扩展名结尾，与大多数其他bundle不同，framework bundle作为目录而不是文件呈现给用户。 这种开放性使开发人员可以轻松浏览框架中包含的任何头文件和文档。 Framework bundle的结构 Framework bundles 使用的bundle 结构和app使用的不同。framework 使用的bundle基于早期的bundle 格式，允许多个版本代码和头文件存储在bundle内。这个bundle类型孰知为 versioned bundle。允许旧版本app继续运行，即便是 framework binary文件在不停的发展更新。 系统通过在目录名上使用 .framework 扩展名来标识一个 framework，并且标识 Resources目录 在Framework bundles的顶层。在Resource 目录内部有info.plist 文件，包含了 bundle的标识信息。实际的Resource 目录不必居于bundle的顶层。实际上，OS X附带的系统框架在这个位置上与框架的resource目录有一个符号链接。该链接指向资源目录的当前版本，隐藏在bundle中的某个地方。 Resource 目录的内容和app bundle 类似。本地化资源放入language-specific子目录，使用.lproj扩展名。这些子目录持有 strings, images, sounds和 本地化 界面定义，通过目录表达出来。非本地化信息放在Resource 目录的顶层。 Framework的版本 当在Xcode中构建一个新framework是，构建环境为你自动创建了一个bundle 结构版本。 如下表： 这个图中，Versions目录是bundle在顶层的唯一真实目录。MyFramework和 Resource都是符号连接，连接到 Versions/A里的items。符号连接的原因是：一个Versions/A目录包含实际framework的内容。包含framework的可执行部分和资源。 上图显示了顶层符号链接不直接指向Versions / A目录中的项目。相反，它们指向Versions/Current目录中的项目，它本身是指向Versions / A的符号链接。这种额外的间接级别简化了更改具有多种资源类型的框架的顶层链接以指向框架的特定主要版本的过程，因为只需要更新一个链接Versions/Current版本。 下图显示多个版本的framework &#160; 通过Versions/Current符号链接，MyFramework.framework / MyFramework指向当前版本的框架Versions/ B / MyFramework的动态共享库。 由于使用符号链接，在程序链接过程中，链接程序会查找框架库的最新版本。 这种安排可确保新程序与最新的主要版本框架相链接，并且随早期主要版本框架构建的程序继续保持不变。 有关使用动态库的更多信息，请参阅Dynamic Library Programming Topics. 重要： 为了让链接器linker找到并链接动态库，框架的名称（不带.framework扩展名）、符号链接、和动态库必须相同。 额外的目录 framework 经常不仅仅包含 Resources 目录。比如，Header，Documentation和Libraries。因此，给上面的例子图片添加一个Headers目录会有下图的结果： 为了在framework中创建额外的目录，您必须将构建阶段（build phases）添加到Xcode中的相应target中。Copy Files build phases能让你创建目录，复制选中文件到这些目录。下表显示常用目录： Directory Description Headers 包含你想暴露给外部人员的头文件 Documentation 包含HTML，PDF等描述framework 接口的文件。一般，不会在顶层目录，而是在语言资源文件夹中。 Libraries 包含任意次选的你framework需要的动态库 Framework 配置 Framework需要与任何其他类型的软件包相同的配置。 在Framework的信息属性列表中，您应该包含下图中列出的键。当您在Xcode中设置框架属性时，大多数这些键都会自动包含，但您必须手动添加一些键。 Key Description CFBundleName The framework display name CFBundleIdentifier The framework identifier (as a Java-style package name) CFBundleVersion The framework version CFBundleExecutable The framework shared library CFBundleSignature The framework signature CFBundlePackageType The framework package type (which is always &#8216;FMWK&#8217;) NSHumanReadableCopyright Copyright information for the framework CFBundleGetInfoString A descriptive string for the Finder 由于Framework永远不会直接与文档关联，因此您不应指定任何文档类型。如果您愿意，您可以包含显示名称信息。 Umbrella Framework Bundle 结构 Umbrella<a class="moretag" href="https://www.zhaojianfei.com/archives/713"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/713/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bundle编程指南文档笔记 Bundle Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/710</link>
		<comments>https://www.zhaojianfei.com/archives/710#respond</comments>
		<pubDate>Fri, 04 May 2018 08:00:14 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=710</guid>
		<description><![CDATA[Bundle时macOS和iOS的基础架构技术，用于封装代码和资源。bundle通过提供需要资源的已知位置的方式， 简化了开发者需要创建组合二进制文件的工作。bundles使用目录和文件提供更自然的组织类型——一种可以被在开发时和发布时都能修改的类型。 为了支持bundle，Cocoa和Core Foundation 提供了编程接口来访问bundles的内容。因为bundle使用一个有组织的结构，所有developer 理解bundle的基本组织规划是重点。 Bundle 和 Packages 尽管bundle和package 差不多，但是他们有非常不同的理念： A package 是一个 Finder 呈现给 用户的任何目录，有如 单个文件一样。 A bundle 是一个有标准目录结构，持有可执行code和code使用资源的目录。 Packages提供了一个基本的抽象，让macOS方便使用。如果你查看你电脑的的app或者插件，实际上看的是一个目录。package目录内部是能让app运行的代码和资源文件。当你和package文件交互式，Finder把它视为一个文件。这种行为可以防止普通用户做出可能对包的内容产生负面影响的更改。比如，防止用户重新打包或者删除资源或者代码模块，组织app正确运行。 注意： 尽管默认情况下  package被视为不透明文件，但用户仍然可以查看和修改其内容。 在包目录的上下文菜单上是Show Package Contents命令。 选择此命令将显示一个新的Finder窗口，该窗口设置为  package目录的顶层。 用户可以使用这个窗口来导航  package的目录结构并进行更改，就好像它是常规的目录层次结构一样。 虽然  package 可以改善用户体验，但  package更适合帮助开发人员打包代码并帮助操作系统访问该代码。   package定义了组织与软件相关的代码和资源的基本结构。 这种结构的存在也有助于促进诸如本地化等重要功能。 bundle 的确切结构取决于您是在创建app、framework还是plug-in。 它还取决于其他因素，例如目标平台和插件类型。 bundle and package 的使用原因有时被认为是可以互换的，许多类型的bundle也是package。 例如，可以装入App的一个bundle 可以视为一个packlage，因为它们通常被系统视为不透明的目录。 然而，并非所有的bundle都是package，反之亦然。 系统如何识别bundle和package 以下情况下，Finder会把目录看作一个 package： 目录有以下扩展名： .app, .bundle, .framework, .plugin, .kext 等 目录有某些其他app要求描述 package 类型的扩展名；请参考 Document Packages 目录的package bit已经设置 推荐指定一个package的方式是赋予一个给定的package 扩展名。大部分情况，Xcode 用 模板 来提供合适的扩展名。大部分bundle 也是 package。比如， app和插件是典型被finder 表示为单个文件。但是，这不是所有的 bundle 类型。特别是，framework是一种类型的bundle，它被当作一个单独的单元来处理，目的是为了链接和运行时使用，但是framework 目录 是透明的，这样开发者可以查阅 header 文件和其他包含的资源。 关于 bundle 的显示名 显示名使用户可以控制Finder在Finder中的显示方式，而不会破坏依赖它们的客户端。尽管用户可以自由重命名文件，但重命名应用程序或框架可能会导致相关代码模块按名称引用应用程序或框架。因此，当用户更改一个包的名称时，这种改变只是表面的。 Finder不是在文件系统中更改包名称，而是将一个单独的字符串（称为显示名）与该包相关联，然后显示该字符串。 显示名仅用于向用户呈现。您从不使用显示名打开或访问代码中的目录，但在向用户显示目录名称时使用它们。默认情况下，bundle的显示名与软件包名称本身相同。但是，在以下情况下，系统可能会更改默认的显示名： 如果该包是一个应用程序，Finder在大多数情况下隐藏.app扩展名。 如果该软件包支持本地化显示名称（并且用户未明确更改软件包名称），则Finder会显示与用户当前语言设置相匹配的名称。 尽管Finder大多数时候隐藏应用程序的.app扩展名，但它可能会显示它以防止混淆。例如，如果用户更改应用程序的名称，并且新名称包含另一个文件扩展名，Finder将显示“.app”扩展名以明确该bundle是一个应用程序。例如，如果要将.mov扩展名添加到Chess应用程序，则Finder将显示Chess.mov.app，以防止用户认为Chess.mov是QuickTime文件。 Bundle的好处 Bundle为开发人员提供以下优势： 因为bundle是文件系统中的目录层次结构，所以bundle只包含文件。因此，您可以像打开其他类型的文件一样，使用所有基于文件的相同界面来打开Bundle资源。 Bundle目录结构可以轻松支持多个本地化。您可以轻松添加新的本地化资源或删除不需要的资源。Bundle可以驻留在多种不同格式的文件系统上，包括HFS，HFS +和AFP等多种分叉格式，以及UFS，SMB和NFS等单叉格式。 用户只需在Finder中拖动它们即可安装，重新定位和删除Bundle。 Bundle也是package，因此被视为不透明文件，因此不易受到意外用户修改的影响，例如删除，修改或重命名关键资源。 一个bundle可以支持多种芯片架构（PowerPC，Intel）和不同的地址空间要求（32位/ 64位）。它也可以支持包含专门的可执行文件（例如，针对特定矢量指令集优化的库）。 大多数（但不是全部）可执行代码可以Bundle在一起。应用程序，框架（共享库）和插件都支持bundle模型。静态库，动态库，shell脚本和UNIX命令行工具不使用bundle结构。 Bundle的应用程序可以直接从服务器运行。本地系统上不需要安装特殊的共享库，扩展和资源。 Bundle的类型 尽管所有bundle都支持相同的基本功能，但您定义和创建定义其用途的bundle的方式有所不同： 应用程序 &#8211; 应用程序bundle管理与可启动进程相关的代码和资源。此bundle的确切结构取决于您所定位的平台（iOS或MacOS）。有关应用程序bundle结构的信息，请参阅Application Bundles。 框架 &#8211; framework bundle管理动态共享库及其相关资源，例如头文件。应用程序可以链接到一个或多个framework，以利用它们包含的代码。有关framework bundle结构的信息，请参阅Anatomy of a Framework Bundle。 插件 &#8211; macOS支持许多系统功能的插件。插件是应用程序动态加载自定义代码模块的一种方式。以下列表列出了您可能想要开发的一些主要插件类型： 自定义插件是您为自己的目的定义的插件;参见 Anatomy of a Loadable Bundle. 。 Image Unit插件为Core Image技术添加自定义图像处理行为;请参阅Image Unit Tutorial.。 Interface Builder插件包含要集成到Interface Builder库窗口中的自定义对象。 Preference Pane plug-ins 定义您想要集成到系统偏好设置应用程序中的自定义偏好;请参阅Preference Pane Programming Guide。 Quartz Composer插件为Quartz Composer应用程序定义自定义补丁;Quartz Composer Custom Patch Programming Guide.。 Quick Look插件支持使用Quick Look显示自定义文档类型;请参阅Quick Look Programming Guide. 。 Spotlight插件支持自定义文档类型的索引，以便用户可以搜索这些文档;请参阅Spotlight导入器编程指南。 WebKit插件扩展了常用Web浏览器支持的内容类型。 小组件将新的基于HTML的应用程序添加到仪表板。 尽管文档格式可以利用bundle结构来组织其内容，但文档通常不被视为最纯粹意义上的bundle。无论其内部格式如何，作为目录被实现并被视为不透明类型的文档都被视为文档包。有关文档包的更多信息，请参阅Document Packages。 创建一个 Bundle 通过Xcode直接创建。某些 Xcode的tagets（比如 shell tools和静态库）不会引发bundle 或者 package的创建。因为同城不需要为这些targets创建bundle。 编程支持来访问 bundles 引用bundle的程序或捆绑在一起的程序可以利用Cocoa和Core Foundation中的接口来访问bundle的内容。 使用这些接口，您可以找到bundle软件资源，获取有关buncle软件配置的信息，并加载可执行代码。 在Objective-C应用程序中，您使用NSBundle类来获取和管理bundle信息。 对于基于C的应用程序，您可以使用与CFBundleRef opaque类型关联的函数来管理一个bundle。 注意：与许多其他Core Foundation和Cocoa类型不同，NSBundle和CFBundleRef不是toll-free桥接数据类型，不能互换使用。 但是，您可以从任一对象中提取bundle路径信息，并使用它创建另一个对象。 使用 bundles 指南 在MacOS和iOS中，bundle是首选的软件组织机制。bundle结构允许您将可执行代码和资源分组在一个地方并以有组织的方式支持该代码。以下准则提供了关于如何使用bundle软件的其他建议： 始终在您的bundle中包含信息属性列表（Info.plist）文件。确保包含推荐用于bundle类型的密钥。有关可包含在此文件中的所有密钥的列表，请参阅Runtime Configuration Guidelines. 。 如果应用程序无法在没有特定资源文件的情况下运行，请将该文件包含在应用程序bundle中。应用程序应始终包含所有需要操作的image，strings file，本地化资源和plug in。非关键资源应尽可能地存储在应用程序bundle内，但可能会在需要时放置在包外。有关应用程序的bundle包结构的更多信息，请参阅Application Bundles.。 如果您打算从一个bundle中加载C ++代码，则可能需要将您打算加载的符号标记为extern “C”。 NSBundle和Core Foundation CFBundleRef函数都不知道C ++名称修改约定，所以用这种方式标记符号可以使它更容易在以后识别它们。 您不能使用NSBundle类来加载Code<a class="moretag" href="https://www.zhaojianfei.com/archives/710"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/710/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>核心动画编程指南官方文档笔记（下） Core Animation Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/704</link>
		<comments>https://www.zhaojianfei.com/archives/704#respond</comments>
		<pubDate>Mon, 16 Apr 2018 08:25:32 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=704</guid>
		<description><![CDATA[接上文。本文主要包括 如何构建一个layer 的层次结构 / 高级动画的操作 / 如何改变layer的默认行为 / 如何提升动画性能 构建一个Layer的层次结构 大部分时间，最好的在app中使用layer的方式是和view object一起使用。可是，也有需要通过添加额外的layer object到现有view 层级（为了增强视图层级）的时候。在这样做时，你可能会使用layers，这样可以提供更好的性能。或者，让你能实现一个单独使用视图而难以实现的特性。在这种情况下，您需要知道如何管理 创建的layer层次结构。 重要： 在OS X 10.8以上版本，推荐最小化使用layer的层级机构，只使用 layer-backed views。layer 重绘机制允许您自定义layer-backed view的layer的行为，并且仍然能比使用单独的layer提升性能。 把Layer 加入到一个 Layer Hierarchy中 / Arranging Layers into a Layer Hierarchy Layer hierarchies 和 view hierarchy非常相似。通过嵌入一个 layer 到另一个，让layer有 类似 parent-child的关系。被嵌入的layer，即sublayer，parent layer，即superlayer。这个关系影响sublayer的许多方面。比如：sublayer的内容 在parent上（above），他的位置和parent的坐标系关联，会收到parent的transform影响。 添加，插入，删除 sublayers Behavior Methods Description Adding layers addSublayer: 添加一个新的sublayer object Inserting layers insertSublayer:above: insertSublayer:atIndex: insertSublayer:below: 插入 sublayer Removing layers removeFromSuperlayer 删除sublayer Exchanging layers replaceSublayer:with: 用一个代替另一个（先删除一个） 在使用自己创建的图层对象时，可以使用上述方法。你不会使用这些方法来排列属于layer-backed 视图的图层。但是，layer-backed 的视图可以作为你创建的独立layer的父层。 调整 sublayer 的位置和大小 添加和插入子图层时，必须在子图层出现在屏幕上之前设置子图层的大小和位置。 您可以在将子图层添加到图层层次结构后修改其大小和位置，但应该习惯于在创建图层时设置这些值。 您可以使用bounds属性设置子图层的大小，并使用position属性在其superlayer中设置其位置。 边界矩形的原点几乎总是（0，0），并且大小与点中指定的图层的大小无关。 位置属性中的值相对于图层的锚点进行解释，该锚点默认位于图层的中心。 如果不为这些属性赋值，Core Animation会将图层的初始宽度和高度设置为0，并将位置设置为（0，0）。 myLayer.bounds = CGRectMake(0, 0, 100, 100); myLayer.position = CGPointMake(200, 200); 重要： layer的长款属性永远都是整形 Layer hierarchies如何影响动画 某些superlayer的属性可能会影响应用于其子图层的动画行为。比如速度speed属性，它是动画速度的乘积。该属性的值默认设置为1.0，但将其更改为2.0会使动画以原始速度的两倍运行。该属性不仅影响其设置的图层，还影响该图层的子图层。这种变化也是可乘的。如果子图层和其superlayer的速度均为2.0，则子图层上的动画将以其原始速度的四倍运行。 大多数其他层的更改影响包含的子层的方式是可预测的。例如，将旋转变换应用到图层会旋转该图层及其所有子图层。同样，更改图层的不透明度会更改其子图层的不透明度。对图层大小的更改遵循调整图层层次结构的布局中所述的布局规则。 调整 你的 Layer hierarchies的布局 Core Animation 支持调整sublayer的位置和size的几个选项，来响应sublayer的变化。iOS中，普遍使用 layer-backed views，这让创建 Layer hierarchies不是那么重要；只有手动布局更新被支持。对OS X来说，几个可用的其他选项让管理Layer hierarchies变得简单。 Layer级别的布局仅仅和你正在使用 单独 layer object 构建的 Layer hierarchies 有关。如果你的 app layer和view关联，使用 view-base的布局来更新视图。 在OS X中，用 约束管理 Layer hierarchies 约束使您可以使用layer及其superlayer或同层图层之间的一组详细关系指定图层的位置和大小。定义约束需要以下步骤： 创建一个或多个CAConstraint对象。使用这些对象来定义约束参数。 将您的约束对象添加到其修改属性的图层。 检索共享的CAConstraintLayoutManager对象并分配给直接super  layer。 下图显示了可用于定义约束的属性以及它们影响的图层的方面。您可以使用约束根据相对于其他图层的中点边缘位置来更改图层的位置。您也可以使用它们来更改图层的大小。您所做的更改可以与superlayer或与其他图层相关的比例成比例。您甚至可以为所产生的更改添加比例因子或常数。这种额外的灵活性可以使用一套简单的规则非常精确地控制图层的大小和位置。 每个约束对象封装沿同一轴的两个层之间的几何关系。 每个轴最多可以分配两个约束对象，而这两个约束可以决定哪个属性可以更改。 例如，如果您为图层的左侧和右侧边缘指定约束，则图层的大小会发生变化。 如果您为图层的左边缘和宽度指定约束，则图层右边缘的位置会更改。 如果您为其中一个图层的边指定单个约束，则Core Animation会创建一个隐式约束，以便将该图层的大小保持在给定维中。 创建约束时，您必须始终指定三条信息： 您想要约束的图层的方面 要用作参考的图层 比较中使用的参考图层的方面 下图显示了一个简单的约束，将一个图层的垂直中点固定到其上层的垂直中点。 引用superlayer时，请使用字符串superlayer。 这个字符串是保留用于引用superlayer的特殊名称。 使用它可以避免需要指向图层的指针或知道图层的名称。 它还允许您更改superlayer并将约束自动应用于新父级。 （在创建与兄弟图层相关的约束时，必须使用其名称属性标识兄弟图层。 [myLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMidY relativeTo:@&#8221;superlayer&#8221; attribute:kCAConstraintMidY]]; 要在运行时应用约束，您必须将共享的CAConstraintLayoutManager对象附加到需要的superlayer。每层负责管理其子层的布局。将布局管理器分配给父级会告诉Core Animation应用其子级定义的约束。布局管理器对象自动应用约束。将它分配给父层后，不必告诉它更新布局。 要查看更具体情况下的约束如何工作，请考虑下图。在这个例子中，设计要求layerA的宽度和高度保持不变，并且layerA保持居中在它的超层中。另外，层B的宽度必须与层A的宽度相同，层B的顶部边缘必须保持在层A的底部边缘以下10个点，并且层B的底部边缘必须保持超过层的底部边缘10个点。下图显示了您将用于为此示例创建子层和约束的代码。 // Create and set a constraint layout manager for the parent layer. theLayer.layoutManager=[CAConstraintLayoutManager layoutManager]; // Create the first sublayer. CALayer *layerA = [CALayer layer]; layerA.name = @&#8221;layerA&#8221;; layerA.bounds = CGRectMake(0.0,0.0,100.0,25.0); layerA.borderWidth = 2.0; // Keep layerA centered by pinning its midpoint to<a class="moretag" href="https://www.zhaojianfei.com/archives/704"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/704/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>核心动画编程指南官方文档笔记（上） Core Animation Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/683</link>
		<comments>https://www.zhaojianfei.com/archives/683#respond</comments>
		<pubDate>Thu, 12 Apr 2018 09:04:30 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=683</guid>
		<description><![CDATA[PS： 太长了，分成两部整理。上半部是 Core Animation基础知识/如何设置 layer object/如何配置基本的动画 核心动画（Core Animation）是一种在iOS和OSX上都可用的图形渲染和动画的基础框架，你可以使用它来让view和其他虚拟元素具有动画特效。Core Animation替你完成了大部分的动画的绘制每帧的工作。你需要做的是配置一些动画参数（比如开始点和结束点）、通知Core Animation启动它。Core Animation负责鱼虾的工作，处理大部分实际的绘制工作到图形硬件来加速绘制。这个自动图形加速具有高帧率（frame rate）和柔和动态效果，并且不会加重CPU的负担拖慢你的app。 如果你编写iOS Apps，无论你是否了解Core Animation，你都正在使用它。如果你写OSX Apps，你可以通过非常少的代价来利用Core Animation。结构上，它在AppKit和UIKit的底层，并被紧密地联系到Cocoa和Cocoa Touch的视图view工作流程中。当然，Core Animation也有用来扩展你app 视图暴露的功能，让你更深入（fine-grained）细致的控制你app的动画。 &#160; Core Animation 管理你App的内容。Core Animation不是一个绘制系统，他是一个在硬件上操作和组合你app内容的基础结构。这个结构的核心是 layer objects，你使用layer objects来管理和操作内容。一个 layer 捕捉你的内容到一个bitmap（可以轻易的图形硬件操作）。在大部分的app中，layers被用来作为管理视图内容的一个方式，但你也能根据需要创建独立的layers。 Layer的修改触法动画。大部分你使用Core Animation创建的动画启动了对layer属性的修改。比如 views：layer objects 有一个矩形方位、一个屏幕上的位置、一个透明属性，一个trasform 变换和许多其他可以被修改的视觉导向的属性。对于大部分这些属性来说，改变属性值导致隐式动画的创建，从而使图层从旧值动画到新值。当你需要更多控制动画行为的时候，你也可以显示改变这些属性。 Layer可以被组织到层级结构中。layer可以被按照层级关系排列来实现类似parent-child 关系。图层的排列类似于视图的方式管理的视觉内容。附加到视图的一组图层的层次结构反映了相应的视图层次结构。你也可以单独的添加layer到一个layer层级中来扩展视觉内容。 Actions让你改变layer的默认行为。隐式layer 动画是由action objects实现的，它是一个实现预定义接口的一半对象。Core Animation 使用action objects 来实现指定给layers的默认动画集合。你可以创建自己的action objects来实现定制动画，或者使用action objects来实现其他类型的行为。只需要把你的action object分配给layer的属性之一。当属性变化时，Core Animation取到你的action对象、启动他的action。 Core Animation 基础 Core Animation 为 动画view和其他视觉元素提供了一个通用系统。Core Animation 不是app views的替代品。相反，他是一种结合视图来提供更好的性能和更好支持动态化内容的技术。通过缓存能被图形硬件直接操作的视图内容到bitmaps来实现。在某些情况下，这种缓存行为可能需要你重新思考如何呈现和管理你app的内容，但大部分情况，你不需要考虑这些，直接使用即可。除了缓存视图内容外，Core Animation还定义了一种指定任意可视内容、将该内容与视图集成、并与其他所有内容一起进行动画制作的方法。 你使用Core Animation来动态化改变你app的视图和视觉对象。大部分改变和修改视觉对象的属性有关。比如：你可能使用Core Animation来动画改变一个view的位置、size、或者透明度。当你做这个修改的时候，Core Animation在当前属性值和你指定的新值之间执行动态化。一般你不用使用Core Animation 60次/秒 替换一个view的内容，比如在一个卡通中。相反，你使用Core Animation围绕着屏幕移动视图内容，淡入或者淡出，实现任意图形变换，或者改变view的其他视觉属性。 Layers 提供了绘制和动画的基础 Layer objects是在3D空间内组织的2D平面，是和所有Core Animation有关操作的核心。像View一样，layers管理关于几何图形，内容和他们的平面的视觉属性等。但是与view不同的是，layers不定义自己的外观显示。一个layer 仅仅管理bitmap周围的状态信息。这个bitmap可以是一个视图的绘制结果或者一个你指定的合适的图片。所以，app中的main layer被认为是model object，因为他们主要管理数据。这是一个重要的要被记住的概念，因为它影响了动画的行为。 基于 Layer的 绘制模型 在APP中，大部分layer 不做实际的绘制工作。一个 layer 拥有你app提供的内容，缓存到一个bitmap中（有时被称为backing store）。当你随后改变这个layer的一个属性时，所有你在做的就是改变指定给layer object的状态信息。当一个改变出发一个动画，Core Animation传递layer的bitmap和状态信息到图形硬件，硬件负责用新信息绘制bitmap，如图，在硬件中操作bitmap 会比在软件中产生更快的动画。 因为硬件操作一个静态的bitmap， 基于layer绘制和更传统的基于view的绘制技术不同。使用view based 绘制，改变view自己经常是导致调用了view的drawrect方法，使用新参数来重绘内容。但是这种绘制方式代价昂贵因为使用了cpu的主线程。Core Animation 可以通过在硬件中操作缓存的位图来避免这种开销，从而达到相同或相似的效果。 尽管Core Animation尽量多的使用缓存内容，但是你app仍然必须提供内容的初始化和经常更新内容。有几种方法，将会在 Providing a layers content里描述。 基于Layer的动画 Layer对象的数据和状态信息和layer屏幕内容的视觉呈现解耦。这种解耦给Core Animation提供了一种方式来插入自己和动态化旧值到新值。比如，改变一个layer的位置引发Core Animation从他的当前位置移动到一个新置顶位置。其他属性导致的动画类似。如图，显示了一些动画类型。 在动画过程中，Core Animation做了所有 frame-by-frame的工作，在硬件中绘制。你只需要指定动画的开始和结束点、让Core Animation做剩下的工作。你也可以指定自定义时机信息和动画属性；但是如果你不需要的话，Core Animation 提供了合适的默认值。 Layer 对象定义自己的集合图形 Layer的工作之一是为自己的内容管理视觉图形。视觉几何图形包括了关于他的屏幕位置和layer是否被rotated，scaled或任何方式的变换等内容范围的信息。和view一样，一个layer有frame和bounds 矩形，你可以使用它来定位layer和他的内容。layers 也有views没有的其他属性，比如一个锚点anchor point（定义了操作发生的点）。你指定layer几何图形的某些方面的方式也与为视图指定该信息的方式不同。 Layers 使用两种坐标系统 图层利用基于点的坐标系和单位坐标系来指定内容的位置。使用哪个坐标系取决于传送的信息的类型。指定直接映射到屏幕坐标的值时必须使用基于点的坐标，或者必须指定相对于其他图层的值（例如图层的位置属性）。当值不应与屏幕坐标相关时使用单位坐标，因为它与其他值相关。例如，图层的anchorPoint属性指定了一个相对于图层本身bounds的点，它可以改变。 基于点的坐标最常见的用途是指定图层的大小和位置，您可以使用图层的bounds和位置属性进行确定。bounds定义了图层本身的坐标系，并包含了图层在屏幕上的大小。 position属性定义了图层相对于其父坐标系的位置。尽管图层具有frame属性，但该属性实际上是从bounds和位置属性中的值导出的，并且使用频率较低。 图层bounds和frame矩形的方向始终与底层平台的默认方向匹配。如图：显示了iOS和OS X上bounds矩形的默认方向。在iOS中，默认情况下，bounds矩形的原点位于图层的左上角，而在OS X中，它位于左下。如果您在iOS和OS X版本的应用程序之间共享Core Animation代码，则必须考虑这些差异。 锚点影响集几何图形操作 与图层的几何图形相关的操作在该图层的锚点发生，您可以使用图层的anchorPoint属性访问该锚点。处理图层的位置或变换属性时，锚点的影响最为明显。位置属性始终是相对于图层的锚点指定的，并且应用于该图层的任何转换也会相对于锚点发生。下图演示了如何将锚点从其默认值更改为不同的值影响图层的position属性。即使图层没有在其父母的范围内移动，将定位点从图层中心移动到图层的边界原点也会更改position属性中的值。 下图 显示了如何更改锚点影响应用于图层的transformation。当您对图层应用旋转变换时，旋转发生在锚点周围。由于默认情况下将锚点设置为图层的中间位置，因此通常会创建您所期望的那种旋转行为。但是，如果更改定位点，则旋转的结果会有所不同。 Layers可以在三维空间中操作 每个layer都有两个transform matrix，你可以用来操作他们和他们的内容。CALayer的transform属性指定了您想要同时应用于层和它的嵌入式子元素的转换。通常，当您想要修改层本身时，您可以使用该属性。例如，您可以使用该属性来缩放或旋转图层，或者暂时改变它的位置。sublayerTransform属性定义了仅应用于子图层的其他转换，并且最常用于将透视视觉效果添加到场景内容。 变换的工作方式是将坐标值乘以数字矩阵以获得代表原始点变换版本的新坐标。由于Core Animation值可以在三维中指定，每个坐标点有四个值，必须通过四乘四矩阵相乘，如图，在Core Animation中，图中的变换由CATransform3D类型表示。幸运的是，您不必直接修改此结构的字段以执行标准transform。 核心动画提供了一套全面的功能，用于创建scale，translation和rotation matrix以及进行矩阵比较。 除了使用函数来操作transform，Core Animation还扩展了kvc支持，允许您使用key path修改变换。 有关可以修改的key path表，请参阅CATransform3D的key path。 下图显示了可以进行的一些更常见转换的矩阵配置。 通过标识变换乘以任何坐标返回完全相同的坐标。 对于其他转换，坐标如何修改完全取决于您更改哪个矩阵组件。 例如，要仅沿着x轴进行平移，您将为平移矩阵的tx分量提供非零值，并将ty和tz值保留为0.对于旋转，您将提供适当的正弦和余弦值 目标旋转角度。 Layer tree反映了动画状态的不同方面 使用Core Animation的应用程序有三组layer objects。 每一组layer objects在使你的应用程序的内容出现在屏幕上时具有不同的作用： model layer tree中的对象（或简称为“layer tree”）是与您的应用交互最多的对象。 此树中的对象是存储任何动画的目标值的model对象。 无论何时更改layer的属性，都可以使用这些对象之一。 presentation tree中的对象包含任何正在运行的动画的过程（flight-in）值。 尽管layer tree对象包含动画的目标值，但presentation tree中的对象反映了屏幕上显示的当前值。 绝不应该修改此树中的对象。 相反，您可以使用这些对象来读取当前的动画值，也可以从这些值开始创建新的动画。 render tree中的对象 执行实际的动画，是私有的。 每组layer对象都组织成一个层次结构，就像app中的view一样。 事实上，对于为所有view启用layer的应用程序，每个tree的初始结构都与view层次结构完全匹配。 但是，应用程序可以根据需要将其他layer object（即未与view关联的layer）添加到layer分层结构中。 你可以在某些情况下执行此操作，以优化应用程序对不需要的view开销的内容的性能。 下图显示了在简单的iOS应用程序中找到的图层细分。 示例中的窗口包含一个内容视图，该视图本身包含一个按钮视图和两个独立的layer objects。 每个视图都有一个相应的layer object，构成layer层次结构的一部分。 对于layer tree中的每个对象，在presentation tree和render tree中都有一个匹配的对象，如下图所示。 如前所述，应用程序主要处理layer tree中的对象，但有时可能访问presentation tree中的对象。 具体而言，访问layer tree中对象的presentationLayer属性将返回presentation tree中的相应对象。 您可能想要访问该对象以读取动画中间属性的当前值。 重要：只有在动画正在进行时，才应访问presentation tree中的对象。 在动画进行过程中，presentation tree包含当前显示在屏幕上的layer值。 这种行为不同于layer树，它总是反映您的代码设置的最后一个值，它等同于动画的最终状态。 Layer和View的关系 layer不能代替您的应用视图 &#8211; 也就是说，您无法仅基于layer对象创建可视界面。layer为view提供基础结构。具体而言，layer可以更轻松，更高效地绘制视图内容并进行动画处理，并在此过程中保持较高的帧率。但是，有很多layer没有做的事情：layer不处理事件、绘制内容、参与响应者链或做许多其他事情。因此，每个应用程序都必须有一个或多个视图来处理这些交互。<a class="moretag" href="https://www.zhaojianfei.com/archives/683"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/683/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Core Text 编程指南官方文档笔记 Core Text Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/678</link>
		<comments>https://www.zhaojianfei.com/archives/678#respond</comments>
		<pubDate>Wed, 28 Mar 2018 12:00:29 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=678</guid>
		<description><![CDATA[关于Core Text Core Text 是一个高级，底层的布局文字和处理字体的技术。布局文字指通过字符编码和字体数据生成字形，然后在graph runs里控制他们的位置。他让graph runs在line中排列，然后把lines排列进multiline frames（比如一段文字）。Core Text 还提供字形和布局相关的数据，如字形位置和线条和框架的度量。它处理字符属性和段落样式，包括各种类型的标签样式和定位。 Core Text API提供了关于fonts, font collections, font descriptors，便捷的访问font 数据。 Core Text 概览 Core Text Overview Core Text在高级框架提供的文本布局和字体支持与Quartz提供给所有文本和字体框架的低级功能之间起中介作用。 Quartz框架负责对形及其位置起作用。Core Text了解字符如何映射到字体，在调用Quartz来呈现文本之前，它会考虑有关样式、字体度量和其他属性的信息。 Quartz是在基本级别上绘制字形的唯一方法，并且由于Core Text提供了Quartz可直接使用的所有数据，因此结果就是高性能的文本渲染。 多线程：Core Text 的函数可以被多线程同时调用，前提是客户机不会突然改变任何参数，比如：线程之间共享的属性字符串。 Core Text是基于C语言的，跨平台API  Core Text Is a C-based, Platform-Neutral API 虽然OS X版本提供了更丰富的字体管理API，包括可变字体集合，但iOS和OS X上的Core Text API几乎完全相同。但在平台之间移植代码时，必须考虑UIKit和AppKit之间的差异。例如，您必须有一个Quartz 的 graphics context来呈现Core Text生成的字形，并且您在每个平台上获得不同的graphics context。您在iOS中绘制的视图是iOS中的UIView子类，在OS X中是NSView子类。您应该知道，将CGRect对象传递给UIView drawRect：方法，而将drawRect：的OS X版本传递NSRect对象。 （您可以使用OS X中的NSRectToCGRect函数将传入的NSRect对象转换为作为核心文本函数参数所需的CGRect对象。） 由UIView函数UIGraphicsGetCurrentContext返回的graphics context相对于未修改的Quartzgraphics context（也就是UIView返回的上下文的起点位于左上角）翻转，因此您必须重新翻转iOS中的图形上下文但不在OS X中。 核心文本尽可能使用系统数据类型和服务，并且您在OS X和iOS中使用与其他核心框架相同的约定。例如，Core Text为许多输入和输出参数使用Core Foundation对象，因此可以将它们存储在Core Foundation集合类中。由Core Text处理的其他对象（如CGPath对象）由Core Graphics框架提供。 关于Core Text不透明类型 Core Text Opaque Types Core Text的布局引擎和attributed strings （CFAttributedStringRef）、graphics path（CGPathRef）协同工作。一个attributed string 对象封装了一个代表了显示文字的字符串，还有定义了字符串风格方面的对象——比如font，color。Core Text的排版机制使用attributed string里的信息执行字符—字形转换。 graphics path定义文字frame的形状。path可以不仅仅是矩形。 CFAttributedString 引用类型，CFAttributedStringRef，和NSAttributedString toll-free。意味着Core Foundation 类型在 桥接的 Foundation 对象里是可以互换的。因此，在一个你看见NSAttributedString * 参数的方法里，你可以传入CFAttributedStringRef。同样的，在一个 你看到的CFAttributedStringRef 的方法参数里，你可以传入NSAttributedString 的实例（你可能需要转化一种类型到另一种来解决编译器警告）。这个模式对NSAttributedString的子类也适用。 Attributes 是 kay-value pairs，定了字符串中字符的特征，Attributes被分组在共享相同属性的range内。属性本身被传递给属性字符串，并使用CFDictionary对象从属性中检索。要将样式style应用于graph run（CTRun对象），创建一个CFDictionary对象以保存要应用的属性，然后创建一个属性字符串，并将该字典作为参数传递。 或者，您可以将属性应用于已存在的CFMutableAttributedString对象。 尽管CFDictionaryRef和NSDictionary是toll-free的，但存储在字典中的单个属性对象可能不是。 运行时的Core Text对象形成一个层次结构，如图所示。这个层次结构的顶部是framesetter对象（CTFramesetterRef）。使用attributed strings（CFAttributedStringRef）和graphic path（CGPathRef）作为输入，frame setter会生成一个或多个text frame（CTFrameRef）。每个CTFrame对象都代表一个段落。   为了生成 frames，framessetter 调用一个 typesetter对象（CGTypesetterRef）对象。当这个typesetter 布局文字到一个frame时，framesetter 在上面应用段落风格，包括诸如alignment, tab stops, line spacing, indentation, and line-breaking mode等属性。typesetter 转换attributed strings里的字符为字形，排列这些字形到CFLines，填充一个frame。 每个CTFrame对象都包含段落的行（CTLine）对象。 每一行对象代表一行文本。 一个CTFrame对象可能只包含一个长的CTLine对象，或者它可能包含一组行。 Line 对象是在排版操作过程中由typesetter创建的，并且与frame一样，可以直接将其自身绘制到graphics context中。 每个CTLine对象都包含一个graph runs（CTRun）对象数组。 graph runs是一组具有相同属性和方向的连续字形。typesetter在字符串、属性和字体对象生成line时创建graph runs。 这意味着一个line是由一个或多个graph runs构成的。 如果需要，graph runs可以将自己绘制到graphics context中，但大多数客户端不需要直接与graph runs进行交互。 字体对象Font Objects 字体提供了布局字形的帮助（一个接另一个），并用于在绘制graphics context时创建当前字体。 Core Text font不透明类型CTFont是封装大量信息的特定字体实例。它的引用类型CTFontRef与iOS中的UIFont和OS X中的NSFont桥接在一起。创建CTFont对象时，通常指定（或使用默认）point size和transformation matrix，该matrix为字体实例提供了特定的特征。然后，您可以查询字体对象以获取有关特定点大小字体的各种信息，如字符到字形的映射，编码，字体度量标准数据和字形数据等等。字体指标是诸如ascent, descent, leading, cap height, x-height等参数。字形数据包括bounding rectangles and glyph advances等参数。 Core Text字体对象是不可变的immutable，所以它们可以同时被多个operation，work queue或线程使用。有很多方法可以创建字体对象。首选方法来自使用CTFontCreateWithFontDescriptor的font descriptor。您也可以使用许多转换API，具体取决于您必须从什么开始。例如，可以使用字体的PostScript名称（CTFontCreateWithName）或Core Graphics字体引用（CTFontCreateWithGraphicsFont）。还有CTFontCreateUIFontForLanguage，它为您正在使用的本地化中的应用程序创建用户界面字体的参考。 Core Text font references 提供了一种复杂的，自动的字体替换机制，称为字体级联（font cascading），它可以在考虑字体特征的同时选择合适的字体来替代丢失的字体。字体级联基于级联列表，它是有序font descriptor 的array。系统有默认级联列表（基于用户的语言设置和当前字体呈多态），系统也会在字体创建时指定字体级联列表。使用font descriptor 中的信息，级联机制可以根据样式以及匹配字符匹配字体。 CTFontCreateForString函数使用级联列表来选择合适的字体来编码给定的字符串。要指定和检索字体级联列表，请使用kCTFontCascadeListAttribute属性。 Font descriptors 由CTFontDescriptor不透明类型表示的Font descriptor提供了一种机制，用于完全从attribute字典中描述字体，以及用于构建新字体的易于使用的字体匹配工具。您可以使用Font descriptors创建字体对象，您可以从字体对象获取Font descriptor，然后可以更改Font descriptor并使用它来制作新的字体对象。您可以通过创建Font descriptors来部分描述字体，例如仅使用系列名称或权重，然后可以查找系统中与给定特征匹配的所有字体。 CTFontDescriptorRef类型toll-free到iOS中的UIFontDescriptor和OS X中的NSFontDescriptor。 相对于处理复杂的转换矩阵，你可以创建一个字体属性字典，将字体属性包括PostScript名称，字体系列和样式以及特性（例如，粗体或斜体）作为CTFontDescriptor对象。您可以使用Font descriptor来创建一个CTFont对象。Font descriptor可以被序列化并存储在一个文档中以提供字体的持久性。如图，显示了使用Font descriptor创建特定字体实例的字体系统。 您可以将Font descriptor视为对字体系统的查询。您可以使用不完整的规范创建Font descriptor，即属性字典中只包含一个或几个值，系统将从可用的字体中选择最合适的字体。例如，如果指定Font descriptor为standard faces (normal, bold,<a class="moretag" href="https://www.zhaojianfei.com/archives/678"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/678/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS文字编程指南文档笔记Text Programming Guide for iOS</title>
		<link>https://www.zhaojianfei.com/archives/668</link>
		<comments>https://www.zhaojianfei.com/archives/668#respond</comments>
		<pubDate>Tue, 27 Mar 2018 06:40:58 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=668</guid>
		<description><![CDATA[UIKit提供app的文字和网页对象，可以直接使用UItextView，TextField，Label。当用户编辑文字时，app必须管理键盘。当用户点击textfile，textview或者网页上的表单，iOS动态弹出键盘到视图。App可以直接绘制和管理文字。UIkit的底层text view是一个强大的布局引擎——Text Kit. 如果你需要定制布局过程或者需要干预这个过程的行为，你可以使用Text Kit。Text Kit是一组类和协议，提供了高质量的排版服务，允许app用所有良好的排版设置来存储，布局，显示文字。比如：kerning, ligatures, line breaking, and justification.

对于大多数app来说，你可以使用high-level 文字显示类和text kit来处理所有文字场景。对于需要定制解决方案的少数文本和特殊需求，可以使用底层技术，例如Core Text，Core Graphics和Core Animation框架中的编程接口以及UIKit中的其他API。

要直接与iOS的文本输入系统通信，请实现UITextInput协议以及相关的协议和类。您的应用程序还可以使用拼写检查和正则表达式的技术。

你的应用程序具有一系列用于输入和编辑数据的选项。UIKit框架包含编程接口，用于编辑视图中的数据并将数据输入到应用程序中。自定义输入视图可以替换系统键盘以允许输入特殊数据;输入附件视图是系统键盘（或自定义输入视图）上方的自定义视图，可使用户以特定于应用程序的方式影响编辑的数据。通过使用UIPasteboard和相关类，应用程序可以在自己的不同位置或与其他应用程序之间复制，剪切和粘贴数据。作为复制粘贴操作的一部分，用户在上下文编辑菜单上点击命令;你的应用程序管理这个菜单，并可以添加自定义命令。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/668/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通知编程指南文档笔记Notification Programming Topics</title>
		<link>https://www.zhaojianfei.com/archives/664</link>
		<comments>https://www.zhaojianfei.com/archives/664#respond</comments>
		<pubDate>Thu, 22 Mar 2018 02:08:43 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=664</guid>
		<description><![CDATA[Foundation提供了一个编程架构来传递有关事件发生的信息。这个架构本质上是对于不同线程之间传递消息，事件处理的封装，依赖于run loop运行机制，通过run loop mode传递事件，通过runloop的observer回调处理事件。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/664/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Image I/O 编程指南文档笔记 Image I/O Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/662</link>
		<comments>https://www.zhaojianfei.com/archives/662#respond</comments>
		<pubDate>Wed, 21 Mar 2018 00:00:12 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=662</guid>
		<description><![CDATA[Image I / O编程接口允许应用程序读取和写入大多数图像文件格式。最初是Core Graphics框架的一部分，Image I / O驻留在它自己的框架中，允许开发人员独立于Core Graphics（Quartz 2D）使用它。 Image I / O提供了访问图像数据的明确方式，因为它非常高效，可以轻松访问元数据并提供颜色管理。image IO和 Bitmap images and image masks 绘制文档笔记 的图片绘制相关。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/662/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bitmap images and image masks 绘制文档笔记</title>
		<link>https://www.zhaojianfei.com/archives/658</link>
		<comments>https://www.zhaojianfei.com/archives/658#respond</comments>
		<pubDate>Tue, 20 Mar 2018 08:52:21 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=658</guid>
		<description><![CDATA[bitmap image和image mask的绘制是quartz 2d的传统项目。images和image masks在quartz里的表达是CGImageRef数据类型。有非常多可以用于创建image的方法。其中一些需要数据提供者或图像源来提供位图数据。其他功能通过复制图像或对图像执行操作来从现有图像创建图像。无论您如何在Quartz中创建位图图像，都可以将图像绘制为任何图形上下文。请记住，位图图像是以特定分辨率的位数组。如果您将位图图像绘制为与分辨率无关的图形上下文（例如PDF图形上下文），则位图会受到您创建分辨率的限制。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/658/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cocoa 绘制指南官方文档笔记 Cocoa Drawing Guide</title>
		<link>https://www.zhaojianfei.com/archives/650</link>
		<comments>https://www.zhaojianfei.com/archives/650#respond</comments>
		<pubDate>Fri, 16 Mar 2018 04:02:08 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=650</guid>
		<description><![CDATA[高质量图形是一个良好设计过的app的重要组成部分。高质量图形是OS X和其他操作系统的区别之一。当某些操作系统还在使用flat colors和矩形对象的时候，OS X已经使用color、透明、等高级的组合系统compositing system来让app有更顺滑和友好的外观了。

Drawing是大部分cocoa app的基本组件。如果你的app只使用基本系统空间，那么cocoa 做了所有绘制的工作。如果你使用custom views或者controls，你来负责使用drawing commands实现显示。

Cocoa drawing环境可用于构建在Application Kit框架（AppKit.framework）之上的所有应用程序。该框架定义了大量用于绘制从原始形状到复杂图像和文本的所有类和函数。Cocoa Cocoa drawing也依赖于Foundation框架中找到的一些原始数据类型（Foundation.framework）。 ]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/650/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ViewController  编程指南官方文档笔记 ViewController programming  guide</title>
		<link>https://www.zhaojianfei.com/archives/646</link>
		<comments>https://www.zhaojianfei.com/archives/646#respond</comments>
		<pubDate>Wed, 14 Mar 2018 09:28:06 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=646</guid>
		<description><![CDATA[ViewController顾名思义，用于控制内部的所有VIew。view controller 有几种类型，比如容器式：split view controller 多用于ipad，container view controller，navigation view controller等。这些容器式的，大部分都没有常见VC的功能逻辑，通过包含一个或者多个childviewcontroller 来实现。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/646/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS视图编程指南官方文档笔记 View Programming Guide For iOS</title>
		<link>https://www.zhaojianfei.com/archives/641</link>
		<comments>https://www.zhaojianfei.com/archives/641#respond</comments>
		<pubDate>Tue, 13 Mar 2018 08:35:43 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=641</guid>
		<description><![CDATA[在iOS中，使用窗口window和视图view来表达屏幕上的内容。windows只给app的视图们提供一个基本的容器container，自身并没有任何可见的内容。视图定义了你想在window里填充的部分内容。

任何程序都有至少一个窗口和一个表达内容的视图。UIKit或者其他系统提供预先定义好的视图view，你可以用这些view表达内容。这些视图包含按钮，label，更复杂一些的油table，collectionview，picker等。如果这些预定义的视图不满足你的要求，你可以自己定义custom驶入，自己管理绘制drawing和事件处理。

在iOS中，一个视图是一个UIview的实例。管理了app window的一个矩形区域。驶入的职责是绘制内容，处理多种点击事件和管理view的字视图subviews的布局layout。绘制drawing这个操作调用了很多图形技术，例如core graphics，openGL ES。drawing也使用uikit在view的矩形区域内来绘制图形，图片和文字。一个view负责响应矩形区域内的点击事件（通过使用手势识别或者直接处理点击事件）。在视图的层级中，parentview负责处理字视图的大小和位置，这个操作可以动态完成的。这种操作子视图的能力能够让view很好的适配一些变化的情况，比如设备终端的物理旋转和动画等。

可以把view当成构建用户界面的block。常见做法是使用不同的view创建层级关系，而不是在一个视图里表示所有内容。处于层级关系里的view只表达界面的部分内容（view负责自己最擅长，最优化的内容），比如，UIkit有专门用于显示文字，图片等内容的view。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/641/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>高级内存管理官方文档笔记 Advanced Memory Management Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/636</link>
		<pubDate>Fri, 09 Mar 2018 02:39:36 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=636</guid>
		<description><![CDATA[应用程序内存管理是在您的程序运行时分配内存，使用它并在完成时释放内存的过程。一个写得很好的程序尽可能少地使用内存。在Objective-C中，它也可以被看作是将有限内存资源的所有权分配给许多数据和代码段的一种方式。

OC提供两种内存管理方式：手动管理内存MRR（manual retain-release），自动自动引用计数ARC。ARC使用和MRR一样的引用计数方法，在编译器加入管理内存的方法。]]></description>
		</item>
		<item>
		<title>键值对观察编程指南笔记 Key-Value Observing Programming Guide</title>
		<link>https://www.zhaojianfei.com/archives/633</link>
		<comments>https://www.zhaojianfei.com/archives/633#respond</comments>
		<pubDate>Fri, 09 Mar 2018 02:25:44 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=633</guid>
		<description><![CDATA[键值观察提供了一种机制，允许对象在其他对象的特定属性值修改是收到通知。 这对于应用程序中的model层和controller层之间的通信特别有用。 （在OS X中，controller层绑定技术在很大程度上依赖于键值观察。）controller对象通常会观察model对象的属性，View对象通过controller观察Model对象的属性。 另外，Model对象可以观察其他Model对象（通常用于确定依赖值何时发生变化），甚至可以观察其本身（再次确定依赖值何时发生变化）。
您可以观察属性，包括简单属性，一对一关系和多对多关系。 多对多关系的观察者会被告知所做更改的类型以及参与更改的对象。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/633/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>性能优化编程指南官方文档笔记 Performance OverVIew</title>
		<link>https://www.zhaojianfei.com/archives/629</link>
		<comments>https://www.zhaojianfei.com/archives/629#respond</comments>
		<pubDate>Thu, 08 Mar 2018 03:48:09 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=629</guid>
		<description><![CDATA[许多人将性能等同于速度。事实上，如果一个程序能在一秒钟内完成一项复杂的操作，你可能会认为该程序性能良好。可是，这里这个速度可能是一种误导性的测量。在复杂的软件系统中，操作速度不是固定值。如果您在不同条件下多次执行相同的操作，则完成该操作所需的时间可能差异很大。这是因为程序只是在本地系统上共享资源的许多进程之一，并且这些资源的使用（或滥用）会影响所有其他进程。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/629/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Threading programing guide 多线程编程指南官方文档笔记</title>
		<link>https://www.zhaojianfei.com/archives/621</link>
		<pubDate>Wed, 07 Mar 2018 04:17:04 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=621</guid>
		<description><![CDATA[线程是在一个应用程序里同时并行执行多路代码的技术之一。尽管更先进的operation objects和GCD提供了更现代和有效的方法来实现并行，OSX和iOS依然提供了创建和管理线程的接口。]]></description>
		</item>
		<item>
		<title>Concurrency Programming guide 并发编程指南官方文档笔记</title>
		<link>https://www.zhaojianfei.com/archives/619</link>
		<pubDate>Tue, 06 Mar 2018 14:52:58 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=619</guid>
		<description><![CDATA[并行编程旨在解决如何更高效的使用多核处理器来处理一个程序内的多个并发任务问题。（用户界面，后台任务）现代的并行编程技术，在OSX和iOS平台上主要使用的是GCD（大型中央调度），这个技术比传统的thread管理好的地方是，它是基于操作系统级别的，剥离了应用程序，节约了线程的调用堆栈。其次对于不同平台，GCD可以统一管理，类似某种线程池的技术，对于不同的系统，和系统的运行状态，自动处理thread的各种问题。Operation Objects是基于GCD封装的Objective-C对象。
]]></description>
		</item>
		<item>
		<title>RunLoop 官方文档笔记</title>
		<link>https://www.zhaojianfei.com/archives/617</link>
		<pubDate>Mon, 05 Mar 2018 05:59:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=617</guid>
		<description><![CDATA[what is？ 一个循环：线程进入并且用于于执行事件处理，目的为了响应某些incoming 事件。你的代码负责提供状态控制，用于实现runloop的实际循环部份（loop 循环体）。换句话说，你的代码提供的 while／for 循环驱动了run loop，在你的循环内，你是用一个runloop对象去“执行”事件——处理接受很多事件和安装事件处理方法的代码。]]></description>
		</item>
		<item>
		<title>[30天代码计划] 第三天</title>
		<link>https://www.zhaojianfei.com/archives/615</link>
		<pubDate>Tue, 21 Nov 2017 16:51:32 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=615</guid>
		<description><![CDATA[给自己定了个计划，做一个AR 相关的Side Project，时间大概是2个月。头30天每天保证有代码提交。今天开始是第三天，先定个小目标，30天每天有代码贡献。]]></description>
		</item>
		<item>
		<title>我的博客今天又回来了</title>
		<link>https://www.zhaojianfei.com/archives/597</link>
		<comments>https://www.zhaojianfei.com/archives/597#respond</comments>
		<pubDate>Wed, 21 Jun 2017 14:12:31 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=597</guid>
		<description><![CDATA[下决心整理一下博客，以后这里会作为个人总结和技术记录。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/597/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2014年终总结 + 2015美好期待</title>
		<link>https://www.zhaojianfei.com/archives/580</link>
		<comments>https://www.zhaojianfei.com/archives/580#respond</comments>
		<pubDate>Wed, 31 Dec 2014 08:28:36 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[2014年终]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/580</guid>
		<description><![CDATA[2014年，成功戒烟1年半，健身半年，看了珠穆朗玛；书读得太少，业务还算精进；「星际穿越」是年度最佳电影；「Endless river」是年度最佳专辑；肾六是最差手机。优胜美地是最差系统。 2015年我要好好维护一下我的两个收费app，是的他们都快生锈了，所以也就没什么人买了（啊，话说去年我也是这么想的）；我还要写一个自己的twitter客户端；要继续健身，戒烟，少喝点酒，让身体变得更好看，重点是好用。要多读书。要多用英语喷那些不爽的人和事。 1月托公司的福，先去普吉度个假；6月希望能办个日本签证，想去看日本的音乐节。 完了。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/580/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>游记攻略：2014无背夫双人徒步EBC，Gokyo</title>
		<link>https://www.zhaojianfei.com/archives/576</link>
		<comments>https://www.zhaojianfei.com/archives/576#respond</comments>
		<pubDate>Thu, 30 Oct 2014 05:29:12 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>
		<category><![CDATA[旅游]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=576</guid>
		<description><![CDATA[写了一个游记，攻略性质的。很长，想去EBC或者Gokyo的应该有一定的帮助。无背夫无向导。 地址来自面包旅行： http://breadtrip.com/trips/2388049778/]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/576/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>不是耸，是没时间/钱</title>
		<link>https://www.zhaojianfei.com/archives/573</link>
		<comments>https://www.zhaojianfei.com/archives/573#respond</comments>
		<pubDate>Sun, 01 Sep 2013 13:36:32 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[weibo]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/573</guid>
		<description><![CDATA[这个社会啊，戾气太足什么的也不用我说了。说点别的，骑个318，自己不想去或者耸比骑不动，然后就开始意淫啊：这不挺简单的吗，有时间哥就能去。所以去过的人都是装B犯，你看他们堵的哈哈哈。同样的还有爬珠峰，今天又看到一个SB言论：花钱就可以登，专业队员的目标是K2。珠穆朗玛并没有那么神奇。 你看看，这种言论很容易把自己搞成 “老子不差钱但老子没兴趣就是不去气死你” 状；或者“老子正奋斗呢，没那时间玩你们那些逃避社会的破事” 状。无论哪两种形状，其实在真去过的人面前都挺露怯的。You can，You up啊。 同样的还有现在屌丝们非常喜欢的两个词“绿茶X”,&#8221;驴X&#8221;。话说，现在这物欲横流的社会，吃不到葡萄就要说葡萄是婊了吗？人对自己的身体有100%的支配权懂吗，和所有驴友睡了就是不和你睡，怎么着，有意见吗？]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/573/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Different between Class Extension and Class Category</title>
		<link>https://www.zhaojianfei.com/archives/570</link>
		<comments>https://www.zhaojianfei.com/archives/570#respond</comments>
		<pubDate>Wed, 30 Jan 2013 08:11:03 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=570</guid>
		<description><![CDATA[1，使用Extension，编译器会期望在此扩展的主&#8221;.m&#8221;文件下实现方法或属性。Category相当于扩展分离了当前的 @implement ,使他们在不同的文件实现。2，Category不支持属性@property。3，Category一般用于扩展不属于自己创建的类的方法，也可以用于 当前类的私有方法。Extension广泛用于创建私有属性和方法。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/570/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Support:川藏路书&#124;Way to tibet</title>
		<link>https://www.zhaojianfei.com/archives/565</link>
		<comments>https://www.zhaojianfei.com/archives/565#comments</comments>
		<pubDate>Fri, 30 Nov 2012 04:48:09 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=565</guid>
		<description><![CDATA[内容提要 川藏路书，为自行车和自驾进藏的人们指路（仅限318国道成都到拉萨一段）。主要功能: 1，可以实时查看海拔高度和距离拉萨的公里数(需网络支持); 2，解答几乎所有关于骑自行车走川藏线的问题，包括但不限于装备，体能，路况，住宿等； 3，安全指南，安全出行。 4，专门为藏区网络不佳、通信不畅而设计，大量离线信息，无需网络支持。 内容的绝大部分来源于广泛流传的波尔路书，小部分来源于作者个人2012年7月的亲身经历。川藏线只有一个，她就在那里。你翻过的，只是心中的一座山。车友们，加油！ ====================反馈:feedback======================== 请大家把反馈写到评论里，谢谢。 =======================================================]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/565/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SUPPORT:Tibet Thangka&#124;藏地唐卡 for iPhone and iPad</title>
		<link>https://www.zhaojianfei.com/archives/553</link>
		<comments>https://www.zhaojianfei.com/archives/553#respond</comments>
		<pubDate>Tue, 13 Nov 2012 06:28:44 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=553</guid>
		<description><![CDATA[&#60;藏地唐卡&#62; ：从西藏回来后构思的应用，近距离感受唐卡的美。iphone版：http://t.cn/zjz4twb ；iPad版&#60;藏地唐卡HD&#62;同步推出：http://t.cn/zjz4V3G 相信我绝对超值。 iPhone: iPad 西藏唐卡,藏地唐卡,tibetthangka,唐卡,thangka,唐喀,唐嘎,Thang-ga,tibetan thangka,西藏特色thangka,thangka,tibet thangka,藏传佛教,苯教,тханка,チベット,タンカ,티벳의,탕카 App Name 藏地唐卡 Over hundreds of HD beautiful thangka photos,you can see more details of these awesome Artworks.Use two finger to zoom in or zoom out. Also can save to photo albumen set as a wallpaper. ======================================= 数百张精美的高质量HD唐卡图片，这次可以看到更多细节。所有图片都可以储存并且设为桌面。 ======================================= Thangka is a Tibetan silk painting with embroidery, usually depicting a Buddhist deity, scene, or mandala of some sort. The thankga is not a flat creation like an oil painting or acrylic painting but consists of a picture panel which is painted or embroidered over which a textile is mounted and then over which is laid a cover, usually silk. Generally, thangkas last a very long time and retain much of their lustre, but because of their delicate nature, they have to be kept in dry places where moisture won&#8217;t affect the quality of the silk. It is sometimes called a scroll-painting. ======================================= 唐卡（Thang-ga）也叫唐嘎，唐喀，系藏文音译，指用彩缎装裱后悬挂供奉的宗教卷轴画。唐卡是藏族文化中一种独具特色的绘画艺术形式，题材内容涉及藏族- 的历史、政治、文化和社会生活等诸多领域，堪称藏民族的百科全书。传世唐卡大都是藏传佛教和苯教作品。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/553/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]nonce和timestamp在Http安全协议中的作用</title>
		<link>https://www.zhaojianfei.com/archives/551</link>
		<comments>https://www.zhaojianfei.com/archives/551#respond</comments>
		<pubDate>Tue, 06 Nov 2012 06:08:37 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=551</guid>
		<description><![CDATA[原文链接:http://www.cnblogs.com/bestzrz/archive/2011/09/03/2164620.html 作者Rongie Zeng 前段时间给客户网站做新浪微博账号登录功能，对OAuth协议以及相关的一些安全协议做了一些研究，顺便就记录一下学习心得吧。在这里就不打算具体讲OAuth的协议流程了，而是针对OAuth请求头里的nonce（随机数）、timestamp（时间戳）、signatrue（签名）这些参数的作用做一下总结。 首先看一下HTTP规范里定义的Basic认证。 Basic认证及其安全问题 Basic认证是一个流程比较简单的协议，整个过程可以分为以下三个步骤： a） 客户端使用GET方法向服务器请求资源。 b） 服务器返回401响应码和WWW-Authentication：Basic realm=”Family”响应头要求客户端进行身份验证。其中realm声明了资源所在的域。 c） 浏览器接收到以上HTTP响应头后，弹出登录框要求用户输入用户名和密码；用户提交的用户名和密码通过冒号串联起来并对其进行BASE64编码后再提交到服务器；服务器对提交上来的BASE64字符串进行验证，如果验证通过则返回200响应码。 Basic认证虽然简单、方便，但它只能作为对非敏感资源的访问认证，因为它并不安全，主要表现在以下几个方面： 1、 客户端提交的用户名和密码只经过简单的编码，攻击者只要窃听到该数据包，便可很容易的将其反编码为原始用户名和密码。 2、 即使客户端使用了一种比BASE64更复杂的编码方式使得攻击者无法对其反编码，攻击者也可以使用fiddler等工具将拦截到的HTTP报文重新提交给服务器，服务器只对编码的字符串进行验证，所以验证同样能通过。这种攻击方法称之为重放攻击（Replay-Attack）。 以上两个问题也是各种身份认证协议需要考虑到的安全问题，包括OAuth、Digest认证、NTLM认证等等认证机制都使用了nonce和timestamp来解决这些问题。 Nonce、Timestamp——解决Replay-Attack问题 Nonce是由服务器生成的一个随机数，在客户端第一次请求页面时将其发回客户端；客户端拿到这个Nonce，将其与用户密码串联在一起并进行非可逆加密（MD5、SHA1等等），然后将这个加密后的字符串和用户名、Nonce、 加密算法名称一起发回服务器；服务器使用接收到的用户名到数据库搜索密码，然后跟客户端使用同样的算法对其进行加密，接着将其与客户端提交上来的加密字符 串进行比较，如果两个字符串一致就表示用户身份有效。这样就解决了用户密码明文被窃取的问题，攻击者就算知道了算法名和nonce也无法解密出密码。 每个nonce只能供一个用户使用一次，这样就可以防止攻击者使用重放攻击，因为该Http报文已经无效。可选的实现方式是把每一次请求的Nonce保存到数据库，客户端再一次提交请求时将请求头中得Nonce与数据库中得数据作比较，如果已存在该Nonce，则证明该请求有可能是恶意的。然而这种解决方案也有个问题，很有可能在两次正常的资源请求中，产生的随机数是一样的，这样就造成正常的请求也被当成了攻击，随着数据库中保存的随机数不断增多，这个问题就会变得很明显。所以，还需要加上另外一个参数Timestamp（时间戳）。 Timestamp是根据服务器当前时间生成的一个字符串，与nonce放在一起，可以表示服务器在某个时间点生成的随机数。这样就算生成的随机数相同，但因为它们生成的时间点不一样，所以也算有效的随机数。 问题又来了，随着用户访问的增加，数据库中保存的nonce/timestamp/username数据量会变得非常大。对于这个问题，可选的解决方案是对数据设定一个“过期时间”，比如说在数据库中保存超过一天的数据将会被清除。如果是这样的，攻击者可以等待一天后，再将拦截到的HTTP报文提交到服务器，这时候因为nonce/timestamp/username数据已被服务器清除，请求将会被认为是有效的。要解决这个问题，就需要给时间戳设置一个超时时间，比如说将时间戳与服务器当前时间比较，如果相差一天则认为该时间戳是无效的。 HTTP消息体的加密 很不幸的是，经过上面这些复杂的处理后，我们的数据传输仍然是不安全的。我们都知道，http报文是以明文的方式在网络中传输的，包括Basic认证、Digest认证、OAuth、NTLM等等验证这一些认证机制都只是对HTTP头的信息作保护，而对于Http消息体的数据却没有作加密。以新浪首页的登录为例，它的账号就是以明文的方式传送的，如下图所示： 这样的方式是很不安全的，用户名和密码完全以明文的方式提交了。同样是新浪的网站——新浪微博就在登录前作了加密过的，如下图所示： 加密的方法可以参考前面讲到的nonce+timestamp的方案。不过这只解决了登录的问题，在注册时就不能提交使用nonce和timestamp非可逆加密了，这个时候要使用非对称加密。在用户打开注册页时，服务器生成一个公钥/私钥对并将公钥返回给客户端，客户端使用该公钥将密码加密后提交到服务器，服务器使用私钥解密后再保存到数据库。非对称加密算法的特点是每一个公钥和私钥都是一一对应的，使用公钥加密后只有拥有私钥的人才能进行解密，所以攻击者截取到http报文也毫无用处。 当然，在条件允许的情况下，可以使用SSL来实现HTTP报文的加密，这种方案是在应用层和传输层中间添加一个SSL层，该层使用对称加密的方法将HTTP报文加密后再传递到传输层，如下图所示： 在 这之前，客户端与服务器需要使用非对称加密的方法来协商用于对称加密的公钥，对称加密要求加密者和解密者拥有同一个密钥（即公钥）。当客户端首次访问页面 时，需要生成一个公钥给服务器，而这个公钥不是不可以给第三方知道的（知道了这个公钥就可对数据进行解密了），所以需要服务器首先生成一个公钥/密钥对，并使用生成的公钥加密客户端生成的公钥（非对称加密），这一个过程与前面讲到的注册密码加密的方式类似。 正因为在正式数据传输之前需要在服务器跟客户端之间进行几轮的协商，所以HTTPS相比HTTP来说安全性会高些、而性能会差些。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/551/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIResponder是什么</title>
		<link>https://www.zhaojianfei.com/archives/549</link>
		<comments>https://www.zhaojianfei.com/archives/549#respond</comments>
		<pubDate>Thu, 20 Sep 2012 02:46:15 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=549</guid>
		<description><![CDATA[在 iOS 中，一个 UIResponder 对象表示一个可以接收触摸屏上的触摸事件的对象，通俗一点的说，就是表示一个可以接收事件的对象。 iOS 中，所有显示在界面上的对象都是从 UIResponder 直接或间接继承的。 下面是 UIResponder 类的一些定义信息： 触摸事件相关： 方法名称 说明 touchesBegan:withEvent 当用户触摸到屏幕时调用方法 tochesMoved:withEvent 当用户触摸到屏幕并移动时调用此方法 tochesEnded:withEvent 当触摸离开屏幕时调用此方法 tochesCancelled:withEvent 当触摸被取消时调用此方法 运动事件相关： 运动事件是指当用户以特定方式移动设置，如摇摆设置时，设置会产生运动事件，由以下几个方法进行处理： 方法名称 说明 motionBegan:withEvent 运动开始时执行 motionEnded:withEvent 运动结束时执行 motionCancelled:withEvent 运动被取消时执行 响应对象链相关： 方法名称 说明 isFirstResponder 指示对象是否为第一响应者，这里的第一响应者就是当前有焦点的对象，叫法挺奇怪的，第一次看到真还难以理解这个叫法所表达的意思 nextResponder 下一个响应者，在实现中，一般会返回父级对象 canBecomeFirstResponder 获取一个布尔值，指定对象是否可以获取焦点 becomeFirstResponder 把对象设置为 firstResponder 对象 canResignFirstResponder 对象是否可以取消 firstResponder 对象 resignFirstResponder 取消对象为 firstResponder 对象]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/549/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>D1,D2 雅安-天全（20120903补图)</title>
		<link>https://www.zhaojianfei.com/archives/547</link>
		<comments>https://www.zhaojianfei.com/archives/547#comments</comments>
		<pubDate>Wed, 05 Sep 2012 04:30:57 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[2012川藏]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=547</guid>
		<description><![CDATA[D1,D2 雅安-天全（20120903补图) 骑行界自虐的最高形式，川藏线应该排第二位。 成都大雨一直下到8点才停，9点出发的话，为晚上的夜路做好了充分的准备。 南方的雨也很奇怪，刚开始下雨就下得很大，刚把雨衣穿上雨就停了。有时候还有太阳。 第一次看见茶树，感觉和冬青差不多。 年轻的村姑姿色不比春熙路差，还是白。民居很美。酿酒厂太多，沿路都是酒糟味。不好。 东西带的有点多，刚开始的时候车倒了都不一定能一个人扶起来。 从成都到雅安一路缓上，140公里仅仅是到了雅安的门口，进城再需7公里。如果第一天不早点出发的话，夜路是一定的。一个人走了大约一小时的夜路，紧靠手电筒的亮光，国道上，心惊肉跳。相信我，绝对不好玩。于夜里22：22分入住现在的酒店，决定休整一天，把时间调整过来。首先很多东西都湿了要晾干，车上太多沙子，要清理。睡眠严重不足，昨天1：30睡觉，今天不到6点半就醒了。 每天路上的骑行者不下200人，这下大家该放心了吧，坏处是，必须早出发早到达才能有经济实惠的住宿点。以后不能像今天这么奢侈。 雅安宾馆攻略：一进屋就看见两只大蟑螂，踩死了。此宾馆专为领导上女下属后报销，领导嫖妓后报销专用。 淋着大雨误入雅安红灯区，几个姑娘唱K，鬼叫半天不知道唱的是什么。周边各种小旅馆供开房使用。全国各地县城的红灯区都差不多。 下午去离这里35公里的骑行者住宿点。晚上一定要早睡。 快进入高原了，to be continued. 雅安进城大桥处，此乃雅江，后来在拉萨附近的318也有雅江，ztmd长啊。 茶马古道纪念 哥长这么大第一次见野生竹林，于是像个江南诗人一样优雅的在里边撒了个尿 天全县的路上，好路，但是窄，大车多。 最后到达天全县，晚上第一次住了小旅馆，当然以后就越来越多了。这里竟然和小王杨仔他们又遇到了，而且还在一个旅馆住。为以后的基友之旅打下了基础&#8230;&#8230;]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/547/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>D0 成都</title>
		<link>https://www.zhaojianfei.com/archives/545</link>
		<comments>https://www.zhaojianfei.com/archives/545#respond</comments>
		<pubDate>Wed, 05 Sep 2012 04:24:21 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[2012川藏]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=545</guid>
		<description><![CDATA[今天下午，送走了一个聊得很好的室友，独自一人回到屋子。都走了，又剩下我一个人。感受到前所未有的孤独，压迫的喘不过气来。想想明天就要出发，心里着实没底&#8230;.孤独，绝望，没人能帮我。屋子里更是一刻都待不下去。&#8230;&#8230; 所以我背包去了春熙路看妹子。 &#60;!&#8211;赞美开始&#8211;&#62; 以下送给成都的姑娘们: tmd白活了，各种美，各种纯，各种白。为什么当年没人告诉我这些，为什么不到这里上学，为什么？皮肤白皙，没有浓妆艳抹（因为根本不需要）。小腿细而长，优雅的脚踝弧线，姣好的五官。随便拿出一个路边买冷饮的小姑娘的长相就可以用惊艳来形容。我爱这里，我爱你们，我还会回来。 &#60;!&#8211;赞美结束&#8211;&#62; 再说青年旅社，刚建立起信任就要各奔东西两相忘。当然如果能艳遇那是真凭本事。新的室友入住，话题无非是五个W，一个H。反正结果总是要分离，那么为什么我还要对你推心置腹? 总之我的川藏吐槽之旅开始了，吐槽各种装，比如理想13，内心纯净13，亲近大自然13，let&#39;s rock&#39;n rool. 那个谁?你好记得当年宽窄巷的那个大号夏雨荷吗?]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/545/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>message sent to deallocated instance问题的解决方法(gdb和lldb)</title>
		<link>https://www.zhaojianfei.com/archives/539</link>
		<comments>https://www.zhaojianfei.com/archives/539#comments</comments>
		<pubDate>Thu, 12 Apr 2012 08:48:06 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=539</guid>
		<description><![CDATA[当出现message sent to deallocated instance的时候，一般伴随牛逼的BAD_ACCESS.是的，是某个对象release了两次。可是那么多的疑似对象，到底是哪一个?]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/539/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>我去，什么情况，今天竟然能访问</title>
		<link>https://www.zhaojianfei.com/archives/537</link>
		<comments>https://www.zhaojianfei.com/archives/537#respond</comments>
		<pubDate>Tue, 20 Mar 2012 06:59:51 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=537</guid>
		<description><![CDATA[本以为go daddy这个主机的ip被墙了。以后只能只能翻墙上自己的博客倒也落个清净。没想到今天竟然能访问了。什么情况。二会开完了?]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/537/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何解读美国大使馆空气质量监测数据[转]</title>
		<link>https://www.zhaojianfei.com/archives/533</link>
		<comments>https://www.zhaojianfei.com/archives/533#respond</comments>
		<pubDate>Mon, 24 Oct 2011 03:14:09 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[工具箱]]></category>
		<category><![CDATA[北京空气]]></category>
		<category><![CDATA[美国大使馆空气]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=533</guid>
		<description><![CDATA[原文链接 http://sunote.info/tag/beijingair/ 从2月9日开始，@BeijingAir修改了报告的内容，从原来的报告过去1小时和当天平均值改为PM2.5和Ozone两个值。 原来的格式为： 2-9-2010 ; 11:00 ; Latest Hour ; 0.091 ; 169 ; Unhealthy ; Today’s Avg ; 0.216 ; 266 ; Very Unhealthy 现在的格式为： 02-21-2010; 09:00; PM2.5; 189.0; 239; Very Unhealthy // Ozone; 0.9; 1; Good @BeijingAir是美驻华使馆在使馆区设置的一个空气检测站，将数据每隔一小时自动发送到twitter上。以前的数值仅仅为PM2.5，2月9日之后增加了Ozone。 几种污染物 PM2.5是Particulate matter 2.5的缩写，指大气中直径小于或等于2.5微米的颗粒物，也称为可入肺颗粒物。会进入肺部的气体交换区（肺泡），引起血管炎和动脉粥样硬化，进而导致心脏病和其他循环系统疾病。 PM10指直径等于或小于10微米，可以进入人的呼吸系统的颗粒物，也称为可吸入颗粒物。10微米到2.5微米的颗粒，部分会被肺呼出，部分被支气管和肺部组织吸附。 PM100指直径小于和等于100微米的颗粒物，也称总悬浮颗粒物。大于10微米的大多数被鼻腔和咽喉阻挡，不会造成麻烦。 PM2.5的影响 大气中PM-2.5污染控制的意义与途径一文中提到： PM-2.5是导致城市人为能见度下降的祸首 PM-2.5是城市大气污染物中损害人体健康的元凶 什么是Ozone Ozone是我们呼吸的空气，对人体健康有直接地影响。 解读@BeijingAir数据 目前@BeijingAir的数据格式为： 日期; 时间; PM2.5; PM2.5浓度; PM2.5空气质量指数; 健康等级 // Ozone; Ozone浓度; Ozone指数; Ozone健康等级 PM2.5的空气质量指数 Air Quality Index Levels of Health Concern Numerical Value Meaning Good 0 to 50 Air quality is considered satisfactory, and air pollution poses little or no risk Moderate 51 to 100 Air quality is acceptable; however, for some pollutants there may be a moderate health concern for a very small number of people who are unusually sensitive to air pollution. Unhealthy for Sensitive Groups 101 to 150 Members of sensitive groups may experience health effects. The general public is not likely to be affected. Unhealthy 151 to 200 Everyone may begin to experience health effects; members of sensitive groups may experience more serious health effects. Very Unhealthy 201 to 300 Health alert: everyone may experience more serious health effects Hazardous 301 to 500 Health warnings of emergency conditions. The entire population is more likely<a class="moretag" href="https://www.zhaojianfei.com/archives/533"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/533/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>看了Suede的现场</title>
		<link>https://www.zhaojianfei.com/archives/530</link>
		<comments>https://www.zhaojianfei.com/archives/530#respond</comments>
		<pubDate>Sun, 07 Aug 2011 14:25:25 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[rock]]></category>
		<category><![CDATA[摇滚]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/530</guid>
		<description><![CDATA[今晚suede挺high,不过没有beautiful ones就算了,不唱she就太可惜了.Everything will flow和So young的时候我一股老泪差一点彪出来.音响效果一般.以后还是买便宜一点的票吧,因为太短了,不到1.5小时,我感觉也就刚暖了个场.以后还是常混音乐节吧.最后,向今晚窜上台那个哥们致敬,NB大了.内场保安人数都比观众多了,你怎么做到的啊?]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/530/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在xcode4或4.1里使用//TODO,//FIXME等</title>
		<link>https://www.zhaojianfei.com/archives/529</link>
		<comments>https://www.zhaojianfei.com/archives/529#respond</comments>
		<pubDate>Fri, 05 Aug 2011 03:01:31 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/529</guid>
		<description><![CDATA[原来xcode3系支持的//TODO,//FIXME等功能,4.0以上都挪到了项目属性设置的build phases 里.还需要输入脚本一段.解决方案在这里. Show TODO&#8217;s And FIXME&#8217;s As Warnings In Xcode 4 http://deallocatedobjects.com/2011/05/11/show-todos-and-fixmes-as-warnings-in-xcode-4/]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/529/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>@selector in Objective-c</title>
		<link>https://www.zhaojianfei.com/archives/527</link>
		<comments>https://www.zhaojianfei.com/archives/527#respond</comments>
		<pubDate>Wed, 20 Jul 2011 14:28:48 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=527</guid>
		<description><![CDATA[SEL is a type that represents a selector in Objective-C. The @selector() keyword returns a SEL that you describe. It’s not a function pointer and you can’t pass it any objects or references of any kind. For each variable in the selector (method), you have to represent that in the call to @selector. For example:]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/527/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>没你也要非去不可——我的长安我的古城(1)(6.4郑州:美女相助事半功倍)</title>
		<link>https://www.zhaojianfei.com/archives/524</link>
		<comments>https://www.zhaojianfei.com/archives/524#comments</comments>
		<pubDate>Mon, 13 Jun 2011 15:25:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[运动]]></category>
		<category><![CDATA[骑行作业]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/524</guid>
		<description><![CDATA[“你一定是疯了！”当我默默筹划了1个月，最后把消息告诉为数不多的几个好友后，他们这么说。我也不清楚这一趟能遇到什么，买了一份户外险偷偷塞给室友以备不时之需。这一趟的原因不过是为了从心里告别一个人，为了替别人完成梦想，为了自我救赎，为了那个我曾魂牵梦绕的古城。所以没有你也要去，就用属于我的方式开始。 6月2日晚上，我把保单塞给室友，虽然尽量避免尴尬，可是气氛还是不太轻松，毕竟这是我的第一次单人长途。 从郑州到西安，谷歌地图标识全程高速505公里，当然这只是完美的最短路线。实际上我估计全程大概需要跑560公里甚至更多。如下图: 路线整个跨越了我国的第二阶梯和第三阶梯太行山脉部分，地貌变化较大，从河南一望无际的平原，经洛阳至三门峡段的剧烈上升，变为高耸的秦岭和黄土高原。一路上可以感受从内敛细腻的中原文化过渡到粗旷不羁的西北文化的全过程。而西安作为西北的美食之都，时时刻刻都犹如一个大大的鱼饵挂在那里等着我上钩。今年的端午节，我再也无法忍耐，动手吧。 用一个月时间制定计划，补充长途骑行的装备，做体能训练，终于在6月3日算是准备好了。结果当晚又意外的加班到十点，要知道我可是最早的一班6：54的火车，需要在凌晨3点半起床收拾。(以下内容或多或少在微博上都写过) 第一天就很困难，昨晚加班到10点，收拾东西到凌晨一点，今天三点半起床只睡了两小时，肚子疼折腾到四点，洗澡吃早饭，这就四点半了。开始装后货架因为没经验，被几个螺丝折腾了近一小时，五点半出发，一出门说我擦老天爷不会玩我呢吧,竟然下雨,重装备骑到西站，这时是11年6月四曰6点18分，我一身泥点的站在进站口，d133次车已经开始检票。 现在再想起那个闷热的凌晨，乌黑的天，出门能听见隐约的雷声。当时只有一次负重骑车的经验，还不是全负荷。下雨成了制约速度的关键因素，后悔没带挡泥板溅了一身泥，可是现在想想那个东西基本没什么用。去西站的路上我一边骂老天有眼，一边盘算着万一这一趟车我赶不上回去怎么和大伙儿交代。因为要拆自行车和后货架，对自己的技术和需要的时间完全没有底。最后硬着头皮把车推到了西站门口。 我深呼一口气，心中默念如果真的有三体文明存在的话，求智子保佑我。还有摇滚万岁，拆车计时开始。坐在门口等车的民工大叔大爷们，Show time！ 当时已经还有半小时就发车了，我已经心虚到了极点。不过多年的装逼生涯告诉我，作为一个一向以冷静著称的青年，这20多年的装逼经验不能白练。 六点38分拆车完毕，在我把最后一个零件装进车袋的时候，一只手搭在我肩膀上。我心说糟糕﹣－不会是拆车过于帅呆而招来了艳遇？ 这几乎是我当时能达到的最快速度了，距发车还有16分钟。 抬头一看，亲，真是美御姐。女；请问你是东方红的吗？我：必须东方红啊。在30秒内寒暄介绍完毕。御姐的弟弟是东方红zippo兄，御姐的儿子（御姐&#8230;）是小zippo，御姐本人在西站一个餐厅做经理。御姐决定帮我进站，于是我平生第一次从西站偏僻小门进入，没有安检，没有身份证检查。此时距发车还有14分钟 我是非常担心的，因为首先时间不多了。万一跟着这位神仙姐姐走还不如正规进站渠道的话，岂不是做无用功。其次，世界上是不是真的好人多(后来这一路验证了我的看法，纯属瞎操心)，尤其是在火车站周边。姐姐带我进门之后，餐厅的大厨纷纷向姐姐打招呼，此时姐姐优雅的指着一个大厨说:“XX,可不可以请你把这个小弟带到vip候车室进站。”vip候车室！当时我就震惊了，姐姐立即升级成为女神，我等小辈连vip候车室的门儿朝哪开都不知道，如今也能享受领导待遇了?世界果真如此美好? 还是没能从vip进站，因为实在太晚了，vip候车室的入口都关了。只能走最近的通道，也多亏了这位厨师大哥，否则我还要在火车站转好久才能找到上车的路，那时肯定来不及了。 当我舒服在躺在动车的座位上，偶尔偷偷瞥一眼邻座姑娘白皙的大腿的时候，我爱你们所有人。再次感谢西站的大姐，没你就没有以后的所有遭遇，你是我的救世主。因为火车提前了三分钟发车。 中午11点57分准时到达郑州，当时出站的感觉就是热，比刚下过雨的北京热很多。此时郑州的朋友——本地最红瑜伽教练W小姐已经带车在北出口等我了。这是今天的第二位美女，也是女神一样的存在。尤其是当她说“咦～～～”的时候。 我在郑州，也是在中原的第一顿饭——合记烩面，号称天下第一面。当然我觉得这么说的话，陕西人和山西人一定会有意见。如图: 没错，确实是比我在北京吃过的任何一家烩面都好吃。后来的经历证明，帝都的普通餐饮行业的整体水平用鲁智深的一句话就可以形容:”嘴里都淡出个鸟来了.” 由于当天是敏感日，六月三日的后一天，六月5日的前一天——现在也可以这么说，是性感微笑女神李娜姐获得法网冠军的日子，是端午法定假期。送走了W小姐和她的朋友。我开始装车，结果很顺利的，车车复活了（从这以后我的拆车装车技术成倍增长，再也不怵了）: 在郑州骑了大约20公里，因为发现自己带的车灯罢工了。这可是刚买的没怎么用呢，一路上没有主车灯可怎么活，所以只有出去买灯。还是因为路不熟，只有去捷安特的专卖店买了一只差不多贵了一倍的电筒，和我以前用的几乎一样。这时才发现是我下午充电时把18650电池的正负极搞反了，电池宣告报废但是电筒还是能用的，白花了80元整。 买完车灯心想那就顺便去一个二七广场吧。说实话我早就忘了二七广场是干什么的了。上网查了一下才想起来哦对这就是高中历史学的二七大罢工纪念广场。顺着正在施工挖地铁的中原路，又拐了几个弯，作为多年混迹于帝都的我，走在修地铁的郑州有种时空穿越的感觉，要不是路边姑娘们白嫩细长的腿和有趣的河南话，我真以为还在帝都呢。二七广场和全国任何一个城市中心广场一样，那就是人多，出奇的多，而且我就说那天真的是老天不给力，二七塔竟然穿上了雨衣，你这不是坑爹呢吗，老子500多公里大清早三点半起床只睡了两个小时一身泥点儿的来这，看到的郑州标志建筑竟然还穿了雨衣? 好吧，起码你们那个时候有罢工的自由，还有一个不是除了发吃的就是组织旅游玩的工会。没什么意思所以直接就回酒店了，晚餐是西瓜香蕉和牛奶，买了点零食，第二天准备上路。 此时的中原大地，温度正一点点升高，太阳也为后来几天的爆发积蓄的聚变的力量，我还不知道未来的路上什么在等着我，影响这次长途骑行的关键因素到底是什么?我是否能真的走出中原。请看下期《非去不可——我的长安我的古城(2)(6.5郑州-洛阳:挚爱母亲河,疯狂的路书)》]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/524/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>老胳膊老腿的草莓音乐节之5月2号</title>
		<link>https://www.zhaojianfei.com/archives/514</link>
		<comments>https://www.zhaojianfei.com/archives/514#respond</comments>
		<pubDate>Thu, 05 May 2011 09:15:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[听点什么]]></category>
		<category><![CDATA[看点什么]]></category>
		<category><![CDATA[rock]]></category>
		<category><![CDATA[摇滚]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/514</guid>
		<description><![CDATA[今天美女真多，多到我怀疑帝都所有的小清新女文青、伪女文青们今天全出来了，真是浪到家。 溜达了一会儿，看来今天我是把不到女文青了，明年我也整两条花臂括弧套袖括弧完来玩玩。既然西西妹子还没来，那我就专心搭讪听音乐去好了。 在我无所事事的转了两圈之后老周周云蓬上场了，第一次听老周的现场。老周的现场刚开始漫山遍野的人啊，不过真的唱起歌来以后打酱油的同学陆续的开始往外走。还真不少。能听到现场版的《9月》我就很满足了，合唱之。 (老周上场，作者我) 在无聊的过程中，误入魔人布欧领地，看不到的同学点这里： 视频 后来又去重型舞台蹦达了一会儿，没有妹子不给力啊，然后到门口专心等西西，她差不多到了。 我在两个满座网雇来的模特的大腿的环绕下在门口高兴的坐着，美好的时光总是过得很快，西西妹子到，还带了16同学，可是16同学你来晚了，因为又一次不买票了，我提前给西西买了票所以16同学只能去找票贩子，结果无果，16同学回家。我们草草的吃了点东西，喝了点酒，还真是草草啊，因为在草地上吃的。吃的过程中卖口香糖的黄义达同学在爱舞台演出，老远就能听见叽叽喳喳的姑娘一大片，最后还隐约听到了《那女孩对我说》，我又想起伟伟和娜娜的故事了。然后今晚就全是大牌了，连上厕所的时间都要挤。 先看了杭盖，这个乐队的现场非常的棒，我和西西从头蹦到尾。蒙古的这个乐队真的很猛，听小木说这帮人以前是玩重型的?他们的歌还是一定要听现场，回来之后我找了他们的专辑听，发现效果真不如现场好。现场真的好像蒙古人端着酒唱歌就看你喝不喝那种感觉。 下面飞奔到重型舞台看病蛹，可惜，只听到两首歌，因为时间都被杭盖占去了，没关系，明年继续吧，病蛹高中那会儿爱到不行。偶尔听听也不错。 二手玫瑰，以前我听得不多，现在他们的风格真的是骚到家了，先看看他们的扮相: (via http://weibo.com/modernsky) 歌词有点荤，但是不色，有鲜明的东北风格，逗闷子的时候也好玩，记得最深的是“一天晚上我们互相给了…..”二手玫瑰听了三首，因为我们要去看老谢，对，就是这么忙。 其实今晚所有舞台的每个乐队都是绝对的大牌，爱舞台-二手玫瑰，过载-夜叉，台湾-胡德夫，草莓-谢天笑，其实胡德夫更值得看，为什么，因为老人家不知道以后还能不能来大陆现场演出了。 最后我们还是看老谢去了，老谢的那场，虽然没有何勇来的更猛，但是竟然有人放烟火，这个就高级了，而且还有许多牛b闪闪的TT: （via http://weibo.com/modernsky） 图片可能看不出来，这是个闪着绿色镭射光的tt,还有烟火,我都不知道去哪里搞这么强大的道具: (作者:我) 贴视频一段，《约定的地方》，因为音响问题中断了一会儿，又因为烟火中断了一会而，都被我不小心拍下来了。要对那个主办方姑娘说一声对不起，不该骂你，你是无辜的，看不到的点这里： 听说老谢这场有个姑娘受伤了，手骨折，安全第一啊，希望你早日康复。最后老谢又砸琴了。 最后总结一下中心思想——去tmd，我们明年见。 ps：这三天充实的紧。谢谢5月2日晚上，seal王同学等了我们那么久，最后还开车送我们回家，谢谢。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/514/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>老胳膊老腿儿的草莓音乐节之4月30号篇</title>
		<link>https://www.zhaojianfei.com/archives/506</link>
		<comments>https://www.zhaojianfei.com/archives/506#respond</comments>
		<pubDate>Sun, 01 May 2011 15:52:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[看点什么]]></category>
		<category><![CDATA[rock]]></category>
		<category><![CDATA[摇滚]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/506</guid>
		<description><![CDATA[五级大风，沙尘暴，就是这样的2俅天气也拦不住摇滚青年对音乐和感情的向往。 昨天去了草莓音乐节第一场。同去的有车友会的西西，砖头和seal，西西是个好摇滚女青年，我们俩经历的摇滚时代差不多，有很多东西能分享。由于这次又有小木所在的声音碎片乐队，所以上午直接去了小木家。混了顿饭还有半个前天的生日蛋糕,生理和心理都极其满足的出发了。 下午入场以后，开始吃土，总之昨天就是吃土的一天，喝水的时候吃土，吃饭的时候就着土，可能接吻的时候能好一点?到声音碎片上场的时候，其实是第一次听他们的现场。而且歌曲都不太熟，谁让我是老人家呢。但是，声碎是那天下午草莓舞台最棒的现场。贴一段视频《情歌而已》，看不到的猛击这里: 最high的那首&#60;优美低于生活&#62;我和别人在现场蹦达着玩去了，没拍。 晚上施小展同学携夫人小静莅临，可惜现场不卖票了，关键时刻还是需要票贩子，比原价贵20入场。 好了，今天我要说的是——我终于看了一场何勇的演出，站在台下热泪盈眶，仿佛那个15岁的我又回来了，这是音乐的力量。而这股力量导致的结果是我嗓子喊哑了。《垃圾场》《姑娘漂亮》《钟鼓楼》，我用12年时间才看到。《垃圾场》的那张专辑，现在还在我的箱子里。 贴个当天最热现场，能听到我的呐喊。当时的天气是重度扬沙，5级大风，气温也就10度。但是现场起码有10000人。看不到的猛击这里 晚上又在施展的帮助下用夫人小静的车拉了我，西西，seal，砖头一共6个人去吃串儿喝酒，感谢施展和其夫人小静同学。对了，我昨天破戒了，抽了大约10根烟。我是不是又变得讨厌了吧?但是今天没有抽，我的放纵目前只献给摇滚和姑娘。 本来今天打算去东方红或者八达岭，结果早上起来胳膊酸(举的)，腰酸(站的)，腿酸(蹦达的)，只能勉强刷个4环，这老胳膊老腿儿啊，马上就不是年轻人了呢。5月2好的，我来了。to be continue。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/506/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>对不起，戒了</title>
		<link>https://www.zhaojianfei.com/archives/497</link>
		<comments>https://www.zhaojianfei.com/archives/497#respond</comments>
		<pubDate>Sun, 24 Apr 2011 15:36:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[戒烟]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=497</guid>
		<description><![CDATA[介于最近这几天关于复吸的念想越来越强烈，我觉得有必要专门来讨论一下这个问题。今天是两个月零八天，截止到此时此刻节约了 677块钱钱，少抽了1355根烟。1355根是个什么概念？以最普通的脸盆来说，能装满满两脸盆。 前几天去看望一个几年不见的老朋友，聊了一会儿之后他就开始张罗着找烟给我，当我摇摇头说戒了的时候，能看到他的眼睛亮了一下。羡慕，鄙视和怀疑。这就是我从他眼睛里读到的。不抽烟的人可能不知道，抽烟这回事和吸毒什么的都差不多，基本上都是抱着“要死大家一块儿死”的心态。如果有人主动脱离队伍，大家除了祝贺你恭喜你之外的潜台词都是”您丫行不行啊，实在不行就回来，我们随时欢迎你”之类的话。因为无法承受队伍从内部瓦解这样的挫折感。抽到大家一起掉脑袋也可以，烟民都会那样，但是中途离开的就是汉奸混蛋了，你最好回来，你不回来那我画圈圈诅咒你复吸。 两个月的时候，其实就是在一周之前。我觉得我彻底摆脱那个东西了。如果再加上一定的锻炼我就仿佛就像戒毒成功的失足青年又能重返社会了。我这个高兴啊，这个喜上眉梢啊。可是正所谓千里之堤毁于蚁穴、不积跬步无以至千里、小三都是一锄头一锄头挖成的之类的道理。当这些复吸的小愿望一点点的积累起来的时候，爆发会不会是早晚的事呢?比如作为电影爱好者，可不可以不要让《伦敦大道》里的克林法瑞尔什么的抽烟那么有型，可不可以不要让《加州靡情》里的大卫杜楚尼抽烟抽的那么摇滚。当然《志明与春娇》我是当成复吸圣经来看的。我自始至终认为电视/电影里出现抽烟的镜头是因为导演拿了烟草公司的钱，可是彭浩翔却说绿好彩连广告费都没出过，那你还把他们拍那么帅?你知道这对我们处于戒烟期的人意味着什么吗?就像男人刚割了包皮，几天后竟然误入大学女澡堂一样——到处都是诱惑而且个个致命。 戒烟，戒酒，戒糖，戒俨茶，戒垃圾食品，戒咖啡，戒小清新，戒苹果，戒暧昧的姑娘，你看但凡是可以戒除的东西都是好东西，只要掌握好量的话还是能让生活充满快感的。可是真的戒掉一个人的话……嗯哼?]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/497/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>本周计划骑行路线-健翔桥-居庸关-八达岭-南口-阳坊-颐和园</title>
		<link>https://www.zhaojianfei.com/archives/496</link>
		<comments>https://www.zhaojianfei.com/archives/496#respond</comments>
		<pubDate>Mon, 18 Apr 2011 15:27:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>
		<category><![CDATA[运动]]></category>
		<category><![CDATA[路书]]></category>
		<category><![CDATA[骑行作业]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/496</guid>
		<description><![CDATA[本周计划骑行路线，有15公里山路?有点挑战，爬爬看。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/496/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>作业越来越多，到今天为止总结一下，暨庆祝戒烟两个月整(多图)</title>
		<link>https://www.zhaojianfei.com/archives/493</link>
		<comments>https://www.zhaojianfei.com/archives/493#respond</comments>
		<pubDate>Sat, 16 Apr 2011 15:25:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[戒烟]]></category>
		<category><![CDATA[日常]]></category>
		<category><![CDATA[运动]]></category>
		<category><![CDATA[骑行作业]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/493</guid>
		<description><![CDATA[自从开始骑车以来，外出作业已经有三次。分别是三周以前的大厂/燕郊之行，半个月前的凤凰岭之行和今天的单飞13陵。这三次骑行，一次比一次轻松，身体可能已将慢慢的适应了这种高强度的运动。而且骑行在山里，清新的空气和温柔的小风让我觉得生命的意义还真tmd在于运动。 下决心改变自己，所以从戒烟开始；由于一直喜欢自行车而且在同事的引诱下开始玩这个。减肥、锻炼什么的都是这个爱好的附属品。主要是运动能让我重新认识自己，重新用一种新的方式感知身边的世界，我希望能够坚持下去，而且北京周边这些个经典线路还是要都跑一遍才好。 第一次出去骑是去大厂，来回有140公里。顺便还去了一趟学校看了一下，有非常强烈的时空交错感，仿佛在下一个路口就能看见去上课的你。路线是沿地铁八通线到土桥，继续沿103国道向东，走武兴路，然后就一直走下去吧，反正都是大平路，非常的无聊。 其实去大厂的原因是这个： (作者:我) 这是午餐，我吃过的最好吃的牛肉馅肉饼，没有之一。顺便和老板聊了聊北京的牛羊肉食品安全问题，结论是还是不知道为好，该吃什么吃什么。 第二次是半个月前，我想单飞一趟13陵，结果在华北电力大学门口遇上了车友烟灰，西西，16，砖头的小队，被果断收编，杀向凤凰岭。一路有说有笑有大姐有姑娘有猛男，属于完美的一天。 (我是那种一看见山就不知道姓什么的人，作者:我) (友好的大狗黑子和西西，作者:我) (凤凰岭的什么什么山，作者:我) (找找我呗,作者:路人甲) (合照，作者:阿拉斯加大狗的主人) (合照，文艺青年们，作者:路人姑娘) 第三次，今天的13陵之行。今天无人能阻挡我单飞的愿望了，因为出来的晚也不会有人收编我。这一次是景色非常好的一次骑行，当然我知道最好的永远都在下一次。 某些同学们，这个熟悉吗 (作者:我) 在昌平城区的时候，走错了路，误入一个非常好玩的地方，这条路是个死胡同，但是路很宽，经常有人/车走错。这个地方也很特别，由于是个开阔的死胡同，方便停车，而且隐蔽，所以见下图: （大死胡同，作者我） (大死胡同周边的墙上全是这个，也难怪，这是个车震的黄金地点，感兴趣的同学可以去试试，作者我) (大坝:作者我) (18年前老爸带我来过这个地方，现在已经关门了，老爸一定很高兴。作者我) （头盔的最大作用是把头发搞乱，作者我） 插播视频一段，看不到的同学点这里 (我不敢做那个船，作者我) (这张不错，作者路人甲大姐) (放山的时候照的，放山实在太爽了，作者我) (大坝，作者我) 环水库一圈之后就回去了，路上又一次被收编，这次是北雁单车户外的团队，竟然有三个MM,这样的团不跟的话就是眼瞎了，和老张一路聊着就回来了。今天从出家门开始算，120公里。下一次再去13陵的话，就把13个陵全转一遍，在定陵找找高二那年的记忆，那是10年前的事了……… PS：今天是我戒烟两个月整，我没有抽过一根烟，现在生理上已经摆脱它了；心理上有时候还会想，主要是养成的坏习惯太多了，时不时的就能触发这个机制。还好意志力还能挺住，继续享受不抽烟生活，用一年时间把自己练的棒棒的，实现那个梦想。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/493/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>twitterfeed test2</title>
		<link>https://www.zhaojianfei.com/archives/442</link>
		<comments>https://www.zhaojianfei.com/archives/442#respond</comments>
		<pubDate>Mon, 04 Apr 2011 14:03:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/442</guid>
		<description><![CDATA[twitterfeed test2]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/442/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>twitterfeed test</title>
		<link>https://www.zhaojianfei.com/archives/441</link>
		<comments>https://www.zhaojianfei.com/archives/441#respond</comments>
		<pubDate>Sun, 03 Apr 2011 17:12:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/441</guid>
		<description><![CDATA[twitterfeed test]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/441/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>狡兔三窟，你丫封我啊，你丫升级啊，哥又回来了</title>
		<link>https://www.zhaojianfei.com/archives/440</link>
		<comments>https://www.zhaojianfei.com/archives/440#respond</comments>
		<pubDate>Sun, 03 Apr 2011 16:43:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/440</guid>
		<description><![CDATA[托 会+会 的福，以前那个godaddy的主机ip被封了。原因不详。 但是我又回来了，这是最重要的。 &#160;]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/440/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>石博同学，你在哪里，没错就是你</title>
		<link>https://www.zhaojianfei.com/archives/436</link>
		<comments>https://www.zhaojianfei.com/archives/436#respond</comments>
		<pubDate>Fri, 11 Mar 2011 17:10:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/436</guid>
		<description><![CDATA[石博，女，应该是83或者84年出生，石家庄人，专科毕业于华北科技学院，本科毕业于河北工业大学。后来去了二外上过雅思。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/436/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第九天&#8212;&#8212;意志越来越薄弱了</title>
		<link>https://www.zhaojianfei.com/archives/434</link>
		<comments>https://www.zhaojianfei.com/archives/434#comments</comments>
		<pubDate>Fri, 25 Feb 2011 07:58:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[戒烟]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/434</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160; 今天是第九天，我一定要说出来。最近赶上公司最忙的时候，也是我最忙的时候，晚上睡得有点晚，再加上各种工作，导致我在昨天下午和昨天晚上基本处于无法正常思考的阶段。而现在正是需要深入思考问题的时期。我非常的沮丧，因为这已经不像以前的我了。我不知道是不是由于以前抽烟而导致的现在身体变差还是现在戒烟的短期戒断症状。总之现在的精神状态就像电视上那些没钱抽大烟在街上乱晃的臭流氓，就差一把鼻涕一把眼泪了。 &#160;&#160;&#160;&#160;&#160; 想来一根，又不想破坏这九天的成果。 &#160;&#160;&#160;&#160;&#160; 明天第十天了，摆酒庆祝，谁来?]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/434/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>戒烟日记1-第五天-经验和心得</title>
		<link>https://www.zhaojianfei.com/archives/433</link>
		<comments>https://www.zhaojianfei.com/archives/433#respond</comments>
		<pubDate>Mon, 21 Feb 2011 18:01:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[戒烟]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/433</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160; 八年烟龄，去年年底我决定不再抽了，因为我发现各种吸烟的理由听起来都是那么的苍白，而烟对身体的伤害却是实打实的能够切身体会。所以希望身边的朋友们也加入，这样可以共同鼓励，有个健康幸福的将来。厨房不是我的吸烟室谢谢。 &#160;&#160;&#160;&#160;&#160; 五天了，有好消息坏消息您想先听哪一个?那当然是坏的吧。 &#160;&#160;&#160;&#160;&#160; 缺点，或者比较困难的地方： 1，精力无法集中，在下午3：00左右很明显。吸烟的欲望很强，需要克制。 2，如果你和我一样是熬夜的人，那么晚上这段时间是最难熬的。这时候如果宗民拿好烟过来诱惑我的话，我绝对高高兴兴的就认怂了。有三点是非常重要的，第一，必须把家里所有的烟都抽完，给自己来一个最后的狂欢。比如我最后的狂欢就是一盒苏烟铂晶，没事，都最后的狂欢了，整点好的呗。第二，扔掉所有的烟灰缸和打火机，这是非常重要的，因为前几天夜里我还有找烟的冲动，但是一想到真的没烟了，连烟灰缸都没，就放弃了。第三，如果有抽烟的室友的话，祈祷他不要熬夜。 3，反射式吸烟欲望是最多的，也比较难克服。所谓反射式就是比如早上的起床之烟,XXOO的事后烟，获得成就感的庆祝之烟，比如我还有厕所之烟，下公交之烟，等公交之烟，开会之烟。总之就是以前需要没事干就抽烟的场合，当戒烟这段时间再身处这种环境的话，就会有吸烟的冲动。这时候我的办法是深呼吸，提醒自己不能破环这几天努力的成果，揉一揉戒烟贴(这个一会儿再解释)。 4，我已经很胖了，拜托不要再让我食欲增加了。这段时间食欲明显增加，显然是在找烟瘾的替代品。这个不多说，少吃，少吃糖。不过话说回来，嗑瓜子真的非常有效，在替代烟瘾方面。 &#160;&#160;&#160;&#160;&#160; 该好消息了： 1，早上起床肺不会难受，咳嗽和干呕的次数明显减少。感觉呼吸很轻松。 2，意淫自己将来不吸烟了，健康快乐，住上了77块钱的房，和新闻联播里演的一样一样的。 3，能获得一点点成就感，在别人夸你做得对的时候。 4，自己的烟民朋友们会多崇拜你一点。 其他的好消息哪里都能看得到，我就不多说了，比如癌症概率降低什么的。 &#160;&#160;&#160;&#160;&#160; 方法：我才五天而已，这个方法好不好还不知道，但是起码这五天过得不痛苦。 1，戒烟贴（尼古丁贴片或者尼古丁口香糖），这真是个好发明。我早上刚贴上去时我通常会high几秒，和吸烟感觉类似。烟瘾犯了的时候除了深呼吸，揉一揉戒烟贴，让尼古丁更多的渗入皮下缓解烟瘾也挺有用，还有就是坚定的意志了。揉戒烟贴的过程是一个正确刺激的过程，加强戒烟贴的安慰剂作用。 2，麦当当和开封菜的咖啡搅拌棒非常好用。需要用力吸才能吸的动，和抽烟类似。比牙签耐咬。重要的是叼在嘴里还很有型?实在是居家旅行，谋财害命之……. 3，把戒烟省下的钱给自己买个礼物。 &#160;&#160;&#160;&#160;&#160; 戒烟是个长期的过程，心魔难除，没个两三年都不好说彻底戒掉，有志同道合的朋友可以互相学习，分享方法。早日让老婆更爱你，让父母更放心，让厨房不再沦为你的专属吸烟室。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/433/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>矩形重叠问题，碰撞算法，Objective-C实现</title>
		<link>https://www.zhaojianfei.com/archives/426</link>
		<comments>https://www.zhaojianfei.com/archives/426#respond</comments>
		<pubDate>Fri, 07 Jan 2011 14:55:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iOS-Dev]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/426</guid>
		<description><![CDATA[   这个实际上是《Objective-C 2.0 程序设计》第八章 练习题第6题，觉得挺有意思，就分享一下。还没看答案，这个是我能想到的最优算法了，一会儿去看看答案如何。

      已知矩形Rectangle类继承自GraphicObject类（这个类 和本次的操作没有任何关系）； 座标 XYPoint类，代码如下：

Rectangle类,Rectangle声明一个intersect方法，该方法传入一个矩形作为参数， 返回一个重叠的Recangle类型的对象，Rectangle类有座标origin作为属性，origin是XYPoint类型。[还有更多......]]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/426/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>看过《疯狂电视台》</title>
		<link>https://www.zhaojianfei.com/archives/425</link>
		<comments>https://www.zhaojianfei.com/archives/425#comments</comments>
		<pubDate>Sat, 01 Jan 2011 15:59:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[看点什么]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/425</guid>
		<description><![CDATA[很棒，五星推荐。 有些包袱笑的我眼泪鼻涕一大把。各种创意，各种互动，我都爱死了。 加入内地网络词汇，目的肯定是和大陆观众套近乎，与时俱进。但是说实话我已经审美疲劳了。也不错，反正现在国人的词汇也挺匮乏的。台湾本土政治笑话，可能只有台湾人能听的懂，大陆不理解两党之争的笑点在哪里。因为我们是人大管举手，政协管拍手，两党我们脑中没有任何概念。难为伟忠哥了。 创造力非常重要。钦此。 PS：保利剧院里面联通3G完全没有信号，这怎么可能，非常不满。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/425/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iphone开发者之路（1）</title>
		<link>https://www.zhaojianfei.com/archives/422</link>
		<comments>https://www.zhaojianfei.com/archives/422#respond</comments>
		<pubDate>Thu, 30 Dec 2010 14:18:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/422</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160; 自从有了iphone4之后，深深体会到了苹果的优势和乐趣。这些都不再多说了，网上的各种评论一堆一堆的。对于未来智能手机平台的大趋势，可以做一点点预测，ios和andriod是绝对的主流，鹿死谁手未可知；wp7肯定不会有当年wm6.1,6.5那样的风光了；诺基亚和intel搞得meego由于入市太晚，只能说太迟了，除非有足够海量和爆炸性的宣传，还能拉拢大量的开发者的话，没准能和wp7分一杯羹；黑莓的用户翻来覆去就那么多，不会有太大的突破。 &#160;&#160;&#160;&#160;&#160; andriod系统不完善，这是事实。身边有同事在用desire，他平常做的就是更新rom，刷系统，装sence.看起来哥们他又回到了当年我们用wm的时代。其实苹果的理念(很可能只是乔布斯的)是正确的，没用必要让用户去做这些操作，用户只要好好使用就可以了，没有必要考虑什么root、怎样刷系统、什么是工程模式。除非人人都有点技术宅倾向。而且andriod的盗版软件问题现在看来是非常严重，解决这个问题很可能遥遥无期。我可能会给我爸妈买iphone，但是目前绝对不会买andriod平台的手机。 &#160;&#160;&#160;&#160;&#160; 在掌上设备大行其道的将来，苹果是最有优势的，因为ios的统一性。不排除iphone5出现可能破坏这个优势。反正已经放弃iphone1代2代了，但是统一性这一理念应该不会大变。andriod的上的各种分辨率，屏幕大小，cpu主频，给开发者造成了许多头疼的麻烦。所以我选择ios开发：统一、优雅、双刃剑性质的封闭、最后就是钱的因素了。只靠广告能卖多少钱呢? &#160;&#160;&#160;&#160;&#160; 学习objective-c和iphone手机开发，这是个纯粹兴趣,我只需要一个开发环境。不过瞅瞅我温顺的thinkpad还很坚挺的跑着win7，实在是无法入手一台mac os系统的电脑。好吧我买不起macbook pro,买mac mini还需要陪个显示器，入个小白吧，又想说值得吗，为了学一门技术而入两个新设备，好像有点败家。在现在电脑上装mac os,想想我已经是win7+linux双系统，响应国家号召不折腾了。 结论是我需要一个好一点的虚拟机。 &#160;&#160;&#160;&#160;&#160; 国内只找到了电骡上的一个版本，msc osX 10.5的vm虚拟机，高高兴兴的配置好，装xcode时发现新版xcode只支持mac os X 10.6.4以上版本，这下褶子了，一兆小水管下载这个着实不易。最后感谢google，我找到了这个版本MAC OS X Snow Leopard 10.6.4 (AMD/Intel) VMWare Images (Update 7.7.2010)，现在来说的话，这个版本还算好用，不过不知道是不是我cpu的原因，经常会一卡一卡的。这个版本是俄罗斯人搞得，系统对中文支持不好。凑合用吧。使用方法请看说明，声卡支持显卡支持网卡支持，我用的那个64位版，每次开机使用自带的legacy.iso引导。 &#160;&#160;&#160;&#160;&#160; 《objective-c2.0 程序设计》是语言入门教材。同时手上还有一本《iphone3开发基础教程》，希望能在一个月内学完，有一个创意需要尽快实现。 &#160;&#160;&#160;&#160;&#160; 虽然现在已经过了app个人开发者的黄金时代，但是未来的发展我还是很看好的。还是那句话，一切的技术都是为了让生活更好玩。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/422/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在梦想的道路上晒太阳-2010年终总结</title>
		<link>https://www.zhaojianfei.com/archives/418</link>
		<comments>https://www.zhaojianfei.com/archives/418#respond</comments>
		<pubDate>Wed, 22 Dec 2010 16:06:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/418</guid>
		<description><![CDATA[又到年底了，盘算着今年能拿多钱年终，不多，回去孝敬父母。 今年本来定的目标是： 我要加薪 没谱的事 GF 和加薪一样没谱 asp.net专家级，js提高 基本完成 中级职称 没考 Python&#38;Dejango Learning Python看了一半,Django完全没学 深入学习php 没那么深入，还是在表面 平均每月听一张唱片 应该完成了吧 平均每月看一本书 没看完 换一份更好的工作 最后还是没去 英语口语 和加薪一样没谱 结果真是不乐观啊，在通往社会主义的康庄大道上越走越远。今年除了老本行asp.net有了思想觉悟上的提高之外，学了一点点python，不过由于有项目就有撂下了。到现在我仿佛又对python失去兴趣了……不过想想她优美的语法，明年还是要找时间研究一下。php作为谋生的第二语言，现在了解的还不够深入，停留在应用阶段是不行的，如果有时间的话，作为python后的第二梯队研究之。 今年本来想要换工作，但是在最后时刻我发现了更cool的东西。那就是iphone4和appstore,面对如此有质感和优雅的东西，真的激起了我原始的占有欲望，一定要在appstore上留下我自己的程序。所以，明年的主要目标是做iphone手机程序开发。这也是我目前在学习的。 Paul Hardcastle的《jazzmasters VI》 是今年我听过的最好专辑第一位。今年听了整一年的smooth-jazz,自从去年某个事件听了从小木那里拿来的fourplay之后就对这种东西上了瘾。直接导致我入手了ipod classic。smoothjazz真的很艳，有很多次我在地铁上听着听着就想把衣服脱光。 周云蓬的   &#60;清炒苦瓜&#62; 虽然是08年出的，但是我今年才听。是年度推荐第二位。 不算技术类书籍今年读过大约8本书,也有把以前的翻出来重新看的。现在手上还压着三本《1q84 book3》(台版)，《1988我想和这个世界谈谈》，《三体3》。1q84非常好看，应该算是村上的最后一个长篇了吧，不知道他以后还能不能写的动。《三体3》则是我期待了一年多的大刘的续作。 年度最佳电影毫无疑问颁给《Inception》。克里斯多夫诺兰果然又一次没让我失望。一流的故事和剧本，一流的演员。莱昂纳多越来越有男人味了。 今年我去了泰国，银川，上海，杭州。年底马上要去趟邢台。泰国是天堂，姑娘一级棒(参见出差在泰国系列)；银川的手抓和羊杂碎太棒了，了了我人生一大愿望；上海世博排队真讨厌，早点好吃尤其是小笼包，太湖的螃蟹也不错；杭州西湖名不虚传，灵隐人多磕头如捣蒜，醋鱼太酸无爱。 所以，明年的计划如下: GF 永远是第一位的 asp.net深入 老本行不能丢 objective-c&#38;iphone开发 掌握 完成那个app并在appstore上线 要拿下 中级职称 要拿下 有可能的话，从事iphone手机开发相关工作 要拿下 入一个macbook pro 15.4” 贵 英语口语 需要 骑车 身体是本钱 戒烟 这是明年最先完成的事，不想抽了，对自己和别人的身体伤害太大。 一个月一张唱片 其实一般是一周一张 一个月看一本书(技术类书籍除外) 难 有可能的话，去一趟海南或者丽江 有可能 好了，新的一年，愿社会越来越美好，愿北京空气好一点，愿楼市崩盘，愿访民有家可归，愿晓波无罪释放，愿你我加薪，愿李刚死绝，愿2012不再遥远，愿梦想的阳光打在你的脸上。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/418/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>这两个演员也在现场,他们是couple？</title>
		<link>https://www.zhaojianfei.com/archives/414</link>
		<comments>https://www.zhaojianfei.com/archives/414#respond</comments>
		<pubDate>Mon, 13 Dec 2010 05:00:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>
		<category><![CDATA[飞常低俗]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/414</guid>
		<description><![CDATA[本来对丹泽尔华盛顿和安妮海瑟薇这两个演员没什么感觉，现在充满好感。其实和喜欢的妞一起去颁奖现场，也有点小浪漫。不是吗? via http://www.kansascity.com/2010/12/09/2509904/empty-chair-left-for-jailed-chinese.html American actors Denzel Washington and Anne Hathaway attend the ceremony for Nobel Peace Prize laureate Liu Xiaobo at city hall in Oslo, Norway Friday Dec. 10, 2010. Liu, a democracy activist, is serving an 11-year prison sentence in China on subversion charges brought after he co-authored a bold call for sweeping changes to Beijing&#8217;s one-party communist political system. Washington and Hathaway will host the Nobel Peace concert for Liu on Saturday. Read more: http://www.kansascity.com/2010/12/09/2509904/empty-chair-left-for-jailed-chinese.html#ixzz17xsEPR8t]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/414/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>免于恐惧的自由</title>
		<link>https://www.zhaojianfei.com/archives/413</link>
		<comments>https://www.zhaojianfei.com/archives/413#respond</comments>
		<pubDate>Tue, 30 Nov 2010 09:52:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[飞常低俗]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/413</guid>
		<description><![CDATA[美国总统罗斯福说过，民主社会，有四种自由是不能随意被剥夺的，即言论自由、信仰自由、免于匮乏的自由和免于恐惧的自由。 今天看到这样一篇文章，与前几日上海大火有关。《一条献花帖的30个小时》,底部评论一枚: [10] 回复：一条献花帖的30个小时 所以，只有遇到重大公共事件，我们才可以把专制的面目看得清清楚楚。平常那些“扶老携幼”的举动是看不出来的。他们也会和颜悦色，也会彬彬有礼，但是当你质疑真相并追究真相的时候，真相没有出来，他们的真面目却出来了。所谓维稳，变成了掩盖真相，变成了维护威权，变成了镇压质疑，变成了保护罪恶——以维稳的名义，以纳税人的钱为经费，去压制纳税人。这就是我们必须实行民主的理由，必须言论自由，新闻自由的理由，必须实行全民有效监督的理由，必须争取选票的理由。 用户：ztsr 发表于：2010-11-29 15:08:35支持(1) 反对(0 评论的非常到位，但是我有自己的看法，并非是只有遇到重大公共事件，可能生活中任何一个与他们接触的事件或场合都能看到他们的真面目或者说态度并没有新闻联播里那样&#34;和蔼可亲&#34;。当你办通过正规渠道办各种手续或者证件的时候，当你质疑他们工作效率低下的时候，当你为某个事件鸣不平的时候，当你以法律为依据据理力争的时候(比如宪法)。我不以道德的高度来评价他们的人品和修为，虽然入了行就代表男不举女不孕，但是就如aiweiwei对监视和伤害过他的警察和国宝所说的那样:我不恨你们任何人。是敏感词造就了现在的你，是敏感词让你们使用手中的公权公然威胁纳税人公民。而这个敏感词，早晚也会随着我国公民意识的觉醒而变得不再敏感。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/413/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>没忍住</title>
		<link>https://www.zhaojianfei.com/archives/412</link>
		<comments>https://www.zhaojianfei.com/archives/412#respond</comments>
		<pubDate>Mon, 29 Nov 2010 07:55:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[看点什么]]></category>
		<category><![CDATA[1Q84]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/412</guid>
		<description><![CDATA[等得太久了，又有消息说要明年才出版，算了，我先来一个赖明珠版的book3吧。国内的等出了之后再补齐。 还有大刘的《三体3》，快点出啊。 &#160;]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/412/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>微博越来越火,博客基本上就荒废了&#124;asp.net生成新浪微博rssfeed方法</title>
		<link>https://www.zhaojianfei.com/archives/402</link>
		<comments>https://www.zhaojianfei.com/archives/402#comments</comments>
		<pubDate>Wed, 17 Nov 2010 13:51:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[.net开发]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[新浪微博rss]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/402</guid>
		<description><![CDATA[浪网微博依据他名人博客的优势和依然流氓的推广，目前已经做到毫无疑问的国内微博头把交椅。其余的什么腾讯，搜狐，网易，老牌一点的做啥，嘀咕都没有如今浪网微博这般势力壮大。当然，流氓本性不改，听说负责删贴的编辑就300多人。所以依然是娱乐为主。那就娱乐吧。 公司老板想在网站上加个微博的内容，本来说是要搭建一个微博，此时我难中闪过某网站统计的程序员之十大最怕之一就是不懂编程的老板。然后我说大哥，都这么多微博了，而且微博这种东西不是我们小公司玩得起的。你不是想要微博内容吗，我给你从浪网拿过来就是。于是就这么定了。 代码参考了月光大人写的 php生成sina微博rssfeed方法。这个是asp.net版。 我的浪网微博:http://t.sina.com.cn/uspython 多联系 网页代码sinafeed.aspx &#60;%@ Page Language="C#" AutoEventWireup="true" CodeFile="sinafeed.aspx.cs" Inherits="T_sinafeed" %&#62;&#60;%@ OutputCache VaryByParam="*" Duration="60" %&#62;&#60;?xml version="1.0" encoding="utf-8"?&#62; &#60;rss version="2.0"&#62; &#60;channel&#62; &#60;title&#62;sinarssfeed&#60;/title&#62; &#60;link&#62;rssfeed&#60;/link&#62; &#60;description&#62;rssfeed&#60;/description&#62; &#60;language&#62;zh-cn&#60;/language&#62; &#60;%=StrRSS%&#62; &#60;/channel&#62; &#60;/rss&#62; 后台代码： sinafeed.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Net; using System.Text; using System.Text.RegularExpressions; public partial class T_sinafeed : System.Web.UI.Page { protected string StrRSS = &#8220;&#8221;; protected void Page_Load(object sender, EventArgs e) { this.LoadData(); } private void LoadData() { /* 通过浪网的widget页面取的需要的数据，通过正则表达式 */ WebClient myWebClient = new WebClient(); //构建WenClient对象 myWebClient.Encoding = Encoding.UTF8; myWebClient.Credentials = CredentialCache.DefaultCredentials; string startflag = &#8220;&#60;div id=\&#8221;content_all\&#8221; class=\&#8221;wgtList\&#8221;&#62;&#8221;; //widget页面开始标签 string endflag = &#8220;&#60;div id=\&#8221;rolldown\&#8221; class=\&#8221;wgtMain_bot\&#8221;&#62;&#8221;; //widget页面结束标签 //通过uid获取用户wedget页面，uid即你个人页面http://t.sina.com.cn/1430466211/profile中间的部分，比如我的是1430466211 //http://v.t.sina.com.cn/widget/widget_blog.php?height=500&#38;skin=wd_01&#38;showpic=1&#38;uid=1430466211 是浪网widget的链接，我们就是用它。 string temp = myWebClient.DownloadString(&#8220;http://v.t.sina.com.cn/widget/widget_blog.php?height=500&#38;skin=wd_01&#38;showpic=1&#38;uid=1430466211&#8221;); //截取所需字符串 temp = temp.Substring(temp.IndexOf(startflag), temp.IndexOf(endflag) &#8211; temp.IndexOf(startflag)); //所需内容部分的正则表达式 string strReg = &#8220;&#60;p class=\&#8221;wgtCell_txt\&#8221;&#62;([\\S\\s]*?)&#60;/p&#62;([\\S\\s]*?)&#60;a href=\&#8221;(.*)\&#8221; title=\&#8221;\&#8221; target=\&#8221;_blank\&#8221; class=\&#8221;link_d\&#8221;&#62;([\\S\\s]*?)&#60;/a&#62;&#8221;; Regex re = new Regex(strReg, RegexOptions.IgnoreCase); MatchCollection mc = re.Matches(temp); if (mc.Count != 0) { /*字符串格式如下 &#60;item&#62; &#60;title&#62;TITLE&#60;/title&#62; &#60;&#62;description&#60;![CDATA[DESCRIPTION]]&#62;&#60;/description&#62; &#60;pubDate&#62;DATE&#60;?php echo 9-$i; ?&#62;:04Z&#60;/pubDate&#62; &#60;guid&#62;GUID&#60;/guid&#62; &#60;link&#62;LINK&#60;/link&#62; &#60;/item&#62; */ StringBuilder rsssb = new StringBuilder(); for (int i = 0; i &#60; mc.Count; i++) { rsssb.Append(&#8220;&#60;item&#62;\r\n&#8221;); rsssb.Append(&#8220;&#60;title&#62;&#60;![CDATA[&#8220;); //得到匹配成功的title部分，即微博正文，根据正则表达式，处于数组的第1个位置 rsssb.Append(mc[i].Groups[1].Value); rsssb.Append(&#8220;]]&#62;&#60;/title&#62;\r\n&#8221;); rsssb.Append(&#8220;&#60;description&#62;&#60;![CDATA[&#8220;); //得到匹配成功的description部分，这里只是把发布时间，如：今天 15：30，放了进来，根据正则表达式，处于数组的第4个位置 rsssb.Append(mc[i].Groups[4].Value); rsssb.Append(&#8220;]]&#62;&#60;/description&#62;\r\n&#8221;); rsssb.Append(&#8220;&#60;pubDate&#62;&#8221;); //这里的时间是系统的时间，你也可以根据description的时间信息把微博的发布时间switch出来，我就不列举了。 rsssb.Append(DateTime.Now.ToString(&#8220;yyyy-MM-ddTHH:mm:ss&#8221;) + &#8220;+08:00&#8221;); rsssb.Append(&#8220;&#60;/pubDate&#62;\r\n&#8221;); //忽略guid //sb.Append(&#8220;&#60;guid&#62;&#8221;); //sb.Append(Guid.NewGuid().ToString()); //sb.Append(&#8220;&#60;/guid&#62;\r\n&#8221;); //得到微博的链接 rsssb.Append(&#8220;&#60;link&#62;&#8221;); rsssb.Append(mc[i].Groups[3].Value); rsssb.Append(&#8220;&#60;/link&#62;\r\n&#8221;); rsssb.Append(&#8220;&#60;/item&#62;\r\n\r\n&#8221;); } //将构造完成的字符串赋给前台变量 this.StrRSS = rsssb.ToString();<a class="moretag" href="https://www.zhaojianfei.com/archives/402"> Read the full article...</a>]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/402/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>通货膨胀,各种涨价,关注的朋友可以看看</title>
		<link>https://www.zhaojianfei.com/archives/401</link>
		<comments>https://www.zhaojianfei.com/archives/401#respond</comments>
		<pubDate>Tue, 16 Nov 2010 09:21:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/401</guid>
		<description><![CDATA[我看了之后总结的就是： 如果有积蓄的话，最近几年会贬值的很厉害。 如果最近买房子的话，未来加息怎么办。 只能拼命加薪了。否则没法过。 来源：天涯财经&#160; 作者：qiurichuyang &#160;&#160;&#160;&#160;&#160;&#160; 最近的几条新闻： （1） 前几个月外汇储备呈现下降的趋势，9月份新增几百亿美元。 （2） 央行加息，一年期定期存款提高25个基点。 （3） 汽油柴油涨价，有色金属涨价，糖涨价，棉花涨价，钾肥涨价，食用油涨价，一连串的涨价。 （4） 9月底新的房地产调控政策出台，国庆之后，股市疯狂上涨。 （5） 上半年，国内移民成风，最近，香港、新加坡提高了移民政策。 （6） 老美一边不断地催促人民币升值，一边弄着量化宽松政策，贬值美元。 还有几条花边新闻： (1) 索罗斯携90亿美元来了香港，新的办公室正在装修中。 (2) 温州人的资金从房市里逐步退出，开始饥渴地盯着更多的炒作目标。 中国经济开始走进波澜壮阔的时刻了。 九十年代，咱们政府把人民币兑美元汇率从2:1一下子调到8:1，从此开始死心塌地地要利用家里充足的劳动力和资源给老外打工。哎，这就是中国特色，人民币汇率就像玩游戏似地，想怎么调就怎么调。我在想，如果那时某人准备出国，如果懒了一天或者有事耽搁了，第二天到银行换美元，一看汇率，肯定哭死了。 从那时开始，中国的出口工业就蓬勃发展起来了。出口企业高兴地拿着美元回来了，可是咱们的政府不放心，毕竟美元是老美的东西，拿着在群众的手上，不好。于是政府要求强制结汇，有美元的都过来换成人民币。那换给的人民币从哪里来呢？好办，印吧，不过就是一些高质量的印刷品嘛，费不了多少成本。 政府拿着美元，就是外汇储备。这几年出口业务很好，一不小心，外汇储备量也火箭似上去了。拿着这么多美元，做点什么好呢？别的国家还在乎个国际收支平衡，咱们不是，咱们认为钱拿在手里，就是赚了的。可是，那美元不也是美国开动一下印钞机印出来的嘛。 自己印人民币的成本不高，我想人家美国印美元的成本也不会高到哪里去，充其量可能只是印币工人的工资高罢了。 当然，也不排除政府是想进口一些东西的。比如高科技的东西，可是人家别的国家不放心，不愿卖给你。那进口一些商品呢，也不太好吧，国内的产业还没有发展起来，国外的产品又好又便宜的话，对国内的企业冲击太大了。所以，到最后，估计就是原料进口最多了，没办法，国内要生产，不够嘛。 可是原料用得再多，也赶不上生产出来的产品卖出去的多啊。所以，一直以来，都是贸易顺差，挺好的，最后算算，又赚到美金了。 我想，一开始赚到美金的出口企业拿到换来的人民币的时候，一定是想着赶紧新建工厂，扩大产能，去赚更多的美金，去换更多的人民币。可是慢慢地，发现生意越来越难做了，毕竟见有利可图，工厂越开越多了，可是欧美的市场容量就是那么大，而且金融危机之后还一下子缩小了不少。再说，人家家里也有干这活的人，只不过人少些罢了。你一味地低价出口给人家，不就是抢人家的饭碗嘛。别看人家人少，可是人家有工会，真的工会，团结，一示威，一游行，甚至打个报告，政府就得注意一下。于是贸易制裁出来了，甚至动粗直接烧了中国商品。 很多出口企业这时一定心里酸溜溜地不是滋味。回头算算账，估计没赚多少。一看账本，估计上缴的税也多了不少，还有很多费用是只能记在自己看的账本上的。 于是，工厂不扩建了，拿了人民币做点别的吧，可是做什么呢？ 房改之后，有了商品房一说，按说商品房只是有钱一族买的，没钱的有政策性保障住房。可是政策是政府定的，所以理所当然地，政策性住房没给没钱的，而是只保障了政府里的人。肥水不留外人田，外人们，有钱没钱，都想办法攒钱，凑钱，去买商品房去吧。 本来经济发展，资产的价格会随之升高。房改又把大家逼得都去买房，没办法啊，没房讨不到老婆，所以房子的价格升高速度就快了些。地方政府一看，真好，一个楼盘卖出去，GDP就增加了这么多啊，都是政绩啊。而且一卖地，自己还有钱花。于是，房子越卖越高，地越拍越贵，GDP数字越来越大，地方政府越来越乐呵呵。 可是问题很快出来了，地太贵了，房子太贵了，开发商和很多人的资金周转不过来了，这时，银行出马了，我来给你们贷款。不怕，有地抵押着，有房子抵押着，还在不断升值，贷给你们，我也放心。 可以想想，很多靠着出口赚了钱的先富起来的人一看房子升值很快，几乎一天一个价，于是脑子一转，马上把出口赚来的人民币投入了房市里。先富起来的人的脑子就是好使，当很多老实巴交的人还想着欠着银行一屁股债都睡不踏实的时候，这帮人肯定马上发现贷着银行的钱来买房子，再一卖，赚取财富的速度更快。 按理说，经济要发展，货币要适当宽松一些。就像青春期高血压一样，小孩子长身体，血液要充足，血压高一点也正常。这样，个子才能长高些。 可是，国外出口换来的美金，没花出去，都换了人民币在家里了，还不继续扩大生产，而是盯上了房子。银行宽松信贷，但是没宽松到企业身上，尤其民营企业身上，主要宽松到国企和房子上了。国企拿了贷款，转转圈，很多也投到房子上了。 你说，这么多钱砸房子，怎么也能把房子价格嗖嗖地砸上去了。 中央政府意识到房子这样下去，不是个办法，得调控一下了。所以08年金融危机之前，房子调控起来了。可是老美就是没好事，自己的房子出问题了，搞了场金融危机。 老美人民没中国人那么有前瞻性，有事没事都攒钱养老防病。金融危机一来，都担心房子要被银行收回去，手里钱有点不敢消费了。老美企业生意一下不好做了，就裁员吧。很多人又失业了，更不敢消费了。 中国的出口一下子下去了，那么多的工厂难过起来了。 中央政府一看，现在调控房地产还不是个时候了，毕竟房子牵涉面太广了，房子倒了，建材，水泥，包括装修，家电什么的，都要下去。出口都不好做了，自己家里再倒下去一截，那经济怎么玩？没办法，还得先把房子扶起来。 这还不够，毕竟房子扶一下，但是出口难做了，还是损失了一块。鼓励老百姓多掏钱出来吧，于是什么汽车下乡，家电下乡都出来了。可是中国的老百姓能有多少钱啊，毕竟消费力有限。 出口，消费，投资，三驾马车两个指望不上了，只好靠投资了。于是中央政府的四万亿投资出来了，这还不够，地产政府也要想办法投资，借债也得投资。于是，很多高铁，高速，机场什么的，上马了。 四万亿啊，带动一下地方政府，就是十几万亿，开动一下印钞机，改一下银行系统的数字，钱又都砸出去了。 钱在你手里时，怎么花你说了算，出来了，可就由不得你自己了。肯定很多钱，出来转悠一圈，又都跑到房子里了， 于是，09年的一幕出现了，政府的项目干得热火朝天，房价翻着跟头往上走。可怜的老百姓不敢消费，一看房子还涨，调控了几年，越调控越涨，于是狠狠心，买了。今年买还有税收优惠，明年都没有。 政府花钱的地方多了，虽说可以印，但是也不能放开胆子，甩开膀子印啊，再说还有地方政府呢，没权印啊。于是还能收税，很好，09年，金融危机的一年，各国的税收都下降，鼓励企业经营，唯独中国增加，增加的速度还超过了GDP的速度。这还只是明的，还有更多暗的呢。 很多民营企业一看，这样干不下去了。算了，工厂关了吧。 民企老板们拿着手里的钱，一家人开个会，商量着以后怎么过。现在分歧出现了，一部分家庭选择了远走他国，移民出去了。卖掉上海的一个高层，可以去美国加拿大买套别墅，住着多舒服。还有一部分家庭，可能毕竟根子在这里，出去了不习惯，于是拿着钱，一商量，还是在国内待着吧。房子价格高了点，炒着风险大了，可以炒其他的啊，那么多呢。只要人们需要的，炒高了你还得照旧买，我就能赚钱，于是，太多的东西开始炒起来了，涨价。 再来看看老美这边，金融危机一来，倒掉了那么多金融机构。老美有什么，除了武力，文的就是科技和金融了。这是老美在和平时期的一条大腿，如今这条大腿危险了，说什么也不能让它废掉。老美开始了救市计划，说白了就是给你们点钱，让你们先周转一下度过难关。慢慢地，似乎10年上半年老美经济好转了一些，可是还没来得及高兴呢，经济又掉下去了，失业率还是那么高。 老美的领导上台要靠选民投票的，选民都失业了，还不往死里给你投反对票啊。所以领导很着急，可是着急也就不了业啊。脑子一转，找个背黑锅的不是一样嘛。于是找到了中国。大家失业，都是中国人竞争的。回头和中国说，你的商品价格太低了，工人工资太低了，你的人民币得升值。中国回头看看，心里一虚，是啊，人家的汇率都是浮动的，市场定的。咱的也是浮动的，但是是咱自己定的，让它浮动到哪里就到哪里，浮动多少就多少，我们的控制力很强。 按理说，人民币也该升值一下了。可是中国领导回头看看，不行啊，国内的那帮子搞企业的，不好好搞，当初只会简单的加工，还好那时人民币低，出口有价格优势。本来指望着他们越做越好，开始有点技术含量。可是十几年过去了，还是老样子，模仿能力倒是提高了不少，山寨的东西满天飞。怎么回事啊，原来前几年换来的人民币都去炒房子了，谁还认真搞研发啊。 山寨的东西之所以有人买，还不就是图个便宜啊。现在人民币要升值，那国际上谁还买啊。国内的出口企业要是倒了一大片，那失业的人可不是投选票，最起码要投砖头的。于是，中央政府能不升值就不升值，能拖就拖，不是不想，是不能啊。 美国催了又催，一看没用，再不来点实际的，自己就要被选下去了。于是自己的美元贬值吧。让你升，你不升，你不升，我就贬。 要不美元就是和人民币不一样啊，人家是国际货币，美元一贬值，好多大宗商品价格都上去了。于是，黄金啊，石油啊，大豆啊，铁矿石啊，有色金属啊什么的，在国际上也都涨起来了。你中国不是号称世界工厂啊，我就抬高你的原料价格，看你怎么生产。 美元一贬值，美元泛滥，资金都是逐利的，在美国国内没什么机会，就到跑中国一类的国家来了。再说人民币还有可能升值，一美元来了换六个人民币，回去时，说不好一升值，六个人民币可以再换回两个美元都说不好。有利可图，快过来。 于是中国的外汇储备又上去了，国外的热钱都进来了。 热钱进来一看，中国国内也好不热闹。国内的企业拿着钱，不好好干企业，只是简单加工一下，剩下的钱，都投到房子，股票，农产品上面了，炒着不亦乐乎。 热钱凭什么叫热钱啊，肯定是见利就图，无利就跑，快速流动，摩擦起热，所以叫热钱。它来肯定不是做实业投资的，只能是投机炒作。 房子现在有点高了，难免塌下来。转来转去，股市倒也还是一个不错的选择，所以这段时间，股市大涨。 国内的资金在股市6000点的时候掉下来过，至今还记得疼，还有很多还被套着。但是股市现在涨，房子不好炒，还是跟着进来了。没进来的资金，炒其他的去了，比如去年的大蒜。 于是现在国内的形势就是炒声一片，CPI一个劲地向上走，通货膨胀一步步来了。 中央政府一看这样下去不行了。老百姓手头就是那几个钱，还没什么其他资产，通货膨胀一下，什么都买不起，如果连饭都吃不上，还不跟你急啊。 可是放出去的人民币，就是泼出去的水啊，出去时容易，回来时难啊。再说，还有老美在家门口使坏。 人民币不能一下子升值，一下子升值，90%的企业都得死，只能试探的缓慢升值，可是一试探，说明你开始升了，以后还要继续升，国外的热钱更多地进来了，照样麻烦。难啊。 不能升值，那就加息啊，回收点国内的流动性。可是也难加啊，加少了吧，不起什么作用。加多了吧，有几家企业没有贷款呢，本来现在日子难过，贷款利息一提高，还怎么过啊，再说还有那么多贷款买房子的，也难啊。而且一加息，国外的热线更要进来。只怕自己的流动性没回收多少，外面的热钱进来更多，那时形势更不妙。 似乎看来看去，这次通货膨胀有点不可避免了。 那么大家想想，这个时候，该怎么办呢？]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/401/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>出差在泰国(四五六天和其他)(上)</title>
		<link>https://www.zhaojianfei.com/archives/400</link>
		<comments>https://www.zhaojianfei.com/archives/400#respond</comments>
		<pubDate>Mon, 13 Sep 2010 17:47:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
		
		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/400</guid>
		<description><![CDATA[以下这篇文章早就写了，竟然忘了发，竟然忘了发 &#160; 偷懒写一块儿吧。 周末我决定去趟Chinatown,昨天那个韩国人推荐的，说有好吃的东西。事实上我去了之后发现除了好吃的东西真的就没别的了。早上听到警笛，发现着火了，后来晚上我和小布去吃饭，看到其实是一家shopping mall 一层着火，原因不明，联想到两周前炸弹爆炸，怕怕。 然后楼下叫出租车出发。 中国城以福建广东人居多，交流有障碍。 我后来在下图左手边的馆子吃的饭，一份咖喱炒蟹，一份蟹肉炒饭，没要鱼翅，因为我一个人实在是吃不完，唉，小布啊，这是正在酒店努力工作呢，要不也能来一起饭醉一下。没有图因为太好吃了。买单660珠。在这家店认识了一家三口，来自上海的游客。他们向我介绍了chatuchak市场，说是一定要去，周末特别火。而且他们还说，这里没什么可转的其实，他们每次来都是吃东西的，吃完就走，因为这里人多且乱。 很多卖黄金的商家 很多吃的，世界上只有中国人热衷吃燕窝——一种燕子的唾液蛋白，其实真不如鸡蛋清。 标语哦，意义不明，我在这里买到了我人生中见过的最大的樱桃，一会儿有图。 关帝庙，关二哥旅居泰国就住在这里 人不少，卖什么的都有，不过都是些做工不太好的东西，有明显的made in 东莞&#38;义乌的嫌疑。 有符，我还是信科学吧 蓝房子不错 老房子了吧 蓝领三人组 到处都有这种牌子，那是国王吗?底下是社区议员?意义不明，还有那种皮卡改装的车，很有特色，也是到处都是。 转到寺庙了，没进去，挺好看的。 奖励某人大牌坊一块，再接再厉。 Lost Temple 走到这里没意思了，本来还想去湄公河市场溜达一下，可是有点累有点热，天色也不早了，一个人早回吧。 回来去Bankork international下面转了一圈，有点像北京CBD，但是周末没有人。我感兴趣的是这个， 他们的神龛，鲜花随风摇摆，鲜花啊，都是鲜花，所以绝对不是摆个财神做做样子那么简单。还有底下的小人，栩栩如生，还有小萌象。 &#160; 你看上面小物件的精细程度就知道他们国人对佛的态度了。 好现在说吃的。 回来吃我见过的最大的樱桃，咬了一口，乖乖，口感也太华丽丽了吧。没吃过这么好吃的水果啊，这还有天理吗？联想到早餐吃得菠萝和木瓜，还有大椰子和叫不上名字的瓜，于是立即把签名换成了“这里的水果好吃到没有天理”。 一个个比小李子个头还大，而且一丁点酸味都没有，鲜红的果肉，我宁愿吃他们到死。 晚上我和小布第一次去挑战路边摊，我俩原则是从东头吃到西头，太好吃了，不仅味道好，重要的是，这两份加起来，不到十块钱，你相信吗?夜里没带相机，手机拍的，凑活看吧。 某种猪蹄饭 某种鸡饭 风卷残云，我和小布说，吃完这个，我们就是本地人了。小布笑。因为本地人都在路边摊吃饭，全部。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/400/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>看了&#060;1Q84&#062;book1 and book2</title>
		<link>https://www.zhaojianfei.com/archives/333</link>
		<comments>https://www.zhaojianfei.com/archives/333#respond</comments>
		<pubDate>Fri, 20 Aug 2010 06:59:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[看点什么]]></category>
		<category><![CDATA[1Q84]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/333</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160; 昨晚把book2也看完了。读的速度并不快，很久没有这么好的阅读体验了，村上六十多岁了吧，不知道以后还能不能写得动这么完整宏大的小说了. &#160;&#160;&#160;&#160;&#160; 诡异的1Q84年，神秘的小小人和深绘里，可怜、认真又执着的青豆和天吾，还有和《1984》的某种联系。1Q84年两个月亮的世界一点一点的明确起来了，book3会不会就此终止呢? &#160;&#160;&#160;&#160;&#160; 有几个问题: 年长的女朋友丧失了，到底是什么意思。 深绘里目前的存在到底是字体还是母体，为什么如果是母体，为什么没有月经，不是只有子体才没有么。 天吾的母亲到底是什么样的存在。 青豆为什么试图自杀，不是还没有和天吾相认么。 牛河所在的组织是什么。 小小人与人类共存这么长时间，最终意图是什么。 &#160; &#160;&#160;&#160; 期待book3,推荐给各位，需要先了解下日本的几个关键词:“学生反乱”运动, 浅间山庄事件，日本赤军派，奥姆真理教，乔治奥威尔的《1984》，‘老大哥在看着你’。 &#160;&#160;&#160;&#160;&#160; 如果能拍成电影或者电视剧就太好了。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/333/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>出差在泰国-第三天人妖秀(多图吃猫)</title>
		<link>https://www.zhaojianfei.com/archives/330</link>
		<comments>https://www.zhaojianfei.com/archives/330#respond</comments>
		<pubDate>Fri, 30 Jul 2010 18:00:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[旅游]]></category>
		<category><![CDATA[泰国]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/330</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160; 今天白天去公司上班，坐地铁。泰国的地铁在北京应该叫城铁，老外都叫他Sky Train。分段计费。昨晚办了一张卡，15次，345铢，23铢/次，单买票5站地以内因该是20铢，算来算去合人名币5块一次，和上海差不多。三节车厢，但是没有北京挤，早高峰也是这样。上下车人们都彬彬有礼，甚至连北京地铁熟悉的一句话“下车吗您”都没有，即使站在最后一排，也非常有礼貌的自己找空子下车，让人感觉非常舒服。美女非常多，95%都化妆，这个昨天已经说过了。 &#160;&#160;&#160;&#160;&#160; 生活节奏没有北京快，从地铁能够看出来。相当于天朝的一个地级市的速度。只不过这是人家的首都。 &#160;&#160;&#160;&#160;&#160; 因为泰国公司这边网络有问题，加上Bryan没带电源，所以中午回来的比较早。我要提供一个demo给泰国团队，而小布有一大堆翻译工作要做所以都没有吃午饭。4点我们楼下见面去nana站泰国的三里屯吃饭，thai food,这次有图有真相。 某种炸鸡,值得一说的是这个餐厅的碗和盘子，都是搪瓷的，有点中国老物件的意思，让我想起了小时候我爸上夜班，老妈给老爸送饭用的就是这种碗，我们家那时候也有一套，很怀念。 这是我们点的，一个咖喱什么什么，一个冬阴功汤，bryan要了某种异次元面条，我要了某种异次元腰果炒饭装在半个菠萝里，太好吃啦！买单781铢。 &#160; 我对点菜依然毫无概念，菜单都是泰语英语对照。小布算是得心应手。如果我是泰国三里屯任何一家店的老板，我会把所有菜单上的菜都做成图文对照一个不落。方便外国人点菜。因为坐在邻座的一个美国哥们就问旁边的另一个美国哥们“嘿!有没有什么推荐的”。看来大家都差不多。 &#160;&#160;&#160;&#160;&#160; 午餐完了都快六点了，得，晚饭也省了。吃饭的时候我对bryan说想去看人妖秀你去不，结果哥们很可怜，说他还有一大堆工作要做，那没办法，我只能撂下这个兄弟一个人来了，接下来是人妖秀，美帝bryan叫他ladyboy show。施展我知道你期待了很久了，还有我知己也是。但是…… &#160;&#160;&#160;&#160;&#160; 当我坐在秀场，看着面前那杯免费送的Whiskey发呆时，我永远也不会想到，在秀开始10分钟以后，我兴奋的把相机调成连拍模式时，我那该死的充电电池竟然会显示电量不足…而我高高兴兴在国内买的金霸王小兔兔电池竟然没带… &#160;&#160;&#160;&#160;&#160; 结果是我不得不省着电量用，生怕他突然熄火。这样我还是坚持完成了这个晚上，虽然有点小遗憾，不能尽兴拍，但是就不求那么完美了吧。 &#160;&#160;&#160;&#160;&#160; 从酒店出来，做地铁向北，到达Ratchathewi站，出通道直通Asia hotel,下楼买票。这就是网上推荐的著名asia hotel人妖秀，非预定情况下1200铢/人+送一杯饮料。我入场的时候还没什么人。 &#160; 坐在座位上的时候，我立即想到了GTA自由城里的秀场,差不多。 后来人渐渐多了，有几个衣着入时的本地美女。时不时把我上下打量一番。我心说哥这腿毛飘飘的身形在泰国可是不不常见吧，熊壮威武吧，可惜哥无福消受你了。题外话，泰国的小男人都很瘦很娘。街上如果看到一个胖人，如我这样的，那90%是外国人了。姑娘们的身材都很赞，非常赞，特别是那腿…不能再说了。回题，人渐渐多了，有各种中国人，日本人，韩国人，和欧美白人，当然如果有黑人黑灯瞎火的如果不笑我也看不见他们 。之所以说各种中国人是因为天朝人喜欢拍照，到处拍，尤其是留影。单人的，双人的，3p的，交叉换偶的，反正很多。因为当我入场的时候，在门口看到三男一女在Carbaret的门前留影，由于他们说的是粤语，我无法判断他们是广东人还是香港人，所以没有搭话就进去了。结果我坐在那里到处看美女的时候这几个人又到座位上留影，还有个哥们要去主舞台麦克下面拍照被服务生赶下来了，我就想这几个人恐怕就是我天朝同胞了，实际上最后当我拜托他们帮我拍照的时候也证明了我的判断。后来来了一家韩国人，男主人带着他老婆和岳母，这哥们在机场地勤工作，在曼谷1个月了，和他聊了一会，我说我喜欢你们的石锅拌饭，冷面，他就给我推荐了几家不错的韩国餐馆，还有推荐我去china town,很好玩。 &#160;&#160;&#160;&#160;&#160; 开始了，我十分中意这个“姑娘”， 来张大的 &#160; &#160;&#160;&#160; 主持人会用至少6种语言说你好晚上好，表演是各种民族风，下面就是中国风了，走旧上海小三挣夫路线，这是原配。 这就是小三了 谐星人妖和鸵鸟(其实我感觉他不是人妖，只是谐星) 韩国风nobody,我都想上去跳了，这么火 这就是刚才那个谐星，这几张拍虚了。 &#160; 美帝梦露风 板儿砖是女人最好的朋友 儿童不宜秀 谐星的表演不错，很好玩的人。 以下是上面提到的广东哥们帮我拍的，技术差我忍了。话说这哥们和人妖合影的时候脸上那个红晕啊。 我其实是冲着后面的姐姐去的，就是上文已开始我中意那位，结果被这个姐姐把我一把揽入怀中，哎，人生啊……找个合适的人怎么这么难，嗯哼？ &#160;&#160; &#160; 小结：其实吧，要不是好不容易来一趟体会一下当地风土人情的话，我觉得我这300多花的真是不值(1200+200拍照小费)，因为首先秀时间并不长（一个半小时），其次没有看到网上说的泰国民族舞，这是我期待的，不够high,各民族都照顾到了但是没有本土的，有敷衍的意思。还有就是整个秀我拍的并不完整，实际上也没什么必要，体会不同文化吧。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/330/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>出差在泰国-第二天</title>
		<link>https://www.zhaojianfei.com/archives/257</link>
		<comments>https://www.zhaojianfei.com/archives/257#comments</comments>
		<pubDate>Thu, 29 Jul 2010 16:23:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
		
		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/257</guid>
		<description><![CDATA[先说今天没有图。下午下班后开始下雨，八点多雨停，和Bryan出去吃晚饭,带着相机，但是以上菜我俩就急了，顾不上拍照，食物部分就明天开始拍吧。 晚上就离酒店一站地的NANA站吃饭,有点像北京的三里屯，很多外国人，吃的印度菜，第一次吃，不便宜，四个各种各样的咖喱or酱撞食物，人均100多人民币，不便宜。但是味道不错，Bryan说味道还算正，反正我也吃不出来。 饭后走回酒店，就一站地，这一站地路边全是小摊，应该是著名的游客也使，很热闹，也很乱，行人80%是外国人。卖的东西就和红桥差不多。比红桥多出来的是AV，伟哥，性玩具，AV日欧都有，还有就是卖身的了，看到本地泰国MMor哥哥反正看也看不出来，都浓妆艳抹的，还有黑人，竟然还有大黑妞！资本主义真是水深火热啊！人多环境又杂，不敢拍照。不然一定给施展来几个backup，希望他运气好，不是伪的。 今天和小布聊了很多，发现和以前的tom聊天一样，一般的美国人都对我天朝有不错的认识，甚至比一般中国人还要深。但是牵扯到历史就不明白了。和他们聊天还是很愉快的。 哦，今天中午lucy带我们再公司附近的小馆子吃泰国菜，非常的好吃，还有那个冬阴功汤，太棒了，回北京要找个好点的泰国馆子。lucy是个典型澳洲大妞，非常漂亮有礼，个头有一米八多，施展你死心吧。 又，泰国的美女遍地都是，美女出现概率极高。这是我和小布共同总结的。地铁上，小布偷看美女，猥琐的和我用中文说，你看我们对面那个姑娘，我用余光偷看，发现果然倾国倾城，不禁羞涩的脸红起来，结果这个美帝猥琐的说，“哈哈，看你的表情，明显就是那种享受不到的失望”。我作为又红又专的天朝人，立马教育他年轻人要内敛不然无法做我们天朝的女婿，当然美帝听不懂什么叫内敛。所以希望不要有泰国青壮年懂汉语而打我，我就是这么想的。 今天说了很多话，发现英语实在太烂了。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/257/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>出差在泰国-早上好曼谷</title>
		<link>https://www.zhaojianfei.com/archives/256</link>
		<comments>https://www.zhaojianfei.com/archives/256#comments</comments>
		<pubDate>Thu, 29 Jul 2010 01:45:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
		
		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/256</guid>
		<description><![CDATA[起早了，本来和Bryan商量九点以前赶过去。于是7点钟起床收拾，结果曼谷这边来消息说11点见面…… 那就早上好吧，早晨这里一直在下雨,是不是雨季到了。空气一直很潮湿，很舒服。 接着上图 &#160; &#160; 根据google地图,下面那个建筑应该叫Baiyoke Sky Tower,楼下有个小公园，还有曼谷的三节车厢城铁，很多摩托车，真羡慕，年轻人竟然可以骑摩托车。 &#160;]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/256/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>出差在泰国-第一天</title>
		<link>https://www.zhaojianfei.com/archives/240</link>
		<comments>https://www.zhaojianfei.com/archives/240#respond</comments>
		<pubDate>Wed, 28 Jul 2010 17:29:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
		
		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/240</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160; 飞机晚点将近一小时，又坐了一小时出租车。到达了曼谷的Centre Point Hotel. google地图参见此链接 http://ditu.google.com/maps/ms?f=q&#38;source=s_q&#38;hl=zh-CN&#38;brcurrent=3,0&#215;0:0x0,1%3B5,0,1&#38;ie=UTF8&#38;split=1&#38;rq=1&#38;ev=zi&#38;num=10&#38;cd=1&#38;radius=0.19&#38;hq=center+point+hotel+thailand&#38;hnear=&#38;msa=0&#38;msid=107299690579312721831.00048c758d6f6e0d131ad&#38;ll=13.742334,100.542305&#38;spn=0.005159,0.009645&#38;z=17&#38;iwloc=00048c758d773db92cdb4 在较大的地图中查看我的保存位置 点击这里下载google地球我的位置 猛击这里&#160;&#160;&#160;&#160;&#160; 酒店很不错,泰国方面真是很重视啊。要给人家好好干。 下面上图 算是酒店式公寓吧，有冰箱微波炉，锅什么的，做饭了呵呵 下面右边那张图，从浴缸打开百叶窗能看到卧室，看伪娘洗澡么&#160; 竟然有一个阳台，很喜欢，能看到曼谷小夜景 &#160; 不早了，明天要早起去公司。先到这里吧。 twitter和youtube及众被墙网站轻松打开毫无悬念。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/240/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>来看看成功人士年轻时的共同点,还有唐骏兄</title>
		<link>https://www.zhaojianfei.com/archives/211</link>
		<comments>https://www.zhaojianfei.com/archives/211#comments</comments>
		<pubDate>Sun, 11 Jul 2010 16:15:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/211</guid>
		<description><![CDATA[这是年轻时候的gates 这是年轻时候的Eric Schmidt 这是年轻时候的jobs &#160; 只有jobs像个设计师而不是nerd，实际上现在jobs还是设计师，这三人基本没变。 &#160; 接下来是年轻时候的唐骏兄 唐骏兄年轻时候的照片真不好找，唐骏兄那时候就是职业经理人像，基本上没有nerd的影子，这也是我对他的第一印象。所以他算不上技术大牛，靠嘴皮子吃饭的，呵呵。 &#160; 原来如此。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/211/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>测测更健康，6-25今日预测</title>
		<link>https://www.zhaojianfei.com/archives/202</link>
		<comments>https://www.zhaojianfei.com/archives/202#comments</comments>
		<pubDate>Fri, 25 Jun 2010 14:42:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/202</guid>
		<description><![CDATA[巴西-葡萄牙 2：1 朝鲜-科特迪瓦 2：1 巴西葡萄牙出线 &#160; 西班牙-智利 3：1 瑞士-洪都拉斯 2：0 西班牙瑞士出线]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/202/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>6-24今日预测</title>
		<link>https://www.zhaojianfei.com/archives/199</link>
		<comments>https://www.zhaojianfei.com/archives/199#respond</comments>
		<pubDate>Thu, 24 Jun 2010 14:09:54 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/?p=199</guid>
		<description><![CDATA[意大利－斯洛fuck  1:0 拉乌龟－新西兰  2：0 意大利拉乌龟出线 荷兰－喀麦隆2：1 日本－丹麦 2：1 荷兰日本出线]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/199/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://worldcup6224" length="0" type="" />
		</item>
		<item>
		<title>Come On England！6-23今日预测</title>
		<link>https://www.zhaojianfei.com/archives/198</link>
		<comments>https://www.zhaojianfei.com/archives/198#respond</comments>
		<pubDate>Wed, 23 Jun 2010 14:01:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/198</guid>
		<description><![CDATA[相信英格兰，相信卡佩罗 英格兰-斯洛文尼亚 3：1 美帝-阿尔及利亚 2：1 英美兄弟俩双双出线 下一场 加纳-德国 1-3 澳大利亚-塞尔维亚 1：2]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/198/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>来吧，6-22今日预测</title>
		<link>https://www.zhaojianfei.com/archives/196</link>
		<comments>https://www.zhaojianfei.com/archives/196#respond</comments>
		<pubDate>Tue, 22 Jun 2010 10:07:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/196</guid>
		<description><![CDATA[来吧，今日预测,四场啊，各自都有微妙的关系，不太好猜。 墨西哥-拉乌龟 0：1 法国-南非 2：0 &#160; 法国光荣回家 &#160; 尼日利亚VS韩国 0:2 希腊VS阿根廷 0:2 韩国出线思密达]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/196/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6-21今日预测</title>
		<link>https://www.zhaojianfei.com/archives/195</link>
		<comments>https://www.zhaojianfei.com/archives/195#respond</comments>
		<pubDate>Mon, 21 Jun 2010 12:31:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/195</guid>
		<description><![CDATA[葡萄牙-朝鲜 2：0 智力-瑞士 2：1 西班牙-洪都拉斯 3：1]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/195/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6-19今日预测</title>
		<link>https://www.zhaojianfei.com/archives/193</link>
		<comments>https://www.zhaojianfei.com/archives/193#respond</comments>
		<pubDate>Sat, 19 Jun 2010 10:01:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/193</guid>
		<description><![CDATA[荷兰-日本 2：1 加纳-澳大利亚2：1 下一场不预测了,无所谓]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/193/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>又到预测的时间了，6-18今日预测</title>
		<link>https://www.zhaojianfei.com/archives/191</link>
		<comments>https://www.zhaojianfei.com/archives/191#respond</comments>
		<pubDate>Fri, 18 Jun 2010 11:27:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/191</guid>
		<description><![CDATA[今日预测 德国-塞尔维亚 3：1 美帝-斯洛文尼亚 2：0 英格兰-阿尔及利亚 3：0 天照大神，阿拉，juese，如来佛祖，齐天大圣，祝我成功！ ================================ 好，得过那场刚刚踢完了。说两句，裁判肯定有问题，9张黄牌，离谱了一点。不排除庄家做掉比赛的可能。波多尔斯基兄，你是罪人，你浪费了那么多好机会，竟然还丢了一个点球?你在干嘛啊?克洛泽，你基本是无辜的。有人要搞德国，就这样。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/191/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6-17今日预测</title>
		<link>https://www.zhaojianfei.com/archives/190</link>
		<comments>https://www.zhaojianfei.com/archives/190#comments</comments>
		<pubDate>Thu, 17 Jun 2010 11:19:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/190</guid>
		<description><![CDATA[阿根廷-韩国 3：1 法国-墨西哥 2：1 希腊-尼日利亚 1：1 &#160; 好，昨天西班牙输的真窝囊。临门一脚都不知道干嘛去了，想老婆了吗?]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/190/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>6-16今日预测</title>
		<link>https://www.zhaojianfei.com/archives/189</link>
		<comments>https://www.zhaojianfei.com/archives/189#respond</comments>
		<pubDate>Wed, 16 Jun 2010 13:57:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/189</guid>
		<description><![CDATA[今天 第一场不测了，没兴趣 西班牙-瑞士 2：0 南非乌拉圭 2：1]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/189/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6-15今日预测</title>
		<link>https://www.zhaojianfei.com/archives/188</link>
		<comments>https://www.zhaojianfei.com/archives/188#comments</comments>
		<pubDate>Tue, 15 Jun 2010 12:49:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/188</guid>
		<description><![CDATA[新西兰-斯洛伐克 正踢着呢，法克赢，比分就不预测了 科特迪瓦-葡萄牙 0：2 巴西-朝鲜 3：0 &#160; 昨天体力不支，意大利那场没看。到目前为止，我还没预测准过，嘿嘿]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/188/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>6-14今日预测</title>
		<link>https://www.zhaojianfei.com/archives/187</link>
		<comments>https://www.zhaojianfei.com/archives/187#respond</comments>
		<pubDate>Mon, 14 Jun 2010 11:24:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/187</guid>
		<description><![CDATA[荷兰丹麦：3：1 日本喀麦隆：2：0 意大利巴拉圭2：1]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/187/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6-13 今日预测</title>
		<link>https://www.zhaojianfei.com/archives/186</link>
		<comments>https://www.zhaojianfei.com/archives/186#respond</comments>
		<pubDate>Sun, 13 Jun 2010 13:14:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/186</guid>
		<description><![CDATA[昨天比赛真不错，阿根廷小胜，梅西真快，希望是保存实力。英格兰希望是卡佩罗保存实力，希望黄油手不再出现，也比较同情GREEN啦。韩国队牛逼，代表亚洲足球的最高水准。好样的。希腊这个二流球队，我国猪出马估计也能打个平局。又老又跑不动，作为世界上平均年做爱次数最多的国家滴男淫，你们向亚洲黄皮猴子们演示了什么叫做软脚虾虾 &#160; 今日预测 阿尔及莉娅-斯洛文妮娅(正踢着呢，两个小国是给england和美帝送分的，所以懒得预测了) &#160; 塞尔维亚-加纳(未知异次元空间，不了解不预测) &#160; 德国-澳大利亚（2：0）期待下个建翔出现。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/186/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6-12今日预测</title>
		<link>https://www.zhaojianfei.com/archives/185</link>
		<comments>https://www.zhaojianfei.com/archives/185#respond</comments>
		<pubDate>Sat, 12 Jun 2010 11:22:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/185</guid>
		<description><![CDATA[昨天揭幕战很棒，很精彩，墨西哥比较衰呵呵，我预测全错。今天继续。 &#160; 希腊-韩国：2：1 阿根廷-尼日利亚：2：0 英格兰-美帝：2：1 yes！]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/185/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6-11今日预测</title>
		<link>https://www.zhaojianfei.com/archives/184</link>
		<comments>https://www.zhaojianfei.com/archives/184#respond</comments>
		<pubDate>Fri, 11 Jun 2010 13:39:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/184</guid>
		<description><![CDATA[测着玩啊，哈哈，我是伪球迷，没有代表性。以后尽量每场预测之 &#160; 南非:墨西哥 1：2 乌拉圭:法国 1：1]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/184/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于世界杯的记忆碎片</title>
		<link>https://www.zhaojianfei.com/archives/182</link>
		<comments>https://www.zhaojianfei.com/archives/182#respond</comments>
		<pubDate>Fri, 11 Jun 2010 10:19:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/182</guid>
		<description><![CDATA[94年，10岁，只记得在家，以前矿上的老房子里，有个哥们在唱歌，旁边还有很多穿得很少的大姐姐。后来差不多到初中的时候才知道那就是《意大利之夏》,to be number one……. 98年，初二，看过几场。记忆最深的是决赛。法国3：0巴西，当时叛逆的我就是不喜欢巴西，希望法国搞死他，结果真的被一个半秃叔叔搞死了，凌晨3点吧，我困得不行，但是法国夺冠后我还去阳台欢呼来着，屋外对面的楼也只有一两户灯光，估计他们听见了呵呵。我还记得那个场地里的工作人员，从齐祖手中拿过大力神杯，深深地吻下去，然后就高兴的跑了。对了，决赛暖场的伊夫圣罗兰YSL时装秀不错，是人生中除了毛片以外第二次看见露点的画面，第一次是在我们那儿那个即将拆除的电影院里，泰坦尼克，和全家人一起看的 。还有我知道了Bolero，很不错，现在还常听。 02年，高二，看过一大半比赛，由于是晚上比赛，按说没有时差，可是当时我们那里的学校是要上晚自习的。简称“被自习”，所以没看全。但是窝火的两场都看了，比如西班牙，比如意大利。从那时开始怀疑公平的意义。诅咒那两个裁判和当时韩国足协主席不得好死。 06年，正赶上大学毕业，一场没落，从头看到尾。那时候刚刚离校，租住在学校不远的一个小区地下室，人生中第一次也是最后一次住地下室。那时候川川和香鸽住在隔壁，看完比赛一般是5点多，正好出去吃个早点。回来睡觉，那时候没有目标，不知道能干什么，心爱的姑娘也远走了，觉得自己很没用，就这样。 10年，买了个沙发，我，准备好了，我，准备好了……]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/182/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>哥们今天又来纪念革命先烈了</title>
		<link>https://www.zhaojianfei.com/archives/177</link>
		<comments>https://www.zhaojianfei.com/archives/177#comments</comments>
		<pubDate>Thu, 03 Jun 2010 15:14:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/177</guid>
		<description><![CDATA[哥今天照旧来纪念革命先烈,去年我写了《廿》，那时候翻墙技术不是很高明，看了点以前没见过的东西，情绪有点小激动。所以写的有点太鸡巴煽情和悲壮，不过在这个不曾存在过的日子，对于刚刚了解一点情况的年轻人来说，情绪激动成我那个样算情有可原吧。请大家原谅我的装b。不过老鼠打洞的目标不变，美利坚人类的希望！ 去年删我贴的小内内网，爷今天又来了哈哈哈哈哈。 &#160; ps:还有哥去年设计的限量版Tee，就两件，招摇撞骗穿了快两个夏天，现在终于沦为睡衣了，哦耶！《自己设计了一件T》]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/177/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8230;你懂得。。。</title>
		<link>https://www.zhaojianfei.com/archives/174</link>
		<comments>https://www.zhaojianfei.com/archives/174#comments</comments>
		<pubDate>Thu, 03 Jun 2010 02:35:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/174</guid>
		<description><![CDATA[■■■□■□■ ■□□□■□■ ■■■□■■■ ■□■□□□■ ■■■□□□■。。。你懂的。。。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/174/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>今天26岁了</title>
		<link>https://www.zhaojianfei.com/archives/172</link>
		<comments>https://www.zhaojianfei.com/archives/172#comments</comments>
		<pubDate>Sun, 30 May 2010 15:15:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/172</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160; 今天是极为低调的一天，继昨天加班之后，今天按说休息，但实在不知道该干什么，早上起得也比较早，呆呆的坐到中午。本来想去丰台找小弟玩。可是因为和她太久没联系，昨晚打电话丫竟然已经回青岛答辩去了,打电话的时候正好在庆祝答辩通过。正在那边歌舞升平喝酒庆祝master呢。算了，没和任何人说，一个人过吧。 &#160;&#160;&#160;&#160;&#160; 大清早被我知己的短信叫醒，一大篇短信，祝我生日快乐，我是又感动又幸福又失落。知己啊，你不我有个坚持了七年的习惯，就是谁在我生日的时候第一个给我发短信帮我庆生我就娶她(注:只限女性非亲属)。这个亚克素酷自打我用手机开始就有了。可惜,这七年当中，只有那么一次是对的时间对的人；其余的都要么是我妈，要么是别的女同学我不能去碰的。现在看还真不是一般的失败啊。哦，话说今年我妈还没给我发短信呢…… &#160;&#160;&#160;&#160;&#160; 中午觉得今天不能再这么愣下去，决定出去骑车转转。结果转来转去就去了公司，开始写代码…… 。没办法，得赶紧把时间打发过去。就这个最快了(快乐?)，结果发现李总也在，呵呵，李总是钻石王老五，就别和我掺和了吧。晚饭和李总吃烤串，偷偷点了个炒面，算是过了生日。夜里9：30从公司回家，有风，天上开始飘小雨点。ipod里放着SmoothJazz,自行车骑得飞快，觉得生活不能再好了。回来想给那个谁打个电话，看看都10点了，作息时间不一样，算了不打扰了。 &#160;&#160;&#160;&#160;&#160; 我又一次把小龙人招进公司工作了。上一家公司，小龙人的离职很不愉快。我也觉得有点对不住他。小龙人人非常好，还好学，只是悟性稍微差那么一点，可以通过勤奋来补的。最重要的是他已经是一个有女朋友的geek,这就让人很放心了，别一步步发展到我这样。我可以把我这点工作经验传授给他，如果他接受的话。帮助别人的过程就是自己巩固知识的过程，嗯。 &#160;&#160;&#160;&#160;&#160; 再有45分钟，今天就过去。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/172/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>第二次豆瓣验证doubanclaimfe689dee5f42e830</title>
		<link>https://www.zhaojianfei.com/archives/171</link>
		<comments>https://www.zhaojianfei.com/archives/171#respond</comments>
		<pubDate>Mon, 24 May 2010 15:20:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/171</guid>
		<description><![CDATA[doubanclaimfe689dee5f42e830]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/171/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>好消息，google支持https搜索了</title>
		<link>https://www.zhaojianfei.com/archives/170</link>
		<comments>https://www.zhaojianfei.com/archives/170#respond</comments>
		<pubDate>Sat, 22 May 2010 03:44:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
		
		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/170</guid>
		<description><![CDATA[rt像什么胡萝卜啊，温习啊都可以搜索了。坏消息是不知道能撑多久。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/170/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>update:update:奇了,打开firefox,出现吃豆的声音</title>
		<link>https://www.zhaojianfei.com/archives/152</link>
		<comments>https://www.zhaojianfei.com/archives/152#comments</comments>
		<pubDate>Fri, 21 May 2010 17:24:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/152</guid>
		<description><![CDATA[今晚我打开照常打开firefox,突然出现fc上吃豆人的声音，很好玩是吧，可是时间长了就烦人了。所以我开始站原因，以为是某个网页上有flash带声音的广告，于是把所有网页都关了，ff开着。声音还是有。然后我开始怀疑是不是插件的原因，于是把所有的插件禁用了。重启ff,声音停止。确定是插件的问题了。现在要定位是哪个插件。于是开始一个一个的启用，当启用到COOLPREVIEWS的时候，吃豆的声音又开始了。所以确定是他了，如果你和我一样的问题，就请暂时禁用coolpreviews。我已经给插件小组写邮件了，内容如下: Hi, Tonight,when I open my firefox,iI heard that there is wired noisy from my sound,it is the game eatman&#8217;s sound.very strange.so I doubt about whether there are some problem whit firefox&#8217;s extensions,so I disabled every extension I installed.Then the noise stop.So I enable the extension one by one.I find out that the reason is CoolPreview.when I disabled it,the noise stop,and when I enabled,the niose begin.Is that a problem? 我怀疑是他们的服务器被攻击并且嵌入了这个声音导致的，很有趣吧，但是烦人。 update:check out today’s google.com.hk’s doodle,It’s a pacman game. May be coolpreviews must load google’s homepage.so what I do?wait google change his doodle,then enable coolpreviews.thanks for @DJ  100891029@qq.com google is funny always. new update: coolpreview repleyed an email   said that they have fixed this bug few hours ago,so install new version coolpriviews it should be worked.]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/152/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>(update)(update)Wired!The PACMAN sounds(music) when firefox started.</title>
		<link>https://www.zhaojianfei.com/archives/153</link>
		<comments>https://www.zhaojianfei.com/archives/153#respond</comments>
		<pubDate>Fri, 21 May 2010 17:21:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/153</guid>
		<description><![CDATA[这是上一篇日志的英文版，因为我google了一下，发现没人和我有一样的问题，why？ Tonight,when I open my firefox,iI heard that there is wired noisy from my sound speaker,it is the game PACMAN&#8217;s sound.very strange.so I doubt about whether there are some problem whit firefox&#8217;s extensions,so I disabled every extension I installed.Then the noise stop.So I enable the extension one by one.I find out that the reason is the extension called CoolPreviews.when I disabled it,the noise stop,and when I enabled,the niose begin.Is that a problem? I wrote a email to the develope team.I think there must be something wrong with there servers. update:check out today’s google.com.hk’s doodle,It’s a pacman game. May be coolpreviews must load google’s homepage.so what I do?wait google change his doodle,then enable coolpreviews.thanks for @DJ  100891029@qq.com google is funny always. ======================== update: coolpreview team repleyed an email   said that they have fixed this bug few hours ago,so install new version coolpriviews it should be worked.]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/153/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>真&#183;精神分裂者</title>
		<link>https://www.zhaojianfei.com/archives/151</link>
		<comments>https://www.zhaojianfei.com/archives/151#respond</comments>
		<pubDate>Mon, 17 May 2010 17:02:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/151</guid>
		<description><![CDATA[]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/151/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>yes!yes!yes!</title>
		<link>https://www.zhaojianfei.com/archives/146</link>
		<comments>https://www.zhaojianfei.com/archives/146#respond</comments>
		<pubDate>Sun, 16 May 2010 16:37:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/146</guid>
		<description><![CDATA[比我预想的晚了一点，从我付款到现在差不多24hours，今晚十点收到的开通邮件，可是那会儿我在玩游戏，呵呵。看来配置要等今天下午了。离自由又近了一步。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/146/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vps零起步&#8212;&#8212;以vpn为目标的vps到底该怎么选</title>
		<link>https://www.zhaojianfei.com/archives/143</link>
		<comments>https://www.zhaojianfei.com/archives/143#comments</comments>
		<pubDate>Sun, 16 May 2010 04:15:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/143</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160; 最近想买vps搭建vpn给自己和同学们凸墙用，但是目前我的情况是：会玩一点linux,有一定的linux服务器基础。但是对vps一无所知。性能、机房位置等等因素完全不了解。只能通过google来知道一点皮毛。所以如果我说的不对，请指出或者赐教。 &#160;&#160;&#160;&#160;&#160; 如果以vpn为目的购买vps的话，需要支持XEN的vps主机，貌似只有这个可以支持vpn的搭建。 第一个问题，什么是XEN： Xen 是一个开放源代码虚拟机监视器，由剑桥大学开发。它打算在单个计算机上运行多达100个满特征的操作系统。操作系统必须进行显式地修改（“移植”）以在 Xen上运行（但是提供对用户应用的兼容性）。这使得Xen无需特殊硬件支持，就能达到高性能的虚拟化。 Xen VMM（virtual machine monitor）是由剑桥大学计算机实验室开发的一个开源项目，它能够让我们创建更多的虚拟机，每一个虚拟机都是运行在同一个操作系统上的实例。 这些客户OS可以是修补过的Linux内核2.4或2.6，也可以是修补过的NetBSD/FreeBSD内核。用户应用程序就运行在这些客户OS上，并不需要修改任何代码。 &#160;&#160;&#160;&#160;&#160; 原来是一种操作系统虚拟化的技术，我理解有点像非常高级的virtrualBox,可以在服务器上虚拟多个操作系统。 好的，问题来了：为什么只有xen主机支持vpn,或者说除了xen之外不行吗? 答案是否定的。虚拟服务器技术还有很多类似xen的OS虚拟化解决方案，比如Virtuozzo，i.e, OpenVZ, VM，linux独立服务器也可以，如果你有linux服务器托管的话，当然可以了，你的服务器，就就是神。还有，关于这个问题可以参考这个帖子http://www.webhostingtalk.com/showthread.php?t=922960，是我们的同胞在老外论坛的提问，非常有用，现在引用原话：“ Xen, with it&#8217;s ability to load kernel modules, should have a higher chance with that. ”还可以搭建vpn的是OpenVZ，这个就完全不明白了。由于我这次是以凸强为最终目的的，所以国内的服务器托管也好，vps也好，完全不考虑了，国外服务器托管?没钱。 &#160;&#160;&#160;&#160;&#160; 搭建vpn需要什么，需要PPTP， 第二个问题，什么是pptp? PPTP：点对点隧道协议（Point to Point Tunneling Protocol） 点对点隧道协议（PPTP）是一种支持多协议虚拟专用网络的网络技术。通过该协议，远程用户能够通过 Microsoft Windows NT 工作站、Windows 95 和 Windows 98 操作系统以及其它装有点对点协议的系统安全访问公司网络，并能拨号连入本地 ISP，通过 Internet 安全链接到公司网络。 &#160;&#160;&#160;&#160;&#160; 原理就不去深究了，没时间，就是需要支持VPN的协议。那么我要做的就是在xen的vps或者独立linux服务器上安装pptp协议，使其支持vpn的通信。了解了这些，差不多就能去买vps了，然后参考我转载的这个帖子《（转帖)美国VPS选择之路：Alphared vs. Slicehost vs. Linode vs. RapidXen》。 &#160;&#160;&#160;&#160;&#160; 我在RapidXen下了订单。应该快开通了。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/143/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>(转帖)美国VPS选择之路：Alphared vs. Slicehost vs. Linode vs. RapidXen</title>
		<link>https://www.zhaojianfei.com/archives/142</link>
		<comments>https://www.zhaojianfei.com/archives/142#respond</comments>
		<pubDate>Sat, 15 May 2010 09:17:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/142</guid>
		<description><![CDATA[本文是csdn上的一篇博客，经历了几款vps主机的选购过程，希望对大家在vps主机的选购中有所帮助。 出处：http://blog.csdn.net/zubin006/archive/2009/09/16/4560829.aspx VPS相对虚拟主机有很多的好处，最明显的就是：你有一部几可乱真的主机可以玩，在这部主机上你就是神，你几乎可以在VPS上做你在一部真实主机上能做的任何事情。因此选择VPS时其实不大用去看他们给你提供什么程序安装，你自己可以做这些事情，仅仅需要关心VPS的性能就可以了。 VPS相对虚拟主机自然也有坏处，而且也很明显：贵。虚拟主机往往动辄号称3位数以上GB的空间和流量，而且看似还功能繁多且便宜（通常低于 10美元/月或更低）；VPS则不然10G空间往往就要你20美元/月了，还配上少得可怜的128M或256M内存，以及更严格的流量控制……。为什么这样？难道卖主机的人是傻瓜，还是买主机的人是傻瓜？据了解，答案是这样的，能容纳数千个虚拟主机的硬件通常只能容纳上百或数十个VPS，具体的比例根据各个主机商使用的VPS软件有较大的区别。显然，其结果就是虚拟主机和VPS有巨大的性能差异，甚至同为VPS也差距甚远，因此，这一点后来也成为我关注的焦点之一。 一、 Alphared 篇 我的目标是寻找性能优良，价格便宜的VPS 。 搜遍整个网络，我第一个锁定的是Alphared。看起来，价格便宜量还算足，$19.95/月，10GB硬盘/256MB内存/500GB流量，基于Virtuozzo 平台，写的不包括Plesk 控制面板，但我用的时候是有的。看了些评论，大家普遍认为Virtuozzo+Plesk很好用，于是就租了主机。 Alphared付钱比较麻烦，不但需要先在他的会员系统里登记信用卡，还要发一个签名文件和信用卡扫描件的传真或电子邮件给他们，我是发的电子邮件。当时我想他们可能还蛮注意安全的…… 付款后很快主机设置好，反应相当迅速。SSH到主机一看，觉得配置很强啊，看到有1G的RAM+2G Swap+4CPU，心想还真是值啊，后来才搞清楚其实Virtuozzo就是这样子的，这些资源其实是共享的，这些只是你的突发可达的理论峰值而已…… 唉。 接下来用Plesk控制面板从浏览器配置系统，的确是非常的方便，基本上就用浏览器就能做所有需要作的配置工作了，也可以在浏览器里重新启动 VPS。Alphared的特点是（也许是Plesk的特点）可以很方便的支持多人多域共享，也就是说可以合租了，然后分帐号就好了。可以限制用户的域名，空间使用（disk要开quota，默认没开），为他们配置邮箱等等，当然，超级用户还是是最厉害的。其实依我看租下这个空间然后再转卖空间也是可行的，呵呵。 于是正式的把网站转了过了，开用……，不幸的是很快发现如下的问题： 1、 什么大内存、4CPU完全没有用，其实是很慢。一查，原来Virtuozzo的好处就是可以把硬件性能榨干，对主机商来讲就是很容易超卖，对我们租户可是大大的不利，只能祈祷主机商都讲良心的，不过显然，这个很难。 2、 Virtuozzo VPS中存在一些硬限制是购买前不知道的。例如，进程数被限制为120，超出就无法再spawn新进程了；磁盘节点数被限制为25000，而事实上我的网站使用了4GB空间就用了20000多的node数，我相信我无法充分使用这10G空间，我也不知道node数满了后会发生什么事；CPU也有硬限制，其结果是我的Drupal架构网站常常超限。对这些限制我很疑惑，这还叫VPS吗，我怎么越来越感觉象虚拟主机一个味儿呢？ 3、 VPS经常被无故重启动，而且估计是暴力重启动，其直接后果是我的Mysql数据库在一个月内需要用Myisamchk恢复4、5次之多。 平心而论，Alphared对问题的处理和回复还是比较快的，我用过几次表单提交，通常一小时左右能解决问题或有回复。其实上面1、2两点我因为对VPS初次使用，性能到底该如何也不很清楚，所以还能忍一忍，但第3点我确实无法接受。 对了，Alphared还有例行的安全扫描并将扫描结果发到你的邮箱里，不过似乎对我是没有什么确实的帮助:) 这个时候又发生了另一件事，我在电子邮件帐单里发现信用卡被盗刷了几百美元，于是及时通知了招行，最后倒是没有产生实质性的损失，但我不得不当即让老卡作废并换发了一张新卡。想来想去，最近的一段时间除了支付宝之外，只在Alphared上用了信用卡并留有信用卡资料，另外也许通过Gmail 发送的卡的信息也有可能泄密，总之是很不愉快的一件事。于是我开始寻找其他的主机。 二、 Slicehost 篇 经历了Alphared之后，我将自己的目标修正为：使用Xen 的性能优良，价格便宜的VPS 。为什么是Xen呢？因为研究一番之后发现，虽然Xen不能象Virtuozzo一样通过共享资源来榨干硬件的性能，但这正是我们租户的福音，至少我们的资源比较有保证，而且Xen的性能还是不错的。 目标是这样，不过我搜索的关键词是VPS not oversold，呵呵……这就为我带来了Slicehost。价格基本上在一个水平，$20/月可以获得10GB空间/256MB内存/100GB流量。真正打动我的是他们首页上的这段话：“We’re just like you. Sick of oversold, underperforming, ancient hosting companies. We took matters into our own hands. We built a hosting company for people who know their stuff. Give us a box, give us bandwidth, give us performance and we get to work. Fast machines, RAID-10 drives, Tier-1 bandwidth and root access. Managed with a customized Xen VPS backend to ensure that your resources are protected and guaranteed.”我乐于尝试一下，如果他们能够做的象他们说的那么一样。 买了Slicehost 256，我忘记怎么用信用卡付的钱了，所以应该是很方便，呵呵。进入后台，感觉这是一个真正的VPS，没有Plesk那些花里胡哨的配置功能，功能方面你得自己SSH去主机上配。但后台里依然有很强大的地方：他有个Java Applelet可以让你看到并操作VPS的console，也就是说你可以看到VPS的完整启动画面并在Console上操作，这真是太酷了。事实上这个功能也在我配置iptables失误而无法SSH连接时救过我的命，呵呵。 后台可以看到主机的状态和流量，还可以设置自动备份。只是备份需要每月5美元，这是我用过的4个主机商里提供备份服务的2个中的一个（另一个是 Alphared,但老实说没搞懂怎么备份）。我用了这个备份服务，感觉相当的不错，提供每日VPS完整拷贝备份和每周的完整拷贝备份，很方便。 后台也可以重启动VPS，而且可以分为软启动和硬启动——这个和Alphared一样。 后台还可以调整VPS的大小，只要交钱，他们会帮你resize个大的拷贝，如果你测试没有问题，你就可以用新的了，然后再帮你删掉旧的。 Slicehost还提供Rescue Mode，就是把你的VPS挂载到/dev/sda1(root)和/dev/sda2(swap)，然后你就可以在90分钟内救自己的命了(据说90分钟后这个Rescue Image就自毁，呵呵)。另外在后台还可以改VPS的root密码，我不知道他们怎么做到的，不过感觉也是特色吧。 其实Slicehost真的还不错，性能比alphared好，我觉得也还算稳定发挥。但实践中也发现他有个非常要命的问题，通过just- ping.com从世界各地20个地点ping我的VPS IP发现，到中国那是最慢的一个，而且还带超过10%的掉包。我彻底的无语了，难怪我在SSH里有时候打一个字要三秒钟才有回显呢！不过在浏览器里还不是很能感觉出来。 总的来说我还是比较喜欢Slicehost的，所以我在这里充了超过100美元，不过SSH真得玩得太累了……所以我又寻找其他的。 三、 Linode 篇 在Slicehost之后，我的目标修正为：到中国比较快的、使用Xen的性能优良，价格便宜的VPS 。事实上在这次筛选中Linode.com和RapidXen.org同时进入了名单，不过Linode的口碑不错，然后网站又做的好，加之他有加州 Fremont的机房，估计到中国会比较快，所以就优先选择了。这次是$19.95/月10GB空间/260MB内存/200GB流量。 不过买的时候才发现，加州已经没有了（也许是中国用户太多？），只能是TX的Dallas和GA的Atlanta，测试了下感觉Dallas好像也还行，就选了Dallas。 老牌的服务商就是不一样，后台页面非常强大，且专注于VPS的本身。VPS的设置可以非常灵活，10G的空间可以在网页里执行分区和划分大小，估计 load多个虚拟机也没问题。操作过程非常流畅，界面反馈也很清楚，也很容易看到图表化的VPS状态，堪称完美。不过，操作系统大概只有三种可选，算是比较少的了。 虽然Linode号称是用的Xen，不知道为什么我分配到的并不是，而是较老套的UML(User Mode Linux) ，导致的结果是：相对Slicehost我看不到任何优势，似乎还要慢上一点儿…… 7天功夫我申请了退款，退款真得很简单方便。推荐大家去尝试一下，不过超过7天就不行了。我的退款理由是到中国还是比较LAG，他们也承认这一点——实际上已经比Slicehost好得多了。 四、 RapidXen 篇 说实话，我不喜欢RapidXen的形式，其实它是SystemInPlace 搞的，我不明白为什么他们要分开搞两个网站，而且在RapidXen申请的VPS的管理后台却在SystemInPlace。他的VPS PLAN也很搞，竟然从$5开始（1VCPU/64MB RAM/5GB DISK），所以我的第一感觉是这是不是骗子哦？ Linode失败后，想想符合我的目标的还真得不多，考虑到RapidXen也有Fremont, CA的数据中心，终于又下定决心再试一次。参考Slicehost 512MB内存/20GB硬盘/200G流量要$38/月，而且原来又感觉性能比较的慢，所以这次我选择了512MB内存的VPS, $30/月，包括1VCPU/20GB硬盘/512MB内存，流量？晕了，没说…… 通过Google付的钱，因为那个paypal之麻烦我已经很烦了。开通很慢，基本上等了一两天吧，我才在Member界面看到自己的IP，然后我就登上去开玩了。大概又过了一天，才有邮件通知我的IP是什么，如何登录，我真是服了他们。 在RapidXen能买到什么？我认为只有一个词：性能。虽然只有1个VCPU，我的网站的apache bench成绩能好上5倍，惊人呐！内存是要大一些，但我认为主要还是CPU的关系，毕竟测试时CPU都跑100%了而内存还可能有点儿剩余。 在RapidXen还能买到什么？基本上也只有一个词：nothing (else).简陋的后台除了能付款、提交支持表单就没有任何功能了，算得上一穷二白吧。不过玩VPS的都非善类，要得就是性能，其他的也许不那么重要吧。 RapidXen的支持很缓慢。VPS曾经Crash过一次，提交了支持表单后9个小时才恢复，不过数据完好。我想，做好备份的话，这里是个好地方。(update 2008/11/11: shanwa网友报告他在租用过程中丢失了VPS的数据，获得的补偿仅为月租金，请慎重考虑，如要使用，做好备份) 总结： 我想，每个人的需求都不一样，所以只能各取所需。下面算是推荐表吧： 追求性能，操作能力强，不在乎人工服务的 —&#62;? RapidXen 追求灵活方便，图表直观的 —&#62;? Linode 追求性能、VPS易用性和备份、不在中国的 –&#62;? Slicehost 追求操作简单、傻瓜配置，不在乎性能，网站简单的 –&#62;? Alphared 推荐时就不比较价格了，大家差不多，我都是按$20/月，性能能支持中小型全动态网站考虑的。另外说一句，我全部选用的CentOS 5，原因就不解释了。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/142/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>企鹅村大喇叭通信社通稿(企通社)</title>
		<link>https://www.zhaojianfei.com/archives/140</link>
		<comments>https://www.zhaojianfei.com/archives/140#comments</comments>
		<pubDate>Fri, 14 May 2010 15:25:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/140</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160; 2010年5月14日夜里，企鹅村常委在乌鲁木齐驻京办新疆饭店隆重召开村支部工作会议。参加这次会议的有村支书飞飞，村长初老师，妇女主任也就是我，和村民施展及夫人。 &#160;&#160;&#160;&#160;&#160; 五月的帝都，风和日不丽，春意蔫然。常委们英姿勃发，甩开腮帮子进食各种吐蕃美食，计有羊排软干，大腰子若干，囊包肉若干，大盘鸡若干等。 会上，传达了企鹅村QQ工作会议会议精神，分解下达了全年各类婚姻任务，签订了有关追求目标管理责任书，表彰奖励了2009年度先进集体和先进个人，先进集体就是企鹅村支部了，先进个人就是村民施展了。围绕“男的快娶，女的快嫁”的工作思路，提出了“100514”的工作要点。动员全村上下坚定信心，知难而进，为企鹅村人口不计划生育发展再做新贡献。 &#160;&#160;&#160;&#160;&#160; 村民施展会上提出，他将在再一次义无反顾的投入到拯救第三世界国家刚果金的运动中去。抛下夫人静同学，在非洲狮子的包围下，去大草原的广阔天地，再一次的大有作为一番。为此村委会各常委纷纷表示赞同和表扬，并且准备三次代表非洲人民感谢施展同学的付出。这时候施展同学吃水不忘挖井人，要先感谢国家。最后村妇女主任，也就是学生我，动情的说:感谢国家，感谢施展同学，这一走又是半年，你受得了，你夫人恐怕也受不了。但是请你放心，你夫人静同学的妇女权益工作就全权交给我了。你放心的去吧，不要有任何负担。工作需要你。村民施展同学感激的说:哦，那我快点回来。 &#160;&#160;&#160;&#160;&#160; 妇女主任，也就是我在会上发言指出，要坚定信心，树立科学发展观，给广大村支书村长和村民提供翻过村口泥巴墙的好农具，听说美帝底层劳动人民发明的的vpn/ssh挺不错，感谢国家，我们村也马上有这样的神器啦。村常委及村民纷纷给予热烈的掌声。 &#160;&#160;&#160;&#160;&#160; 村里的小正太马如龙和少女冬冬缺席会议。村委工作会议缺少了逗冬冬玩这一环节，村支书表示不满。 &#160;&#160;&#160;&#160;&#160; 在亲切友好、打着嗝的气氛中，企鹅村村委会工作会议又一次胜利的落幕啦。 &#160; ======================== 施展，祝你好运，一切顺利。元旦再见。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/140/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>没丢过自行车，你都不好意思说你是中国人</title>
		<link>https://www.zhaojianfei.com/archives/139</link>
		<comments>https://www.zhaojianfei.com/archives/139#respond</comments>
		<pubDate>Thu, 13 May 2010 16:02:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/139</guid>
		<description><![CDATA[不到半个月，我的坐骑就被偷了。座子还没暖热呢。放在楼下，怪我太相信看门的老大爷了。这是我人生中丢的第三辆自行车。本来应该有4辆，但是有一辆因为太特别所以失而复得。这回失而复得就不用想了，我先琢磨一下放在哪里最安全，家里是不可能的，讨厌占用生活空间，本来家里也不大。楼下也不安全，我丢那辆是二手八成新捷安特山地，还专门选了个低调的颜色，这都能被贼盯上。所以楼下也不太可能，只能在周边找找收费车棚。怕是不好找。看运气吧，下下周再入手一辆。老天保佑我。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/139/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开始玩rss分发</title>
		<link>https://www.zhaojianfei.com/archives/138</link>
		<comments>https://www.zhaojianfei.com/archives/138#respond</comments>
		<pubDate>Wed, 12 May 2010 16:05:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>
		<category><![CDATA[rss聚合]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/138</guid>
		<description><![CDATA[今天上午我想把博客和twitter以及校内状态还有浪网微博连起来做个同步更新，查了下资料发现可以，然后就做了，但是刚才查看，发现失败。同一条信息竟然被转发了8次到twitter.很郁闷，现在继续搞。这是一个测试的文章。]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/138/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#dropbox我们墙外见</title>
		<link>https://www.zhaojianfei.com/archives/137</link>
		<comments>https://www.zhaojianfei.com/archives/137#respond</comments>
		<pubDate>Wed, 12 May 2010 05:30:00 +0000</pubDate>
		<dc:creator><![CDATA[中指先生]]></dc:creator>
				<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://www.zhaojianfei.com/archives/137</guid>
		<description><![CDATA[我们只是想使用好的互联网产品，不行么，祖国?
我们只是想使用好的互联网产品，不行么，祖国?
我们只是想使用好的互联网产品，不行么，祖国?
我们只是想使用好的互联网产品，不行么，祖国?
我们只是想使用好的互联网产品，不行么，祖国?
我们只是想使用好的互联网产品，不行么，祖国?
我们只是想使用好的互联网产品，不行么，祖国?
我们只是想使用好的互联网产品，不行么，祖国?]]></description>
		<wfw:commentRss>https://www.zhaojianfei.com/archives/137/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
