<?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>隔叶黄莺 Unmi Blog</title>
	<atom:link href="http://unmi.cc/feed" rel="self" type="application/rss+xml" />
	<link>http://unmi.cc</link>
	<description></description>
	<lastBuildDate>Wed, 22 Feb 2012 14:20:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>在FCKEditor中使用插件UGeSHi-GeSHi实现代码高亮显示</title>
		<link>http://unmi.cc/fckeditor-ugeshi-code-highlight</link>
		<comments>http://unmi.cc/fckeditor-ugeshi-code-highlight#comments</comments>
		<pubDate>Wed, 22 Feb 2012 05:19:34 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[fckeditor]]></category>
		<category><![CDATA[geshi]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4251</guid>
		<description><![CDATA[本人安装了一个个人知识库管理系统 Knowledgeroot，选定了其中所见即所得编辑器比较好用的是 FckEditor，又再需要给它配上一款代码高亮的插件，于是找来了 UGeSHi-GeSHi。下面是从网络上摘来的在 FckEditor 中如何安装 UGeSHi-GeSHi 插件。 什 么是UGeSHi？UGeSHi是一个连接器，它把FCKEditor与GeSHi（采用PHP编程语言写的代码高亮插件，目前它已能高亮100多种程序 语言）紧密的结合在一起，您可以称为它为FCK插件，也可以称它为连接器（因为代码高亮的核心文件不是本人编写，本人只编写了其与FCKEditor整合 的过程）。 UGeSHi的功能：高亮程序代码，使程序代码美观且易读。 为什么采用GeSHi作为核心文件？原因很简单，因为GeSHi高亮足够完美，而且支持高亮的程序语言也很完善。 UGeSHi能高亮多少种程序语言？粗略的说可以高亮100多种，具体细节看下表： abap actionscript actionscript3 ada apache applescript apt_sources asm asp autoit avisynth bash basic4gl blitzbasic bnf boo c caddcl cadlisp cfdg cfm cil cobol cpp-qt cpp csharp css c_mac d delphi diff div dos dot eiffel email fortran freebasic genero gettext [...]]]></description>
		<wfw:commentRss>http://unmi.cc/fckeditor-ugeshi-code-highlight/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIView 中的控件事件穿透 Passthrough 的实现</title>
		<link>http://unmi.cc/uiview-event-passthrough</link>
		<comments>http://unmi.cc/uiview-event-passthrough#comments</comments>
		<pubDate>Sun, 19 Feb 2012 15:08:08 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[passthrough]]></category>
		<category><![CDATA[popover]]></category>
		<category><![CDATA[UIView]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4085</guid>
		<description><![CDATA[我们在有多个 UIView&#160;层叠时，比如一个按钮被一个 UIView&#160;遮盖时，想要在点击最上层的&#160;UIView&#160;时能触发按钮的相应事件，我们该如何实现呢，初步可以想到几种办法： 1.&#160;把按钮上层的所有 UIView&#160;的 userInteractionEnabled&#160;属性设置为&#160;NO，要是 UIView&#160;有自己的交互事件该如何办呢？而且这个 userInteractionEnabled 不能动态设置，等到点击后决定设置它的 NO 是没用的 2. UIView&#160;接受到点击事件后主动去触发下面按钮的点击，这时的关题有三，按钮没有点击过程中的交换效果、多层&#160;UIView&#160;时不切实际，逐层下传吗、还有就是其他双击、三击或别的手势如何处理 我也一直被前面两种方式纠缠着，同时也让 UIPopoverController&#160;的 NSArray *passthroughViews&#160;属性提醒着，因为对于&#160;UIPopoverController，设置到它的 passthoughViews&#160;属性中的控件事件可以完全从 UIDimmingView&#160;下透出来。但苦于不可能看到 UIPopoverController&#160;的源码，还是后面一而再的&#160;Google&#160;终于发现了&#160;UIView 的方法： - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;&#160;&#160; // recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system 只要实现了最顶层的&#160;UIView&#160;的&#160;hitTest&#160;方法，在某些情况返回下层的某个按钮实例，即相当于把那个按钮的事件透出来了，比如在点击落在该按钮上时，不管这个按钮在&#160;UIView&#160;下多少层都可以把它挖出来。 先看效果图： &#160;&#160; 三个图分别是： 1.&#160;所见到的，按钮被半透明红色&#160;View&#160;遮住了一部分 2.&#160;可点击未遮住的按钮部分，可看到按钮被点下未抬起的效果 3.&#160;在红色的&#160;View&#160;中点击按钮被遮住部分，同样触发了按钮的相应事件，且有中间效果，也就是说按钮穿透出来了 再看代码实现，有两部分代码，分别是 ViewController&#160;和&#160; CustomController ViewController.h // //&#160; ViewController.h // //&#160; Created by [...]]]></description>
		<wfw:commentRss>http://unmi.cc/uiview-event-passthrough/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows  平台下的 TextMate：E-TextEditor (附下载)</title>
		<link>http://unmi.cc/windows-textmat-e-texteditor</link>
		<comments>http://unmi.cc/windows-textmat-e-texteditor#comments</comments>
		<pubDate>Wed, 15 Feb 2012 05:40:52 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[E-TextEditor]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4232</guid>
		<description><![CDATA[在&#160;Mac&#160;平台下慢慢习惯了&#160;TextMate&#160;文本编辑器，功能很强，丰富的&#160;Bundle&#160;支持，于是想在&#160;Windows&#160;下找到一款类似的软件，那就是 E-TextEditor。E-TextEditor&#160;可以支持许许多多的编程语言，关键它可以直接使用&#160;TextMate&#160;的 Bundle，这就能与&#160;TextMate&#160;达成一致了。 官方当前版本是 2.0.2，可在 http://www.e-texteditor.com/&#160;下载，可试用 30&#160;天，可自己在网上找找，这里列出两方法： 1.&#160;破解文件覆盖 只找到 2.0a&#160;的 e.exe&#160;文件，在 E-TextEditor.v2.0a.Cracked-EAT&#160;同时有安装文件和 e.exe&#160;文件下载 2.&#160;修改注册表法 试用期 30&#160;天记在 HKEY_CURRENT_USER\Software\e\CLSID2,&#160;所以只要试用期快到了，把这个键删了就行，E-TextEditor&#160;在试用期间好像也没有功能上的限制。 另外，你在&#160;Windows&#160;下安装时可能会报告错误，提示你 “放弃、忽略、重试”，你要一直“忽略”也能安装完成，但不完善。解决方法是在安装前修改区域设置：控制面板中\语言与区域设置\高级\选择对非&#160;unicode&#160;的程序文件默认使用语言为：English(United States)，再次安装 E-TextEditor&#160;即可。 最后，已破解的&#160;E-TextEditor 2.0a&#160;的下载地址是：E-TextEditor.v2.0a.Cracked-EAT。 附：1. E-texteditor&#160;几种破解方法 &#160;&#160;&#160;&#160;&#160;&#160;&#160; 2. 18 个最佳代码编辑器/IDE推荐 &#160;&#160;&#160;&#160;&#160;&#160;&#160; 3. 推荐我常用并好用的一款代码编辑器 e-texteditor &#160;&#160;&#160;&#160;&#160;&#160;&#160; 4. 编程字体Monaco，YaHei.Consolas及theme下载]]></description>
		<wfw:commentRss>http://unmi.cc/windows-textmat-e-texteditor/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>走近 Ruby 的世界(六)</title>
		<link>http://unmi.cc/close-to-ruby-world-6</link>
		<comments>http://unmi.cc/close-to-ruby-world-6#comments</comments>
		<pubDate>Sun, 05 Feb 2012 15:36:20 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4205</guid>
		<description><![CDATA[对于&#160;Block，可以用 {}&#160;或 do...end&#160;来调用，如： 3.times { print "Ruby!" } ＃可以写成 3.times do print "Ruby!" end 1.upto(10) do &#124;x&#124; print x end #也可以写成 1.upto(10) {&#124;x&#124; print x}&#160;&#160; 一般是多行时用&#160;do...end，单行时用 {} 但对于 module、class、method&#160;的声明不能像&#160;C/Java&#160;那样用 {}，要用 ...end&#160;来定义。 Ruby&#160;的文件结构 #!/usr/bin/ruby -W #shebang 注释，给 Unix/Linux 的脚本说明的，必须放在第一行 #coding: utf-8 #指定编码的注释，放在第二行，如果没有 shebang 注释就放第一行 require 'socket' ... __END__ #代码结束标识，下面为程序数据，可用 IO 的 DATA 读取的，像是可执行文件的.data 数据区 ... 字符码码的注释，对于 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/close-to-ruby-world-6/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>走近 Ruby 的世界(五)</title>
		<link>http://unmi.cc/close-to-ruby-world-5</link>
		<comments>http://unmi.cc/close-to-ruby-world-5#comments</comments>
		<pubDate>Sun, 05 Feb 2012 13:47:11 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Syntax]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4179</guid>
		<description><![CDATA[Ruby 单行注释用 #，没有 /* */ 这样的多行注释方式，但是可以用文档注释方式来进行多行注释： =begin 注释描述 &#160;&#160;&#160;&#160;&#160;&#160; 中间的都是注释内容 =end 文档注释，像 Java 的 Javadoc, .net 的 ndoc，Ruby 也有 rdoc，Ruby 的 文档注释是也是在 method，class 和 module 定义之前进行注释的，注释的内容给 rdoc 生成 HTML 帮助文档，也给 ri 用的。也有一套语法，用 # = Headings 这样的语法，还支持些 HTML 代码。 Ruby 看到全大写的标识符，如 PI，还有像 LikeThis 或 LIKE_THIS 这样的标识符就认为是常量，对它们重新赋值就会告警： warning: already initialized constant LikeThis 命名成 like_this 就是变量，这也是 Ruby 的约定优于配置，常量就是大写命名。 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/close-to-ruby-world-5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone中Png图片格式的研究</title>
		<link>http://unmi.cc/iphone-png-format</link>
		<comments>http://unmi.cc/iphone-png-format#comments</comments>
		<pubDate>Tue, 10 Jan 2012 02:11:18 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[png]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4195</guid>
		<description><![CDATA[有时候我们看到一个App，想看看他的一些界面是如何实现的，这个时候需要查看一下它的图片资源，不过iOS的png图片编译后一般的图片阅读器都是没法查看的，本文将告诉的原因和转换出原图的方法（得安装XCode）。 ipa 解压，将png相关文件夹拷贝出来，在命令行下使用/Developer/Platforms/iPhoneOS.platform/Developer /usr/bin/pngcrush -revert-iphone-optimizations xxx.png yyy.png 我们都知道一个编译好的iPhone app 其中的png图片一般普通的图片阅读器是无法直接读取的，这是因为XCode在编译的过程中，将图片进行了优化，实际上它已经不是一个png图片了。 这边有一些apple iPhone png自己格式的一些说明 http://iphonedevwiki.net/index.php/CgBI_file_format 在Png数据中，我们最关心的莫过于png的数据块，其中包含了png每一个像素的信息，当然了为了减少存储空间，这些像素信息都是压缩保存的。而且是使用zlib进行压缩的，压缩后 包含zlib header 信息，还有由于解压验证的crc信息。 而iPhone的CgBI格式的png则将原始的png图片作如下变化: 增加一个新的关键块 CgBI Chunk 四个字节 zlib的header和CRC信息全部从IDAT中移除 红蓝交换，每一个像素（RGBA）中的R和B进行调换变成BGRA ，解压后每一个像素有四个字节组成，也就是将每一个像素的 第一个字节和第三个字节调换 透明像素处理 Premultiplied Alpha ，这个的意思是为了图像加载变得更快，预先将Alpha的信息乘到像素的颜色信息中去，这样后期计算的时候就可以减少CPU或者GPU计算了 把一个正常的PNG图片优化成iPhone 的png图片格式可以使用XCode自带的工具 /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush -iphone 还有一个第三方的开源工具也可以 https://github.com/DHowett/pincrush 如果你想把一个经过优化后的图片还原成普通图片阅读器可以查看的png图片，就是对上面的过程进行反向处理。 现在可以找到的第三方的转换的一般有如下几个 ipin.py(Python版本) http://www.axelbrz.com.ar/?mod=iphone-png-images-normalizer iPhonePNG（C版本） http://www.newsfirerss.com/blog/?p=176 经过本人测试，上面的这种第三方的额转换工具都没有对alpha相关的做任何处理，也可以是别的原因，有一些图片转换后的结果和原始图片还是有些出入的。 原图(Flip Board中的一个按钮背景图): 编译后如果使用第三方的python或者C版本的代码来转换，转换后的图片都是这样的，感觉边角的像素有点问题，不过大部分情况下 ，图片都是ok的 我尝试通过修改第三方的代码，想将Premultiplied Alpha 还原过去，但是还是存在各种问题，最终没有结果。 只能最终采用XCode自带的工具进行转换 /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush -revert-iphone-optimizations 1.png [...]]]></description>
		<wfw:commentRss>http://unmi.cc/iphone-png-format/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C 对 URL 进行 URLEncode 编码</title>
		<link>http://unmi.cc/objective-c-urlencode</link>
		<comments>http://unmi.cc/objective-c-urlencode#comments</comments>
		<pubDate>Mon, 09 Jan 2012 14:33:50 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[encode]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[URLencode]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4187</guid>
		<description><![CDATA[在 iOS&#160;程序访问&#160;HTTP&#160;资源时需要对&#160;URL&#160;进行&#160;Encode，比如像拼出来的&#160;http://unmi.cc?p1=%+&#38;sd f&#38;p2=中文，其中的中文、特殊符号&#38;％和空格都必须进行转译才能正确访问。 在 Java、.net&#160;和&#160;JS&#160;中都有相应的 encodeURL&#160;方法可用，在 Objective-C&#160;语言中，你可以试下 - (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc; 来对完整的&#160;URL(带请求参数的)进行编码，比如执行下面的代码： &#160;NSString *url=@"http://unmi.cc?p1=%+&#38;sd &#38;p2=中文"; &#160;NSString *encodedValue = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 上面代码转换出的&#160;encodedValue&#160;是： http://unmi.cc?p1=%25+&#38;sd%20&#38;p2=%E4%B8%AD%E6%96%87 可见，它不会转换&#160;URL&#160;中的 ?%&#38;&#160;符号，这也正常，因为它肯定分不出哪个 &#38;&#160;是参数的连接符号还是参数值，你可以单独编码参数，然后在拼接成&#160;URL&#160;之前把属性参数值中的 ?%&#38;&#160;等符号分别替换成相应的编码。 或者，您还可以试下另外一个方法来单独编码参数值，然后拼接成完整的&#160;URL： /* newString = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, origString, NULL, NULL, kCFStringEncodingUTF8); */ CF_EXPORT CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding); 参考代码，分别编码前面的 p1=%+&#38;sd f&#38;p2=中文，两个参数的代码和结果如下： NSString *param = @"%+&#38;sd f"; [...]]]></description>
		<wfw:commentRss>http://unmi.cc/objective-c-urlencode/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>走近 Ruby 的世界(四)</title>
		<link>http://unmi.cc/close-to-ruby-world-4</link>
		<comments>http://unmi.cc/close-to-ruby-world-4#comments</comments>
		<pubDate>Sun, 08 Jan 2012 17:02:39 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[irb]]></category>
		<category><![CDATA[ri]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4175</guid>
		<description><![CDATA[Ruby&#160;解释器给我们提供了四个常用的命令行工具，ruby、irb、ri&#160;和&#160; gem。动态脚本语言的解释器类似工具的使用方法基本一致的，逐个来看下它们的用法： 1.&#160;ruby：脚本解释器，直接执行脚本或脚本文件 ％ ruby -e 'puts "hello world!"' % ruby hello.rb ruby&#160;显示输出可以用三种方法：print、puts&#160;和&#160;p，print&#160;和&#160;puts&#160;都会把操作对象的 to_s&#160;返回值输出，只是 puts&#160;会在输出内容没有换行时加上一个换行，有则和&#160;print&#160;是一样的。例如 puts "Hello World!"&#160;就是 print "Hello World!\n"，puts "Hello World!\n"&#160;也是&#160; print "Hello World!\n"。p&#160;会调用对象的&#160;inspect&#160;方法进行输出，最后加不加换行与&#160;puts&#160;的规则是一样的。 2.&#160;&#160;&#160; irb：(Interactive RuBy)&#160;是个&#160;Ruby&#160;的交互命令行，可用来测试一些 Ruby&#160;的特性，不过有 TextMate&#160;那样的工具基本不会去用它。你还能在&#160;irb&#160;的&#160;shell&#160;下再次输入&#160;irb&#160;启动一个子&#160;shell。 unmi-mac:~ mssz$ irb --simple-prompt &#62;&#62; 2**3 =&#62; 8 &#62;&#62; "Ruby ! " * 3 =&#62; "Ruby ! Ruby ! Ruby ! " &#62;&#62; quit [...]]]></description>
		<wfw:commentRss>http://unmi.cc/close-to-ruby-world-4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NSNotificationCenter 的使用详解</title>
		<link>http://unmi.cc/nsnotificationcenter-usage</link>
		<comments>http://unmi.cc/nsnotificationcenter-usage#comments</comments>
		<pubDate>Fri, 06 Jan 2012 18:22:24 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[notification]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4163</guid>
		<description><![CDATA[通常我们在&#160;iOS&#160;中发生什么事件时该做什么是由&#160;Delegate&#160;实现的，例如&#160;View&#160;加载完后会触发&#160;viewDidLoad。&#160; Apple 还为我们提供了另一种通知响应方式，那就是&#160;NSNotification，系统中(UIKeyboardDidShowNotification&#160;等) 以及某些第三方组件(例如&#160;ASIHTTPRequest&#160;的 kReachabilityChangedNotification&#160;等)。 NSNotificationCenter&#160;较之于&#160;Delegate&#160;可以实现更大的跨度的通信机制，可以为两个无引用关系的两个对象进行通信。NSNotificationCenter&#160;的通信原理使用了观察者模式： 1. NSNotificationCenter&#160;注册观察者对某个事件(以字符串命名)感兴趣，及该事件触发时该执行的 Selector&#160;或&#160;Block 2.&#160;NSNotificationCenter&#160;在某个时机激发事件(以字符串命名) 3. 观察者在收到感兴趣的事件时，执行相应的 Selector 或 Block 使用&#160;NSNotificationCenter&#160;的步骤示例代码： 1.&#160;定义一个事件到来时该执行的方法： - (void)execute:(NSNotification *)notification { &#160;&#160;&#160; //do something when received notification &#160;&#160;&#160; //notification.name is @"NOTIFICATION_NAME" &#160;&#160;&#160; if(notification.object &#38;&#38; [notification.object isKindOfClass:[Test class]]){ &#160;&#160;&#160;&#160;&#160;&#160;&#160; //do something &#160;&#160;&#160; } } 2.&#160;注册观察者： [[NSNotificationCenter defaultCenter] addObserver:self &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; selector:@selector(execute:) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; name:@"NOTIFICATION_NAME" &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; object:nil]; 使用默认的通知中心，上面代码的意义的，观察者 self&#160;&#160; [...]]]></description>
		<wfw:commentRss>http://unmi.cc/nsnotificationcenter-usage/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>给网页开发者的20个有用的Firefox插件</title>
		<link>http://unmi.cc/20-firefox-plugins-for-web-developers</link>
		<comments>http://unmi.cc/20-firefox-plugins-for-web-developers#comments</comments>
		<pubDate>Fri, 06 Jan 2012 05:09:13 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[JS/AJAX]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4138</guid>
		<description><![CDATA[Firebug Web Developer Pixlr Grabber FireFTP ColorZilla Codetch Greasemonkey FireShot – Webpage Screenshots: Capture + Annotate MeasureIt GridFox – The Grid Layout Firefox Extension OperaView Window Resizer IE Tab Palette Grabber Console⊃2; Font Finder IE NetRenderer Yahoo! YSlow for Firefox SeoQuake SEO extension Total Validator Server Switcher 转自：http://www.oschina.net/news/24494/20-firefox-plugins-for-web-developers?from=20120102]]></description>
		<wfw:commentRss>http://unmi.cc/20-firefox-plugins-for-web-developers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>走近 Ruby 的世界(三)</title>
		<link>http://unmi.cc/close-to-ruby-world-3</link>
		<comments>http://unmi.cc/close-to-ruby-world-3#comments</comments>
		<pubDate>Wed, 04 Jan 2012 16:05:10 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4131</guid>
		<description><![CDATA[Ruby&#160;中有许多以 ? 和 !号结尾的方法，?&#160;号方法返回布尔值用于判断的，如Array.empty?，可以想到三元操作符 a = b==1?1:2 。出现在方法名尾部的感叹号表明使用该方法是需要多加小心。许多Ruby的核心类都定义了成对的方法，它们具有同样的名称，只是结尾相差一个“！”,通常情况下，不带感叹号的方法返调用该方法的一个拷贝，带感叹号的方法则是一个可变方法，该方法会修改原来的对象，如 Array 类中的 sort 和 sort!。 Ruby&#160;里对变量名有这么一个约定：全局变量加前缀 $，实例变量用前缀 @，类变量前缀用 @@。 Ruby&#160;的类和模块，来实现一个&#160;Ruby&#160;的示例类，从中了解类的构造方法，块的实现、块内循环和调用以及符号的重载，看如下代码： class Sequence &#160; def initialize(from, to) #Sequence.new(1,2) 构造实例时会调用这个方法 &#160;&#160;&#160; @from, @to = from, to #实例变量约定用 @ 开头 &#160; end&#160;&#160;&#160;&#160; &#160; &#160; &#160; def each #定义的实例方法，下面用了 yield 语句可以接受块 &#160;&#160;&#160; x = @from &#160;&#160;&#160; while x &#60;= @to #块内循环实现 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/close-to-ruby-world-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>走近 Ruby 的世界(二)</title>
		<link>http://unmi.cc/close-to-ruby-world-2</link>
		<comments>http://unmi.cc/close-to-ruby-world-2#comments</comments>
		<pubDate>Mon, 02 Jan 2012 14:35:48 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Method]]></category>
		<category><![CDATA[operator]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4120</guid>
		<description><![CDATA[还是零碎的记录，也不知道该为每一篇赋上什么合适的标题，姑且用一、二、三、四 ......&#160;往下标吧。 一种编程语 言，Coding&#160;时一定要讲求效率的，我向来不认为用记事本来写程序就可被认为是多么的高明。就像测试&#160;Java&#160;程序我仍然是选用 Eclipse，当然命令行技术是要求掌握的。写&#160;Ruby&#160;程序可以用&#160;NetBeans&#160;那样带智能提示的工具，但是 Mac OS&#160;下，TextMate&#160;的口碑很不多的，它有很好用的&#160;Bundle，Cmd＋R&#160;就能看到运行结果，查帮助也很方便。 从代码的智能提示来看，TextMate&#160;或许只能称之为半智能，但它的效率还是非常的高，且基于其余时候打开 TextMate&#160;的频度，我选择 TextMate&#160;作为 Ruby&#160;的 IDE。 Ruby&#160;的表达式和操作符，Ruby&#160;的语法是面向表达式的，如在其他语言中的控制结构在&#160;Ruby&#160;中统统叫做表达式，只是它们的返回值为&#160;nil。来看几个较有特色的&#160;Ruby&#160;运算符： puts 2**1024 #Ruby 支持很大很大的整数，不会那么容易出现放不下的问题 puts "Ruby" + " rocks!" #连接字符串 puts "Ruby! " * 3 #字符串成以数字就是重复几遍 puts "%d %s" % [3, "rubies"] #格式化字符串更直白，就是字符串的百分号操作符，参数为数组 执行的结果如下图，直接在&#160;TextMate&#160;中运行后的截屏： 许多的&#160;Ruby&#160;操作符就是由方法实现的，也就是说上面的运算符也就是方法调用，不信的话，你可以把上面的代码写成下面的形式： puts 2**(1024) puts "Ruby" + (" rocks!") puts "Ruby! " * (3) puts "%d %s" % ([3, [...]]]></description>
		<wfw:commentRss>http://unmi.cc/close-to-ruby-world-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>走近 Ruby 的世界(一)</title>
		<link>http://unmi.cc/close-to-ruby-world-1</link>
		<comments>http://unmi.cc/close-to-ruby-world-1#comments</comments>
		<pubDate>Mon, 02 Jan 2012 09:30:34 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4111</guid>
		<description><![CDATA[因工作需要，需用到&#160;Ruby&#160;来写&#160;BDD(Behaviour Driven Development) 的脚本，这样的话还是希望自己对&#160;Ruby&#160;有一定程度的了解，不能总是依葫芦画瓢吧。 Ruby&#160;是由松本行弘(Yukihiro Matsumoto,&#160;简称：Matz) 发明的，确实应该佩服一下，不存在什么民族情节的，比起所谓的汉语编程要强上千百遍，再说，通常民族情节都为政治所利用的。蒙牛、百度，腾讯等等 ，民族品牌，狗屁，都是某些个岛国注册的。 Ruby is designed to make programmers happy. Ruby&#160;吸收了 List、Smalltalk&#160;和&#160;Perl&#160;的灵感，采用了类似于&#160;C&#160;和&#160;Java&#160;的语法。 Ruby&#160;是完全面向对象的编程语言(completely object-oriented language)，不像&#160;Java&#160;和&#160;C&#160;存在基本(原始)类型，在&#160;Ruby&#160;的世界里，什么都是对象，像数字，true、false&#160;或&#160; nil&#160;都是对象，它们有自己的属性和方法，你可以对它们点一下点出东西来。如： puts 1.class #Fixnum puts 0.0.class #Float puts true.class #TrueClass puts nil.class #NilClass 注意到，别以为上面是在引用对象的&#160;class&#160;属性，其实不然，是在调用相应的方法，只是把圆括号省去了而已。Ruby&#160;在调用方法时通常会省去圆括号，特别是对于无参方法时。Ruby&#160;是不允许从外部访问对象的内部状态的，必须通过访问方法的，这与&#160;Objective-C&#160;是一致的。所以上面的 puts 1.class&#160;就是调用的&#160;puts 1.class()。 块和迭代，看下面的代码即解释： 2.times { print "Ruby!"}; puts #输出 Ruby!Ruby! 1.upto(9) {&#124;x&#124; print x} #输出 123456789 puts a = [3,2,1] [...]]]></description>
		<wfw:commentRss>http://unmi.cc/close-to-ruby-world-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>李承鹏新文完败韩寒三博, 内容并不代表本网立场</title>
		<link>http://unmi.cc/lichengpeng-beat-hanhan</link>
		<comments>http://unmi.cc/lichengpeng-beat-hanhan#comments</comments>
		<pubDate>Sun, 01 Jan 2012 11:45:59 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[新闻]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4107</guid>
		<description><![CDATA[当今中国，不存在走着前进还是跑着前进的问题，只存在要不要前进的问题。否则你明白不了不准搞、不准搞、不准搞……那样的议题。 当今中国，不存在开快了或开慢了的问题，只存在要不要正确行驶的问题。否则你解释不了很快的动车追尾了、很慢的校车倾覆了、不快不慢的公交车也自焚了，这些社会问题。 当今中国，不是用补药还是下猛药的问题，只存在一个病人讳疾忌医，甚至病急乱投医。比如，毒奶横行是因为草他妈，假药滥市因为销售代表道德低下，最漂亮的馒头就是染色馒头，政府不反思官德崩坍却号召全民提高私德，这么一系列跑题的案例。 不存在革命还是改良的方式问题，只存在想不想与世界一起前行的方向问题。 问题就在那里，贱民和执政者都看见了的，可尚存理想和试图改变倒成了暴力问题。你见过有谁暴力革命，乌坎的老头、海门的阿婆、狼奔豕突的小贩，还是在宪法范围内参选的独立候选人……民主，只是一种常态机制，是一个人身体出问题可以随时帮他治病。没有所谓时机，你见过哪家医院门口悬挂“时机不对，请勿入内”。没有所谓素质，我们从未听到过哪名医生说“凡文盲者，乱棍打出”。 我要告诉即得利益者，民主不是打倒你，民主是让你成本更小更有底气更能发挥你的才华，正大光明地获得本该有的利益，而不是被迫天天做假账，月月备上红包，到了年底低三下四给工商税务送上大礼，见个科长就满脸堆笑，见个省级官员恨不得让他爆菊。 我要告诉非即得利益者，民主就是保护你，不是街市大乱、网络尽断、喝不到奶吃不上饭。何况，现在的街市不乱、网管不掐断你的线、吃的饭里没有苏丹红喝的奶没有三聚氰胺？民主如此简单，是不只让一个早抓起来的部长为举国兴建的动车负责，不只让一个临时工油漆工为上海着火的大楼负责，不只让一个编外司机为一车又一车的孩子们负责……就是最基本的公平正义。如果嫌这仍装13，民主是拎包上班、买菜回家、疯狂造爱、娶妻生子；不是坐公交挤成照片、找工作遭受白眼、有身份证却没有身份，生了人却没有人生。即使一切不能改变，也要改变每到开会，他们负责决定，我们负责鼓掌和观看。 当今社会之积患，每一个人都无法幸免。从封疆大吏，到扫地的阿姨，大家内心里都盼着那条船。前天70多名深圳城管在政府门口抗议，“剥削劳务工，还我血汗钱”，被百名特警队分割包围押上了警车。勇猛如城管大哥也不能幸免。一个幻想，过去是城管押走老百姓，这次是特警押走城管，下次会不会是野战军押走特警？ 可见中国之民主，不是多与少、快与慢、轻与重、急与缓的问题，而是要不要的问题。不存在时机问题，而只有一而再、再而三错失良机的问题。可是每当需要变革的时刻，总有青青黄黄跳出来，还没见到选票，就说要贿选，没开始民主，就说会血流成河，我认为是一种吓唬式的教育。你都没试，怎么能说不能呢。等于是站在桥上说，人民还不会游泳啊，河里还没有石头呢，等一等吧。然后，你却从桥上过河了。多有喜感的一个画面。 我要告诉左中右派，民主是我们所有人的权利。是公共使用权，动车不追尾、飞机不晚点、马路不为领导车队封路；是知情权，股市永远低迷的答案，官员的账户里有多少钱，多少名字深埋于地下；是价值评估权，不要伪劣驱逐良币，不要蠢才当道、人才垫脚，要让勤勉和才华重见天日；是被保护权，人人交了税，就是交了保护费，军队对外不对内。是参与权、表达权、知情权、监督权……上述四权不是我发明的，是涛哥今年刚说的。 不知道什么时候开始，民主在这个国家被教育成一件很高端的事情，其实民主从来不是装高端，只是保证吃喝拉撒的种种庸俗。这样一些权利，如果你说也没操作性，我只想要一个最低端的权利，可以表达不高兴的权利： 我得说，住在世界上最大的一个小区里，过得并不是很开心。这里的下水道堵了很久没人修，这里的电梯在摔死人前，也无人管。这里的物业不是业主选出来的，但谁是业主却归物业决定。还不准提意见，谁提，就不热爱这个小区，就是反对这个小区。奇妙的是，那么热爱这个小区的物业们，全家老小却住在别的小区。 我爱这个小区，可是过得不开心。有一种说法是，这需要等待物业配合，盼望好的人品和运气，要讨价还价。我不认为这是对的，本来就是我们的，干吗要讨价还价？这就像，你跟小区经理探讨这房子产权到底是谁的，跟门卫探讨是否可以在这里借住一夜，跟保安壮烈地探讨这女人其实你的，电工打你家小孩时，你不收拾丫的却跟他大谈文化建设。而且，这一切的过程还是跪着的，你见过跪着跟别人讨价还价的吗。 我觉得跪着的成熟，并不合逻辑。 最后的问题，我感到是萦绕在很多朋友心头的问题：难道你不觉得素质低是客观事实吗，难道说了实话也有该批评吗，即使观点有错也引发了一个大思考啊。很好的问题，我觉得“宁坐在宝马后面哭，也不坐在自行车上笑”说的也是客观事实，也引发了全社会对无奈现实的大思考，请问当初朋友们批评她了吗；素质低就不适合马上享受民主，可是，那么多官员家属都在米国生活着，他们道德水准这么低，听说在那里生活得如鱼得水，也不敢套牌车七十码撞飞了人还说我爸是李刚。 如果我没猜错，这时有些朋友脑海里已闪现出“这是两码事”来回击。真是两码事吗，也许是。只要你愿意，宇宙跟一眨眼前已是两个宇宙，今年的你和去年的你也是两码事，明年的你再看今年的话题，正是两码事。 你抱怨过让员工只捐十元钱的王石吗；你崇拜过“中国人是要管一管”的成龙吗；你鄙视过不为自由而战的李敖吗。 这正是我苦恼的地方，有时只想谈谈每个人应拥有的权利，却被搞成争论哪个人更正确。权利就是权利，没有正确的权利，和错误的权利。像我这样一个庸俗不堪的人，并不正确，可活在这样一个由外国人他爸管理的小区里，该拥有一个可以不高兴的权利。不是中国人不高兴，而是中国人，有权对中国不高兴。 明白此，你已拾起一块叫不高兴的砖，敲响那道自由的门。]]></description>
		<wfw:commentRss>http://unmi.cc/lichengpeng-beat-hanhan/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 站点带宽几天就耗尽，都是 WP Gravatar Mini Cache 惹的祸</title>
		<link>http://unmi.cc/wp-gravatar-mini-cache-exhaust-bandwidth</link>
		<comments>http://unmi.cc/wp-gravatar-mini-cache-exhaust-bandwidth#comments</comments>
		<pubDate>Tue, 27 Dec 2011 15:34:20 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4078</guid>
		<description><![CDATA[有两个月里，本站点只能月头坚持七八天，基本处于瘫患状态。访问时就出现几行文字信息，现在不记得啦，大概就是域名被临时挂起了。后来才知道是因为有限的带宽已消耗怠尽，才不允许访问的。似乎这种情况还能给我带来点惊喜，我的网站有这么受欢迎吗！从 Google 的网站分析数据来看，并不是这样，那么就是有异常了。 站点停了几十天后，第一次找了下原因，似乎我站点上提供了几个文件下载量特别大，于是把那几个文件搬到文件分享网站上去分流，还是不奏效，没几天还是收到带宽将要耗尽的邮件通知。是不是别的几个服务器目录中的文件被人拼命下了呢，于是把它们改了名，还用插件对文件的下载进行了监控，未见异常。就这样，仍是没过几天，网站再一次被关闭了，距离月底还有几十天。 其实关于是什么原因导致网站被关闭在&#160;DirectAdmin&#160;面板和邮件里说的很明白的，如 User unmi has been suspended for bandwidth overusage。 于是苦等了二十多天，本站自动开启后进到&#160;DirectAdmin&#160;管理界面里找原因，看带宽使用数据，才发现了问题的真正所在，截了几个图： 这个图中显示了绝大多数的带宽占用都来自于对&#160; /wp-content/plugins/wp-gravatar-mini-cache/iava/ 目录中图片文件的访问。 看上图中 2011 12 02&#160;日的访问，以及前一个月的情况，每天会产生 900&#160;M&#160;左右的流量，所有没几天这个站点就被禁用了，后来的一天 100&#160;多&#160;M&#160;是正常的。 通过上面两个图，已经可以确定完全是大量的访问 /wp-content/plugins/wp-gravatar-mini-cache/iava/&#160;中的图片文件产生的，而这是由插件 wp-gravatar-mini-cache&#160;生成的目录。这个目录起初是因为&#160;GFW&#160;的原因造成不能正常显示头像而安装上去，缓存头像用的，其实也正常工作了好多个月，现在却出问题了，所以必须把它移除。但是单纯的让那些图片不存在(404)，由于网站有其他插件的存在而并不能减少相关的流量，不得不采用的办法就是在 /wp-content/plugins/wp-gravatar-mini-cache/iava/&#160;目录中加上 .htaccess&#160;文件，内容为： Order deny,allow Deny from all 这样就禁止了对该目录中文件的由于，从而消除了无意义的流量损耗，才能让本站点真正快乐坚挺的扛下去。]]></description>
		<wfw:commentRss>http://unmi.cc/wp-gravatar-mini-cache-exhaust-bandwidth/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>有时候可用 UIWebView 代替 UITextView，解决行间距问题</title>
		<link>http://unmi.cc/uiwebview-replace-uitextview-line-height</link>
		<comments>http://unmi.cc/uiwebview-replace-uitextview-line-height#comments</comments>
		<pubDate>Sat, 10 Dec 2011 15:13:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[WebView]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4083</guid>
		<description><![CDATA[我们在使用&#160;UILabel&#160;或是&#160;UITextView&#160;时，如果文字出现了换行，目前我还不知道如何去控制行间距，固定的&#160;Label 文字 可以折成两个&#160;Label&#160;上下显示，但是对应大段显示的段落要多行显示时该如何呢，多行单独控制就变得不现实了。 由于&#160;UILabel&#160;或 UITextView&#160;并不提供对行间距 line-height&#160;的设置，要达成所愿指定行间距的方法，我可以想到三种方式： 1. 自定义相应的控件，在控件内部方法中去做文章，未实践，可能是个好方法 2.&#160;修改字体，由于默认行间距是由字体本身特性决定的，所以可以修改字体来满足有限的需求，不是很现实 3.&#160;用&#160;&#160;&#160; UIWebView&#160;来代替&#160;UITextView，这是本文的思想 先看个图片，看看在使用某些字体时失控的行间距是什么样的效果： 说明：上图左边是用&#160;UITextView&#160;来显示一段文字，由于行间距不可控，不是我们想要的。右边就是用&#160;UIWebView&#160;来显示的同一段文它，它的行间距我们可以随意控制。 思才过程是这样的，对于&#160;UITextView&#160;多行文字显示时行间距不能直接用代码来设置，特别是对于某些字体来说行间距确有些夸张。然后首先想到的解决方式是创建自己的&#160;UITextView&#160;子类，重新实现某些方法，似乎不那么容易。 进而也不能不研究，这默认的行间距内部是由什么控制着的，是字体，看用&#160;FontCreator&#160;打开的一个字体文件中的字符： 看字体的 WinAscent, WinDescent&#160;在上下决定了字符上下间的距离了，所以你当然可以修改字体文件的属性了，存成新的字体文件，那如果一个应用中会有多种行间距的话那就痛苦了，且不说中文字体文件都不算小的。 再就是想到&#160;Web&#160;中的 CSS&#160;&#160; 对字体什么想怎么就怎么，所以想到用&#160;UIWebView&#160;来代替&#160;UITextView，而且&#160;iOS&#160;下的&#160;Safari&#160;对&#160;HTML5&#160;也支持的不错，那就尝试吧，不过首先得解决下面几个问题： 1.&#160;可以使用本地字体，因为自己的应用中可能会加入自定义的字体，不仅仅是用系统字体，HTML5&#160;可以支持服务器端字体，用 @font-face 2.&#160;像&#160;UITextView&#160;那样背景要能透明化，HTML5&#160;支持 rgba&#160;附加&#160;Alpha&#160;通道来指定颜色，且可设置 opacity, transparent 样式 下面贴下我的解决办法及步骤，如果在设置样式上还有新方法，可继续发掘。 第一步：引入自定义字体，一个&#160;ttf&#160;文件 把你的字体文件添加到项目中去，然后在项目的&#160;Target&#160;的&#160;Info&#160;标签页中，添加到&#160;Fonts provided by application&#160;属性中，如图： 在&#160;Fonts provided by application&#160;中添加一项&#160;Item 0，并指定字体文件，可添加多个，每个字体文件的 Font-Family&#160;名称你应要知道。 第二步：添加&#160;UIWebView，并对 WebView&#160;应用如下代码： //下面两行协助 UIWebView 背景透明化，这两属性可以在 xib 中进行设置 webview.backgroundColor = [UIColor clearColor]; //但是这个属性必须用代码设置，光 xib 设置不行 webview.opaque [...]]]></description>
		<wfw:commentRss>http://unmi.cc/uiwebview-replace-uitextview-line-height/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>16个WordPress中使用的Google服务和应用</title>
		<link>http://unmi.cc/16-wordpress-plugi-google-service</link>
		<comments>http://unmi.cc/16-wordpress-plugi-google-service#comments</comments>
		<pubDate>Fri, 09 Dec 2011 04:54:19 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4095</guid>
		<description><![CDATA[Google提供了很多不错的用户端服务和应用，虽然最初是一个搜索引擎，今天Google几乎为每一个用户提供解决方案。当为了满足需求的时候，Google并不忘记满足Web开发人员和设计人员的需求。在这篇文章中，我们将了解一下Google提供了那些主要的服务，并且如何应用到wordpress中的。 1. Google自定义搜索 Google自定义搜索帮助网站创建了一个自制定的搜索引擎。帮助你构建你的核心功能，帮助你搜索整个网站，部分网站甚至是多个站点。同时你也可以使用Google adsense来帮助你显示广告到你的搜索结果中，当然你可以使用付费版本，这样可以去掉所有的广告（100美元/年），给用户提供更好的搜索体验。 2. Goolge Web Fonts Google Web Fonts可能是Web设计及其开发人员最喜欢使用的功能之一。帮助网站设计人员在网站中使用非标准的字体。这些字体的目录可以让你很简单的执行CSS font-face技巧。 Google Web fonts完全免费并且实现非常简单，你可以使用插件或者CSS的@import命令（在你的样式表中简单的使用字体名称即可），例如， @import url(‘http://fonts.googleapis.com/css?family=Droid+Sans’); #body { font: normal normal normal 14px/20px ‘Droid Sans’, Arial, sans-serif; } 3. Google Adsense/Adwords 如果你希望在你的网站中添加广告的话， Google adsense可能是最简单的方法。这里我们能狗找到很多的帮助你使用Google adsense赚钱的教程，numerous plugins帮助你在wordpress中添加Google Adsene。 使用Adwords，你可以使用关键字查找来找到指定关键自的搜索趋势 4. Goo.gl URL shortener wordpress拥有它自己的URL缩写插件WP.me, 目前这个特性整合到JetPack中。 然而，Google宣称自己URL缩写工具是one of a kind, 而且， Google已经发布了它自己的URL缩写API。因此如果你没有开始使用这个，现在是你开始尝试的时候？如果你想使用这个API，使用 excellent tutorial by [...]]]></description>
		<wfw:commentRss>http://unmi.cc/16-wordpress-plugi-google-service/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS Programming – 触摸事件处理</title>
		<link>http://unmi.cc/ios-programming-touch-events</link>
		<comments>http://unmi.cc/ios-programming-touch-events#comments</comments>
		<pubDate>Fri, 04 Nov 2011 08:04:36 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[touch event]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4071</guid>
		<description><![CDATA[iphone/ipad无键盘的设计是为屏幕争取更多的显示空间，大屏幕在观看图片、文字、视频等方面为用户带来了更好的用户体验。而触摸屏幕是iOS设备接受用户输入的主要方式，包括单击、双击、拨动以及多点触摸等，这些操作都会产生触摸事件。 在Cocoa中，代表触摸对象的类是UITouch。当用户触摸屏幕后，就会产生相应的事件，所有相关的UITouch对象都被包装在事件中，被程序交由特定的对象来处理。UITouch对象直接包括触摸的详细信息。 UITouch类中包含5个属性： &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; window：触摸产生时所处的窗口。由于窗口可能发生变化，当前所在的窗口不一定是最开始的窗口。 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; view:触摸产生时所处的视图。由于视图可能发生变化，当前视图也不一定时最初的视图。 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; tapCount：轻击（Tap）操作和鼠标的单击操作类似，tapCount表示短时间内轻击屏幕的次数。因此可以根据tapCount判断单击、双击或更多的轻击。 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; timestamp：时间戳记录了触摸事件产生或变化时的时间。单位是秒。 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; phase：触摸事件在屏幕上有一个周期，即触摸开始、触摸点移动、触摸结束，还有中途取消。而通过phase可以查看当前触摸事件在一个周期中所处的状态。phase是UITouchPhase类型的，这是一个枚举配型，包含了 ·&#160;&#160;&#160;&#160;&#160; UITouchPhaseBegan（触摸开始） ·&#160;&#160;&#160;&#160;&#160; UITouchPhaseMoved（接触点移动） ·&#160;&#160;&#160;&#160;&#160; UITouchPhaseStationary（接触点无移动） ·&#160;&#160;&#160;&#160;&#160; UITouchPhaseEnded（触摸结束） ·&#160;&#160;&#160;&#160;&#160; UITouchPhaseCancelled（触摸取消） UITouch类中包含如下成员函数： - (CGPoint)locationInView:(UIView *)view：函数返回一个CGPoint类型的值，表示触摸在view这个视图上的位置，这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话，返回的时触摸点在整个窗口的位置。 - (CGPoint)previousLocationInView:(UIView *)view：该方法记录了前一个坐标值，函数返回也是一个CGPoint类型的值， 表示触摸在view这个视图上的位置，这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话，返回的时触摸点在整个窗口的位置。 当手指接触到屏幕，不管是单点触摸还是多点触摸，事件都会开始，直到用户所有的手指都离开屏幕。期间所有的UITouch对象都被包含在UIEvent事件对象中，由程序分发给处理者。事件记录了这个周期中所有触摸对象状态的变化。 只要屏幕被触摸，系统就会报若干个触摸的信息封装到UIEvent对象中发送给程序，由管理程序UIApplication对象将事件分发。一般来说，事件将被发给主窗口，然后传给第一响应者对象(FirstResponder)处理。 关于响应者的概念，通过以下几点说明： 响应者对象（Response object） 响应者对象就是可以响应事件并对事件作出处理。在iOS中，存在UIResponder类，它定义了响应者对象的所有方法。UIApplication、UIView等类都继承了UIResponder类，UIWindow和UIKit中的控件因为继承了UIView，所以也间接继承了UIResponder类，这些类的实例都可以当作响应者。 第一响应者（First responder） 当前接受触摸的响应者对象被称为第一响应者，即表示当前该对象正在与用户交互，它是响应者链的开端。 &#160;响应者链（Responder chain） 响应者链表示一系列的响应者对象。事件被交由第一响应者对象处理，如果第一响应者不处理，事件被沿着响应者链向上传递，交给下一个响应者（next responder）。一般来说，第一响应者是个视图对象或者其子类对象，当其被触摸后事件被交由它处理，如果它不处理，事件就会被传递给它的视图控制器对象（如果存在），然后是它的父视图（superview）对象（如果存在），以此类推，直到顶层视图。接下来会沿着顶层视图（top view）到窗口（UIWindow对象）再到程序（UIApplication对象）。如果整个过程都没有响应这个事件，该事件就被丢弃。一般情况下，在响应者链中只要由对象处理事件，事件就停止传递。但有时候可以在视图的响应方法中根据一些条件判断来决定是否需要继续传递事件。 管理事件分发 视图对触摸事件是否需要作处回应可以通过设置视图的userInteractionEnabled属性。默认状态为YES，如果设置为NO，可以阻止视图接收和分发触摸事件。除此之外，当视图被隐藏（setHidden：YES）或者透明（alpha值为0）也不会收事件。不过这个属性只对视图有效，如果想要整个程序都步响应事件，可以调用UIApplication的beginIngnoringInteractionEvents方法来完全停止事件接收和分发。通过endIngnoringInteractionEvents方法来恢复让程序接收和分发事件。 如果要让视图接收多点触摸，需要设置它的multipleTouchEnabled属性为YES，默认状态下这个属性值为NO，即视图默认不接收多点触摸。 接下去学习如何处理用户的触摸事件。首先触摸的对象是视图，而视图的类UIView继承了UIRespnder类，但是要对事件作出处理，还需要重写UIResponder类中定义的事件处理函数。根据不通的触摸状态，程序会调用相应的处理函数，这些函数包括以下几个： &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]]]></description>
		<wfw:commentRss>http://unmi.cc/ios-programming-touch-events/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>设置 UILabel 和 UITextField 的 Padding 或 Insets</title>
		<link>http://unmi.cc/uilable-uitextfield-padding-insets</link>
		<comments>http://unmi.cc/uilable-uitextfield-padding-insets#comments</comments>
		<pubDate>Tue, 01 Nov 2011 18:01:49 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[Insets]]></category>
		<category><![CDATA[Padding]]></category>
		<category><![CDATA[UILabel]]></category>
		<category><![CDATA[UITextField]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4060</guid>
		<description><![CDATA[iOS&#160;的控件，只看到&#160;UIButton&#160;可以设置 Padding/Insets，即按钮上文字或图片与按钮边界的间隙，对与&#160;CSS&#160;来说叫做 Padding，在&#160;iOS&#160;中叫做&#160;Insets，UIButton&#160;设置&#160;Insets&#160;相应的属性如下： Configuring Edge Insets &#160;&#160;&#160;&#160;&#160; contentEdgeInsets&#160; property &#160;&#160;&#160;&#160;&#160; titleEdgeInsets&#160; property &#160;&#160;&#160;&#160;&#160; imageEdgeInsets&#160; property&#160; 它们接受的属性类型是：UIEdgeInsets，由函数 UIEdgeInsetsMake ( CGFloat top, CGFloat left, CGFloat bottom, CGFloat right );&#160;&#160;&#160;&#160; 构造出，分别表示其中的内容/标题/图片离各边的距离。 在&#160;xib&#160;中也有界面来对按钮的这三个&#160;EdgeInsets&#160;属性的设置，分别是按钮的&#160;Edge&#160;和&#160;Inset&#160;属性。 印像中，Swing&#160;的许多组件都可设置&#160;Insets&#160;属性，可对于&#160;iOS&#160;的控件就没那么幸运了，比如我想设置&#160;UILable&#160;或&#160;UITextField&#160;中的文本离边界的间隙，无伦是在&#160;xib&#160;里还是直接代码的方式都无能为力，因为它们根据未开放相应的属性让你去控制。 办法当然还是有的，自定义相应自己的控件了，比如 InsetsLabel&#160;或是&#160; InsetsTextField，接着就是覆盖某些个方法来达成。 首先来看&#160;UILabel&#160;的子类 InsetsLabel&#160;的实现代码： //1.header file #import &#60;UIKit/UIKit.h&#62; @interface InsetsLabel : UILabel @property(nonatomic) UIEdgeInsets insets; -(id) initWithFrame:(CGRect)frame andInsets: (UIEdgeInsets) insets; -(id) initWithInsets: (UIEdgeInsets) insets; [...]]]></description>
		<wfw:commentRss>http://unmi.cc/uilable-uitextfield-padding-insets/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>本站意外休眠了十天后重新恢复正常</title>
		<link>http://unmi.cc/site-down-10-days</link>
		<comments>http://unmi.cc/site-down-10-days#comments</comments>
		<pubDate>Mon, 24 Oct 2011 16:53:49 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Gossip]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[unmi]]></category>

		<guid isPermaLink="false">http://unmi.cc/?p=4056</guid>
		<description><![CDATA[本站前段时间有几天时好时坏，经常一访问：http://unmi.cc&#160;就出现： This account has been suspended. Either the domain has been overused, or the reseller ran out of resources. 这样的错误提示，我真的还担心是不是触动了大墙而被&#160;Block&#160;了呢，又不怎么像。从大约十天前起就彻底不挺了，今晚问了一下主机提供商的客服，才知道，原来是被爆了－－超过月流量了。没理由呀，这个站点还没有这么知名到访问量骤然上升的，彻查啊，于是上图上真相： 上图是从网站外部对文件 /downloads/Quartz_Job_Scheduling_Framework_CN_V1.0.0.pdf&#160;的超常多的下载，记录还有很多页，同样对文件 /downloads/Quartz_Job_Scheduling_Framework_CN_V1.0.0.rar&#160;的较疯狂的下载，这在以前是想像不到的。 不知是谁，好心呢，倒也无恶意，把这两文件的下载直接放到哪个流量大的网站上去了，竟引来如此多的追捧，只可惜我目前还消受不起了，主机每月都有流量限制的，所以我现在只能把那两个下载地址转到 115&#160;网盘上去了。 其实我早该知道是怎么回事的，见主机后台有信息提醒的： 也是一直被我忽略掉了，也许是因为我对某些人认为敏感的东西感到更过于的敏感吧，因而一直搁置，如今才予以处置。 总之，现在应该是好了，如果有一天，真有那么大的流量，那肯定可以更发达些的。瞎想吧！不如留意下上篇博文是什么时候写的。]]></description>
		<wfw:commentRss>http://unmi.cc/site-down-10-days/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 19/69 queries in 0.036 seconds using disk: basic
Object Caching 5619/5746 objects using disk: basic

Served from: unmi.cc @ 2012-02-23 07:25:38 -->
