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

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

這陣子為了 iPhone 學了 Objectiv-C ,一直對他的記憶體管理機制頗有微詞(笑),什麼時候該釋放,什麼時候該保留,真的是一點頭緒都沒有!建議初學者先把 Apple 官方的關於記憶體回收的說明文件先讀過一遍。(網頁版PDF版),內容有空的話我再翻譯!

首先先解釋為什麼變數有時候要加星號(*),有時候又不加。這是因為在 C 與 C++,以及基於這兩種語言加以改良的 Objective-C ,星號(*)代表的意思是指向某個記憶體的指標(pointer), 而不加星號(*)表示是取值,例如:

int number = 0;//取值

char[] name = ['n','a','m','e'];
char *str = name;//取址