2012年1月2日 星期一

Git Server via HTTP with Apache2 on Ubuntu 11.10

折磨我好久的Git Server安裝終於建立成功了,這淘氣的東西讓我這Linux生手搞了三個禮拜才安裝好...真是....嘰咕修~~~
趕緊把它寫下來,免得之後發生意外,又要三個禮拜去回想...

首先環境是 Ubumtu 11.10 on vmware station 8,network 用 NAT,設定port forwarding讓外部電腦可以經由Host的ip直接連結進去。

接下來是指令,開啟終端機,開始輸入吧!


#安裝apache2
apt-get install apache2
#安裝git
apt-get install git-core
#建立存放repository的base(位置可以自訂)
mkdir /var/git
#在repository底下建立新的專案
cd /var/git
mkdir MyNewProject.git
#初始化專案git設定
cd /var/git/MyNewProject.git
git --bare init
#修改權限(設給www-data <= apache用)
chown -R www-data.www-data .
#注意後面有一個小點 => .
#再次修改權限(不知道為什麼要設到777這麼大)
chmod 777 . -R
#注意有一個小點 => .
#更新git server info
git update-server-info
#安裝dav模組
a2enmod dav_fs
#編輯apache serve 的設定檔
gedit /etc/apache2/conf.d/git.conf
#填入下列內容,注意專案名稱與路徑的對應
#passwd.git 密碼檔案名稱可以自訂
Alias /MyNewProject.git /var/git/MyNewProject.git
<location /mynewproject.git>
DAV on
AuthType Basic
AuthName "Git"
AuthUserFile /etc/apache2/passwd.git
Require valid-user
</Location>
#新增帳號密碼
htpasswd -c /etc/apache2/passwd.git 帳號
#接著會要你輸入密碼
#重新起動apach
/etc/init.d/apache2 restart
最後用瀏覽器測試連線:http://your.domain.name.or.ip/MyNewProject.git(剛剛建立的專案資料夾)/HEAD
如果有跳出輸入帳號密碼的話,恭喜你!你成功安裝完成了!

2011年10月31日 星期一

AD網域認證發生錯誤:未知的錯誤 (0x80005000)

卡了我好久的 AD 網域讀取問題終於解決了,提供給有相同困擾的人。


AD讀取的程式碼(C#)
DirectoryEntry entry = new DirectoryEntry("LDAP://GOOGLE.COM.TW:389", "userName", "password");
entry.RefreshCache();

一直出現錯誤畫面:

解決的方法如下:
  1. 在 Windows Server 2003 中,userName不需要加 domain
  2. ladp路徑要大寫  <=== 卡了我一個多禮拜的兇手。

如果你是這樣而排除錯誤的話,留個言讓我知道一下吧!

2011年9月30日 星期五

手機程式開發與兼顧硬體能力

作者: iincho (世界的盡頭) 看板: Soft_Job
標題: Re: [請益] 手機程式開發與兼顧硬體能力
時間: Thu Sep 29 01:25:57 2011


 既然有人希望在下介紹怎麼看Android code,這裡就稍微分享一下心得,
 不敢說每個模組都精通,但是大方向抓是抓得出來的,
 不過我不喜歡吊書袋,所以想看到什麼design pattern之流的不要太期待。

 首先講書,Android目前關於系統面寫得最好的是底下這本:

 Android技術內幕:系統卷, 作者楊豐盛,簡體書。

 網路上找得到部分試閱,不過後面的章節沒前面寫得好,但光看第三章就划算,
 對binder的講解應該是目前市面上最好的。

 應該很多人看過韓超那本"深入淺出 Android 系統原理及開發要點",
 不過就我來看這兩本根本不是同一個檔次的東西。

 台灣出的基本上只能買高煥堂寫的,其他的不要碰。高先生對系統的理解算非常強,
 就是欠了點文彩有些可惜,不過寫的東西比那些搞技術傳教的好多了,至少觀念都是
 正確的。

2011年9月1日 星期四

Objective-C 的記憶體回收機制(下)

終於比較有空補完下集了!這一集主要想要分享Objective-C的直接存取與間接存取的差異,以及function return value 的 retain、release 時機。

首先先看下面一個很簡單的 student class:


student.h
@interface Student: NSObject {
    NSString *iName;
    NSString *iStudentID;
    int age;
}

@property(nonatomic,copy) NSString *iName;
@property(nonatomic,copy) NSString *iStudentID;
@property(nonatomic,assign)  int age;

@end

student.m
#import "student.h"
@implementation student
@synthesize iName,iStudentID,age;

- (void) dealloc {
    [iName release];
    [iStudentID release];

    [super dealloc];
}

@end

2011年8月28日 星期日

Objective-C 的記憶體回收機制(中)

在上一篇文章裡面談到了自己對物件記憶體的操作,難道就只有開發者會對物件做計數器(retainCount)的操作嗎?答案是否定!有一些 api 會自動對物件的 retainCount +1或是 -1,最常見的例子就是陣列的操作。例如:

NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity : 0];//array.retainCount = 1

NSString *str1 = [[NSString alloc] initWithString : @"A"];//str1.retainCount = 1
NSString *str2 = [[NSString alloc] initWithString : @"A"];//str2.retainCount = 1

[arr addObject : str1];//str1.retainCount = 2
[arr addObject : str2];//str2.retainCount = 2

[arr removeObject : str1];//str1.retainCount = 1
[arr release];//array.retainCount = 0;str2.retainCount = 1

//系統回收 array

[str1 release];//str1.retainCount = 0
[str2 release];//str2.retainCount = 0

//系統回收str1&str2