在FCKEditor中使用插件UGeSHi-GeSHi实现代码高亮显示

本人安装了一个个人知识库管理系统 Knowledgeroot,选定了其中所见即所得编辑器比较好用的是 FckEditor,又再需要给它配上一款代码高亮的插件,于是找来了 UGeSHi-GeSHi。下面是从网络上摘来的在 FckEditor 中如何安装 UGeSHi-GeSHi 插件。

什 么是UGeSHi?UGeSHi是一个连接器,它把FCKEditor与GeSHi(采用PHP编程语言写的代码高亮插件,目前它已能高亮100多种程序 语言)紧密的结合在一起,您可以称为它为FCK插件,也可以称它为连接器(因为代码高亮的核心文件不是本人编写,本人只编写了其与FCKEditor整合 的过程)。

UGeSHi的功能:高亮程序代码,使程序代码美观且易读。

为什么采用GeSHi作为核心文件?原因很简单,因为GeSHi高亮足够完美,而且支持高亮的程序语言也很完善。

UGeSHi能高亮多少种程序语言?粗略的说可以高亮100多种,具体细节看下表: 阅读全文 >>

UIView 中的控件事件穿透 Passthrough 的实现

我们在有多个 UIView 层叠时,比如一个按钮被一个 UIView 遮盖时,想要在点击最上层的 UIView 时能触发按钮的相应事件,我们该如何实现呢,初步可以想到几种办法:

1. 把按钮上层的所有 UIView 的 userInteractionEnabled 属性设置为 NO,要是 UIView 有自己的交互事件该如何办呢?而且这个 userInteractionEnabled 不能动态设置,等到点击后决定设置它的 NO 是没用的

2. UIView 接受到点击事件后主动去触发下面按钮的点击,这时的关题有三,按钮没有点击过程中的交换效果、多层 UIView 时不切实际,逐层下传吗、还有就是其他双击、三击或别的手势如何处理

我也一直被前面两种方式纠缠着,同时也让 UIPopoverController 的 NSArray *passthroughViews 属性提醒着,因为对于 UIPopoverController,设置到它的 passthoughViews 属性中的控件事件可以完全从 UIDimmingView 下透出来。但苦于不可能看到 UIPopoverController 的源码,还是后面一而再的 Google 终于发现了 UIView 的方法:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;   // recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system 阅读全文 >>

Windows 平台下的 TextMate:E-TextEditor (附下载)

在 Mac 平台下慢慢习惯了 TextMate 文本编辑器,功能很强,丰富的 Bundle 支持,于是想在 Windows 下找到一款类似的软件,那就是 E-TextEditor。E-TextEditor 可以支持许许多多的编程语言,关键它可以直接使用 TextMate 的 Bundle,这就能与 TextMate 达成一致了。

官方当前版本是 2.0.2,可在 http://www.e-texteditor.com/ 下载,可试用 30 天,可自己在网上找找,这里列出两方法:

1. 破解文件覆盖

只找到 2.0a 的 e.exe 文件,在 E-TextEditor.v2.0a.Cracked-EAT 同时有安装文件和 e.exe 文件下载

2. 修改注册表法

试用期 30 天记在 HKEY_CURRENT_USER\Software\e\CLSID2, 所以只要试用期快到了,把这个键删了就行,E-TextEditor 在试用期间好像也没有功能上的限制。 阅读全文 >>

走近 Ruby 的世界(六)

对于 Block,可以用 {} 或 do...end 来调用,如:

一般是多行时用 do...end,单行时用 {}

但对于 module、class、method 的声明不能像 C/Java 那样用 {},要用 ...end 来定义。 阅读全文 >>

走近 Ruby 的世界(五)

Ruby 单行注释用 #,没有 /* */ 这样的多行注释方式,但是可以用文档注释方式来进行多行注释:

=begin 注释描述
       中间的都是注释内容
=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 的约定优于配置,常量就是大写命名。 阅读全文 >>

iPhone中Png图片格式的研究

有时候我们看到一个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 阅读全文 >>

Objective-C 对 URL 进行 URLEncode 编码

在 iOS 程序访问 HTTP 资源时需要对 URL 进行 Encode,比如像拼出来的 http://unmi.cc?p1=%+&sd f&p2=中文,其中的中文、特殊符号&%和空格都必须进行转译才能正确访问。

在 Java、.net 和 JS 中都有相应的 encodeURL 方法可用,在 Objective-C 语言中,你可以试下

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc;

来对完整的 URL(带请求参数的)进行编码,比如执行下面的代码:

阅读全文 >>

走近 Ruby 的世界(四)

Ruby 解释器给我们提供了四个常用的命令行工具,ruby、irb、ri 和  gem。动态脚本语言的解释器类似工具的使用方法基本一致的,逐个来看下它们的用法:

1. ruby:脚本解释器,直接执行脚本或脚本文件

% ruby -e 'puts "hello world!"'
% ruby hello.rb

ruby 显示输出可以用三种方法:print、puts 和 p,print 和 puts 都会把操作对象的 to_s 返回值输出,只是 puts 会在输出内容没有换行时加上一个换行,有则和 print 是一样的。例如 puts "Hello World!" 就是 print "Hello World!\n",puts "Hello World!\n" 也是  print "Hello World!\n"。p 会调用对象的 inspect 方法进行输出,最后加不加换行与 puts 的规则是一样的。

2.    irb:(Interactive RuBy) 是个 Ruby 的交互命令行,可用来测试一些 Ruby 的特性,不过有 TextMate 那样的工具基本不会去用它。你还能在 irb 的 shell 下再次输入 irb 启动一个子 shell。 阅读全文 >>

NSNotificationCenter 的使用详解

通常我们在 iOS 中发生什么事件时该做什么是由 Delegate 实现的,例如 View 加载完后会触发 viewDidLoad。  Apple 还为我们提供了另一种通知响应方式,那就是 NSNotification,系统中(UIKeyboardDidShowNotification 等) 以及某些第三方组件(例如 ASIHTTPRequest 的 kReachabilityChangedNotification 等)。

NSNotificationCenter 较之于 Delegate 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信。NSNotificationCenter 的通信原理使用了观察者模式:

1. NSNotificationCenter 注册观察者对某个事件(以字符串命名)感兴趣,及该事件触发时该执行的 Selector 或 Block
2. NSNotificationCenter 在某个时机激发事件(以字符串命名)
3. 观察者在收到感兴趣的事件时,执行相应的 Selector 或 Block 阅读全文 >>