Tuesday, July 13

水银代码管理

这几天学习了Mercurial这个代码管理工具,一点心得记录下来。
首先是代码管理工具的选择,现在流行的主要是svn,git和Mercurial了。用了svn好几年了,不满还是很多的,不再一一细说,考虑换得话,就上网找资料看看大家的说法,这篇翻译文章《Git 與 Mercurial 的分析》写得不错,没什么好说的,跟着google走,准没错。这几篇文章值得细看《Mercurial - 分布式版本控制系统》《分布式版本控制系统——Mercurial》,《在Google Code上用 Mercurial 取代 Subversion 管理你的项目

我使用的是mac osx snowleopard,在这上面Mercurial的安装比较容易,但是也遇到一些挫折
1)安装,到官方网站下载安装包,安装之。
2) 安装MercurialEclipse, 今后就用Eclipse这个强大的GUI管理代码了,同时还可以兼顾svn和git
3)将我的svn库转换到Mercurial,参见攻略。这时候遇到了问题,见解决办法


有趣的障碍是,很多文章里说需要修改.hgrc这个文件,可是他在哪呢???,找遍硬盘也没有,其实自己建立一个叫.hgrc名字的文本文件就好了,放在/Users/yourname

刷DD-WRT成功,step by step

按照各位大王的暗示,一阵研究,在mac下刷DD-WRT成功
1,首先去  http://www.dd-wrt.com/site/support/router-database
输入自己的无线路由器的型号,我的是 whr-g54s,找到了相应的设备
看一下FLASH大小,我的是 4 MB,据说如果是2M,就要下载micro和mini版本,4M可以下载标准版,
标准版还有多个选择,什么usb,voip和vpn,我选择了 Standard Generic dd-wrt.v24_std_generic.bin,下载

2,恢复无线路由器的出厂状态,按住reset一会,据说30秒,我感觉5秒不到他就回复了

3,联网线,从路由器的lan口(注意不是wan口)到电脑,设置网卡IP,至192.168.11.2,mask255.255.255.0,router:192.168.11.1
,用http连上路由器,确认一下原厂管理界面,留恋一下

4,开两个terminal,一个ping 192.168.11.1按回车(mac的ping不像windows会只ping4,5次,它会一直ping下去), 另一个输入tftp -e 192.168.11.1,先不按回车

5,拔路由器电源,然后再接上,看ping的窗口,一旦发现ping通了,在另一个tftp窗口的窗口,立即按回车,然后粘贴下面的命令put dd-wrt.v24_std_generic.bin
这将下载好的firmware刷入路由器,结束以后会看到类似Sent 3710976 bytes in 13.2 seconds这样的文字


macbook-pro:g$ tftp -e 192.168.11.1
tftp> put dd-wrt.v24_std_generic.bin
Sent 3710976 bytes in 13.2 seconds
tftp>



6, 经过路由器检测灯的一顿闪,似乎成功了,将网卡IP改为192.168.1.2,router:192.168.1.1
http://192.168.1.1/
成功,看到了要求设置用户名和密码的窗口,找个好记的输入,成功
进入admin页面,改变language,改成简体中文,应用之,这一步 safari会出错,用firefox没问题

7,到无线页面,设置ssid,和安全密码,我选的安全模式是wpa personal,接好wan端的网线,打开浏览器(这时候firefox居然上不了网,关闭,重新打开),上网成功

8,测速:我这里下载速度 14.30Mbps (1.787MByte/sec),上传速度19.26Mbps (2.407MByte/sec)
直接用网线的速度是下载 22.11Mbps (2.763MByte/sec),56.63Mbps (7.079MByte/sec)


刷路由器之前最好也测试一下,我忘记了,所以没法比较到底哪里好


接下来怎么玩?听听大家的

[iphone]Code Sign error: Provisioning profile XXXX can't be found

如果你更新了profile,再编译iphone项目,发现下面的错误,那你无论如何clean也不会成功,那真是让人恼火阿







这时候,先copy上面那行出错信息,然后关闭这个项目,打开 finder到你的项目文件xxxx.xcodeproj上面按鼠标右键,选择Show Package Contents菜单,在新打开的finder的,找到project.pbxproj,使用一个文本edit打开它,用查找功能找到所有的有那行编码的位置,删除那一行,至少应该有两个地方







删除以后,保存这个 project.pbxproj 文件,用xcode重新打开你的项目,再编译一下试试

[iPhone]command /usr/bin/codesign failed with exit code 1

如果你在编译iPhone App的时候遇到command /usr/bin/codesign failed with exit code 1

可以确认以下的步骤,打开Keychain Access,找到你的开发者key,Get Info,看一下Access Control这个Tab,选择allow all applications to access this item。再重新编译一下,试一下,看看是否OK了


如何在Tab Bar Controller里面使用ABPersonViewController

如果你想将ABPersonViewController嵌入一个Tab Bar Controller里作为一个Tab,就像下图,该如何作呢?



Step By Step

1:制作xib的时候,不要在相应的tab里加入view controll,如下图:


2,创建自己的NavigationController,继承自UINavigationController,加入ABPersonViewControllerDelegate的protocol


@interface ProfileNavigationController : UINavigationController {


}


3,在自己的NavigationController里面相应 -(void)awakeFromNib,这个方法在xib被调入内存的时候,会被执行,在其中调用 initWithRootViewController,就可以将需要的ViewController显示出来。




-(void)awakeFromNib


-(void)awakeFromNib
{
NSLog(@"bundleLoader waked");
// Fetch the address book
ABAddressBookRef addressBook = ABAddressBookCreate();
// Search for the person named "Appleseed" in the address book
CFArrayRef people = ABAddressBookCopyPeopleWithName(addressBook, CFSTR("Appleseed"));
// Display "Appleseed" information if found in the address book
if ((people != nil) && (CFArrayGetCount(people) > 0))
{
ABRecordRef person = CFArrayGetValueAtIndex(people, 0);
ABPersonViewController personPicker = [[[ProfileViewController alloc] init] autorelease];
personPicker.personViewDelegate = self;
personPicker.displayedPerson = person;
// Allow users to edit the person’s information
personPicker.allowsEditing = YES;

[self initWithRootViewController:personPicker];
}
else
{
// Show an alert if "Appleseed" is not in Contacts
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Could not find Appleseed in the Contacts application"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
[alert show];
[alert release];
}
CFRelease(addressBook);
CFRelease(people);
}