2011年8月17日

記錄文章:一次向svn中增加所有新增文件 svn add all new files

以下摘自:《卓有成效的程序員》之自動化

        我經常會一次往Subversion裡添加一批文件。在使用命令行做這件事時,你必須指定所有想要添加的文件名。如果文件不多的話這還不算太糟糕,但如果 你要添加20個文件,那就費事了。當然你也可以用通配符,但這樣一來就可能匹配到已經在版本控制之下的文件(這不會有什麼損害,只不過會輸出一堆錯誤信 息,可能會跟別的錯誤信息混淆)。為瞭解決這個問題,我寫了一行簡單的bash命令:
  svn st | grep '^\?' | tr '^\?' ' ' | sed 's/[ ]*//' | sed 's/[ ]/\\ /g' | xargs svn add
  表4.3詳細解釋了這一行命令。
 
  我大概花了15分鐘寫出這條命令,然後用了它成百上千次。
      ****************************************************
      這個自動化過程已經很完美了,一個「簡單」的shell腳本,這是一個權威編寫並使用了百上千次的腳本。
然後我在一個博客中看到這樣一個腳本:
svn st|awk '{print $2}'|xargs svn add。
乍看之下覺得更加精煉,仔細看下就會發現這個腳本沒有區分文件狀態。所以完善了以下這個腳本:

  1. svn st | awk '{if ( $1 == "?") { print $2}}' | xargs svn add  

這樣,以後我可能使用這個腳本成百上千次。(當然這個腳本也沒有考慮過濾掉不要添加的文件)

當你第三次做一件事情的時候,就應該考慮將其工具化,自動化!

2011年5月3日

(轉載紀錄)让 iPhone App 以 https 方式连接网络


http://www.cocoachina.com/iphonedev/sdk/2010/1112/2339.html

让 iPhone App 以 https 方式连接网络

时间: 2010-11-12 17:20
问题 你是否也想让自己的 iPhone 应用程序连接 https 服务器呢?下面我就介绍一下其使用方法。 通常使用 Objective-C 的 NSURLConnection 连接有证明书的 https 服务器时会出现验证错误,我们可
问题
    你是否也想让自己的 iPhone 应用程序连接 https 服务器呢?下面我就介绍一下其使用方法。
    通常使用 Objective-C 的 NSURLConnection 连接有证明书的 https 服务器时会出现验证错误,我们可以使用私有API — setAllowsAnyHTTPSCertificate:forHost 来解决这个问题。如果是 Cocoa 的应用程序应该是没有什么问题,但是用在 iPhone 上,很可能过不了 App Store 的审查。
    所以这里我们使用 libcurl 来完成在 iphone 上连接 https 服务器。
准备
编译 openssl
    连接 https 的前提是要有 OpenSSL。你可以参考 这里 来为 iPhone 编译 OpenSSL 静态库。最终得到下面两个静态库文件。
libcrypto.a
libssl.a
编译 libcurl
    接下来我们下载/编译 libcurl。下载展开后,按照下面配置(根据实际情况更改你的SDK目录,版本)。
./configure --prefix=$HOME/tmp/iphonelib/curl \
    --host=arm-apple-darwin --disable-shared --with-random=/dev/urandom \
    CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
    CFLAGS="-arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -I$HOME/tmp/iphonelib/openssl/include -L$HOME/tmp/iphonelib/openssl/lib" \
    CPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp \
    AR=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar
    如果最后输出下面的内容,说明可以编译支持 https 的 libcurl 了。
SSL support:     enabled (OpenSSL)
    接下来
make
make install
    编译结果输出到 ~/tmp/iphonelib/curl/lib 下的 libcurl.a。
使用
添加到工程中
    如下图所示,将编译好的静态库拖到你的工程中:
    另外,由于 openssl 中使用了 zlib,所以还需要在工程中加入链接开关。(该库被包含在iPhone中,不需要重新编译)
    如下图所示,在连接中追加 -lz。
    最后,如下图添加编译所需的头文件路径。
    比如,编译 libcurl 时的头文件的路径 ~/tmp/iphonelib/curl/include 。
代码例子
    下来,让我们看看在程序中使用 libcurl 的例子。下面的例子在 AppDelegate.m 中实现。
#import "AppDelegate.h"
#include

@implementation AppDelegate

-(void)applicationDidFinishLaunching:(UIApplication *)application {
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch
    [window makeKeyAndVisible];

    CURL *curl;
    CURLcode res;

    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "https://twitter.com/");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);

        res = curl_easy_perform(curl);
        if (0 != res) {
            fprintf(stderr, "curl error: %d\n", res);
        }

        curl_easy_cleanup(curl);
    }
}

-(void)dealloc {
    [window release];
    [super dealloc];
}

@end
    编译运行,可以用调试工具得到取得的html,如下图。
在模拟器中使用 libcurl
    上面介绍的都是在设备上运行的例子,如果要在模拟器上使用,由于处理器结构不一样,需要重新编译 openssl 和 curl 静态库。编译的时候,只要将 SDK 的路径由 iPhoneOS.platform ⇒ iPhoneSimulator.platform,编译开关 -arch armv6 ⇒ -arch i386 就可以了。只是编译的文件名最好和iphone上用的区别开来,如下所示:
libcrypto_simulator.a
libssl_simulator.a
libcurl_simulator.a
    又或者不改变库的名称,而是增加新的编译目标。

2011年3月30日

UML 基本图示[轉貼]

UML 基本图示
2009-07-11 17:58
UML 基本图速查---类图. 对象图. 用例图 .参与者. 依赖关系. 泛化/继承关系. 关联.....
UML 类图. 对象图. 接口图. 用例图 .包,参与者. 依赖关系. 泛化/继承关系. 关联关系 .聚合/聚集关系. 实现关系 组合关系。

结构元素

结构元素包括,类,对象,接口,用例,参与者。
类图

类图图示
     类图是UML中最基本的元素了吧?根据OO的思想“天下一切皆对象”,而类是对象的抽象。 
     左侧图示为一个类图。顶端“ClassName”表示类名 
     中间部分为该类的属性,其中分别表示为可访问性,属性名,以及属性的数据类型。 
     第三部分为该类的方法,包括方法的可访问性,方法名,方法的参数以及方法的返回值。 
     需要说明的是:
             “#”表示protected 
             “+”表示Public
             “-”表示private
                                         “i”表示internal

对象图图示
对象图
右侧图示为一对象图,该对象为类className类的一个实例对象
该图第一部分说明了该对象为className的一个实例,第二部分指定了该实例的属性值。该图指定的是一个特殊的实例的对象,如果要代表className的所有的对象可省略掉对象名,即为“:ClassName”。
接口

类图图示
左图为一个比较简单的接口事例图示。与类图差不多,该图示分为三部分,第一部分为接口名,为了更明确的标明其“接口”的身份通常以“I”开头。第二部分为属性,第三部分为方法。
用例与参与者
下图为一简单的用例视图。小人表示参与者,而椭圆表示的是用例。

用例与参与者图示

包图图示
右侧图示为一包图,该图示为一名称为Utility的工具包。
包用来组织类,被包含在包里的类一般通过如Utility::StrUtility的形式来反应该类的路径。

关系

     关系元素包括了聚集,组成,实现,继承,依赖,关联等。
关联

关联图示
     关联是类之间的联系,如篮球队员与球队之间的关联(下图所示)。其中,关联两边的"employee"和“employer”标示了两者之间的关系,而数字表示两者的关系的限制,是关联两者之间的多重性。通常有“*”(表示所有,不限),“1”(表示有且仅有一个),“0...”(表示0个或者多个),“0,1”(表示0个或者一个),“n...m”(表示n到m个都可以),“m...*”(表示至少m个)。
     在关联中有一种叫“限定关联”,还有一种谓之自身关联。另外,对象之间的关联就没那么复杂,只是将类的关联实例化而已。
依赖

依赖图示
依赖是表示一个类中使用了另外一个类,最常用的依赖是在类A的方法中使用了类B,那么A依赖B。如上图所示。
继承

继承图示
这里的继承是指子类对父类的关系。理解面向对象的各位对继承应该不陌生。啥也不说,看看图好了。
继承使用空心箭头表示继承的方向,用实线连接。
实现

实现图示
实现指的是类对接口的实现。接口实现的表示与继承的表示差不多,只是将实线变为了虚线。
聚集

聚集图示
一个类可能有几个部分类聚集在一起而成。如:电脑主机由CPU,主板,光驱....等组成。类与类之间是“整体-部分”的关系。
组合

组成图示
组成是强类型的聚集,每个部分体只能属于一个整体。如桌子由桌腿和桌面组成。
----------------------------------------------------------------------------------------------------------------------------------
以上为UML的基本元素的一些表示法,主要目的是供查阅。