顯示具有 程式 標籤的文章。 顯示所有文章
顯示具有 程式 標籤的文章。 顯示所有文章

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月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;//取址

2011年7月28日 星期四

Android - MapView上面的圖片跟著縮放

昨天在ptt的AndroidDev板看到有鄉民在問怎麼讓MapView上面的圖片跟著縮放,想起之前也有做過類似的測試,就寫了這篇和大家分享。

首先先看到layout檔的排版:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <com.google.android.maps.MapView
  android:id="@+id/mView_Main"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:apiKey="你自己的key">
 </com.google.android.maps.MapView>
</LinearLayout>

很簡單的一個地圖畫面。

Objective-C 的 self

今天查被Apple reject的原因,剛好看到有關self的一些解釋,趕緊記下來免得忘記。

假設現在有個類別Test,裡面有一個NSData的成員。

@interface Test : NSObject {
    NSData *iData;
}

@property(nonatomic,retain) NSData *iData;

@end

當我們使用 self.NSData 的時候,就等同於呼叫編譯器幫我們自動產生的getter方法,retain + 1。
當我們使用 self.NSData = [[NSData alloc] init],就等同於呼叫setter的方法。

而編譯器產生的getter/setter就等同於自己寫的:

-(void) setIData : (NSData *) newData {
  if(iData != newData){
    [iData release];
    iData = [newData retain];
  }
}

-(NSData *) getIData {
  return iData;
}

另外,在dealloc時,就不要再用self了!

2011年7月15日 星期五

StringBuilder append null in Java and C# test

今天檢查了一下StringBuilder對於附加null的處理做了個小實驗。

Java:
import java.util.Calendar;

public class main {
 public static void main(String[] args) {
  testStringBuilder();
 }

 public static void testStringBuilder() {
  StringBuilder sBuilder = new StringBuilder();
  
  System.out.println("1. string of new StringBuilder()");
  if(sBuilder == null){
   System.out.println("string:[is null]");
  }else{
   System.out.println("result:string:[" + sBuilder + "],length:[" + sBuilder.length() + "]");
  }
  
  StringBuilder sBuilder2 = new StringBuilder("");
  
  System.out.println("2. string of new StringBuilder(\"\")");
  if(sBuilder2 == null){
   System.out.println("string:[is null]");
  }else{
   System.out.println("result:string:[" + sBuilder2 + "],length:[" + sBuilder2.length() + "]");
  }
  
  StringBuilder sBuilder3 = new StringBuilder();
  String nullString = null;
  sBuilder3.append(nullString);
  
  System.out.println("3. string of new StringBuilder() append null");
  if(sBuilder3 == null){
   System.out.println("string:[is null]");
  }else{
   System.out.println("result:string:[" + sBuilder3 + "],length:[" + sBuilder3.length() + "]");
  }
  
  StringBuilder sBuilder4 = new StringBuilder("");
  sBuilder4.append(nullString);
  
  System.out.println("4. string of new StringBuilder(\"\") append null");
  if(sBuilder4 == null){
   System.out.println("string:[is null]");
  }else{
   System.out.println("result:string:[" + sBuilder4 + "],length:[" + sBuilder4.length() + "]");
  }
 }

2011年3月8日 星期二

Rainmeter 0.14 中文化

首先先對莫名其妙轉址進來的人說聲抱歉,最近在整理檔案的時候,想起幾年前有做過這東西,就把他翻出來看看,發現每天都有固定一些流量,這讓我留也不是,不留也不是。如果我一刪檔案,就會讓所有連結的網站跟網誌連結掛掉,為了不造成他人的困擾,所以我就保留原本的轉址 - http://tericky.idv.st,但是連結改到這裡。這就是為什麼各位會莫名其妙的轉到這邊的原因了。

程式下載點(XuiteDropBox)

一開始先放上截至 2011/03/08的流量統計。
感謝這20872的訪客使用我這不才的中文化。

下面是當初寫的使用教學。