잊지 않겠습니다.

'분류 전체보기'에 해당되는 글 430건

  1. 2009.01.07 MBR-CAO 분산 프로그래밍
  2. 2009.01.07 MBR Object
  3. 2009.01.07 .NET Remoting
  4. 2009.01.07 .NET Framework 의 구성
  5. 2009.01.07 .NET Framework In Mono
  6. 2009.01.07 .NET Framework Naming Guide
  7. 2009.01.07 Visual Studio Setting
  8. 2009.01.07 MS Hyper-V 자료 조사
  9. 2009.01.07 프로그램 시리얼 키들..
  10. 2009.01.07 주인장입니다.
  • Singletone, SingleCell 과는 관계가 없다.
    • Client에서 상태를 가지고 있기 때문에, 그 상태를 보고 판단이 가능한 객체를 만들어주게 된다.
    • 단일 메소드 호출을 넘어 항상 살아있게 된다 

1. 서버 어셈블리

[Hard Cording]

RemotingConfiguration.RegisterActivatedServiceType(typeof(Object 이름));

 

[Config]

<configuration>
  <system.runtime.remoting>
    <application>
      <service>
        <activated type ="CarGeneralAsm.CarProvider, CarGeneralAsm"/>
      </service>
      <channels>
        <channel ref ="http" port ="32469"/>
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>

  

  

2. 클라이언트 어셈블리

[Hard Coding]

RemoteConfiguration.GetActivator(ObjectName, URI) <== WKO와 동일

  

[Config]

<configuration>
  <system.runtime.remoting>
    <application>
      <client displayName ="carClient" url ="http://localhost:32469">
        <activated type ="CarGeneralAsm.CarProvider, CarGeneralAsm"/>
      </client>
      <channels>
        <channel ref ="http"/>
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>

Posted by Y2K
,

MBR Object

.NET Framework 2009. 1. 7. 10:51
  • WKO (well known object)
    • 서버 응용프로그램 도매인에 의해서 수명이 직접 제어된다.
    • Client에서는 잘 알려진 문자열 이름을 통해서 이 원격 형식을 활성화 시켜준다.
    • 반드시 기본 생성자가 필요하다!!
    • 상태 기반 구성을 가진다.
      • singleton
        • 여러 client에서 요청을 받는 원격 형식의 instance를 하나만 생성한다.
        • 여러 client가 동시에 하나의 메소드를 호출하게 된다.
        • CLR에서 각각의 client의 호출을 새로운 Thread에 위치하게 해서 구현한다.(Thread atomic에 대해서 안전하지 못하다. 프로그래머의 책임)
      • singlecelll
        • 하나의 메소드가 호출될 때에만 존재하는 WKO 형식이다.
        • 단일 호출 객체는 언제나 무상태(statless) 객체이기 때문에 동시 접근에 훨씬 유리하다.
    • Method나 Property가 활성화 될 때에 WKO 객체가 생성되고, Method가 호출되게 된다.

object remoteObj = Activator.GetObject(/*잘 알려진 문자열 이름*/); -- WKO 선언, 생성되지는 않음

RemoteMessageObject simpleObj = (RemoteMessageObject) remoteObj;

Console.WriteLine(simpleObj.ReturnMessage()); -- Method가 수행되면서 WKO의 생성

    

  • CAO (client activated object)
    • Client에서 사용자 지정 생성자가 가능하다.
    • Client에서의 응용 프로그램 도매인에 의해서 제어되는 객체가 된다.
    • 기본 생성자 이외의 생성자로 생성 가능하다.
    • 상태를 갖는 객체가 된다. 따라서, Client에서의 전역변수로서의 객체 사용이 가능하다.
    • new 또는 Activator.GetObject로 호출될 때에 생성된다.
    • 시간에 따른 GC가 이루어진다.
    • Client에서의 객체 사용의 범위를 결정한다. 기본으로 5분동안의 Life cycle을 갖는다. 

클라이언트 활성 개체는 해당 개체가 마치 클라이언트에 대해 로컬인 것처럼 호출하는 응용 프로그램 도메인에서 수명을 제어하는 개체입니다. 클라이언트 활성화를 사용하는 경우, 클라이언트에서 서버 개체의 인스턴스를 만들려고 하면 서버에 대한 라운드트립이 발생하며, 서버에서 원격 개체를 만들 때 반환된 개체 참조(ObjRef)를 사용하여 클라이언트 프록시가 만들어집니다. 클라이언트에서 클라이언트 활성 형식의 인스턴스를 만들 때마다 해당 인스턴스는 임대가 만료되고 메모리가 재생될 때까지 해당 특정 클라이언트에서 해당 특정 참조만 서비스합니다. 호출하는 응용 프로그램 도메인에서 원격 형식의 새 인스턴스를 두 개 만드는 경우 각 클라이언트 참조에서는 참조가 반환된 서버 응용 프로그램 도메인에서 특정 인스턴스만 호출합니다.    

COM에서 클라이언트는 개체에 대한 참조를 메모리에 보유합니다. 마지막 클라이언트에서 마지막 참조를 해제하면 해당 개체는 자체를 삭제할 수 있습니다. 클라이언트 활성화를 사용하는 경우 클라이언트에서는 서버 개체의 수명을 동일하게 제어할 수 있지만, 참조를 유지하거나 서버 또는 클라이언트가 계속 존재하는지 확인하기 위해 지속적으로 Ping을 실행해야 하는 복잡함은 없습니다. 대신 클라이언트 활성 개체에서는 수명 임대를 사용하여 해당 개체가 계속 존재할 시간을 결정합니다. 클라이언트에서는 원격 개체를 만들 때 해당 개체가 존재할 기본 시간을 지정할 수 있습니다. 원격 개체는 이 기본 수명 제한에 도달하는 경우 클라이언트에 연결하여 해당 개체가 계속 존재해야 하는지 여부와 계속 존재해야 하는 경우에는 기본 수명을 얼마나 더 늘려야 하는지를 확인합니다. 클라이언트를 현재 사용할 수 없는 경우를 대비해 해당 개체가 가비지 수집되도록 표시되기 전에 서버 개체에서 클라이언트에 연결을 시도하면서 대기해야 하는 기본 시간도 지정됩니다. 클라이언트에서는 서버 응용 프로그램 도메인이 해제될 때까지 원격 개체가 재생되는 것을 효율적으로 방지하기 위해 기본 수명이 무기한으로 설정되도록 요청할 수도 있습니다. 이 클라이언트 활성 개체의 무기한 수명과 서버 활성 개체의 무기한 수명 사이의 차이점은 무기한 서버 활성 개체의 경우 해당 형식에 대한 모든 클라이언트 요청을 처리하는 반면 클라이언트 활성 인스턴스의 경우 해당 클라이언트와 해당 인스턴스를 만든 참조만 처리한다는 점입니다.

Posted by Y2K
,

.NET Remoting

.NET Framework 2009. 1. 7. 10:50

.NET Framework에서 응용프로그램 도매인은 System.AppDomain안에서 움직이는 논리적인 경계로서 나뉘게 된다.

이러한 논리적인 경계내에서 나뉘어진 응용프로그램간의 통신을 일컬여 .NET Remoting이라고 칭한다.

.NET Remoting은 다음과 같이 구성된다.

  1. 동일한 프로세스(같은 컴퓨터안에 있는) 두 응용 프로그램 도매인
  2. 동일한 머신의 개별 프로세스 안에 있는 두 응용 프로그램 도매인
  3. 서로 다른 머신의 개별 프로세스 안에 있는 두 응용 프로그램 도매인

        

.NET Remoting의 이용

System.Runtime.Remoting안에 선언된 형식을 주로 이용한다.각 AppDomain간의 통신은 Channel을 통해서 이루어지며, 이 Channel은 두가지 형식으로 되어 있다.

1) HttpChannel : HttpChannel Class 형식으로 표현되며, SOAP Formatter를 이용해서 데이터가 변환된다.

  • 데이터의 크기가 Binary Formatter에 비하여 크다.
  • 데이터가 방화벽에 막힐 수도 있다.

2) TcpChannel : TcpChannel Class 형식으로 표현되며, Binary Formatter를 이용해서 데이터가 변환된다.

  • 데이터가 크다.
  • 데이터가 방화벽에 막힐 염려가 적다.

2개 이상의 Channel을 같이 사용하는 경우에는 한 AppDomain에서의 Channel은 항시 다른 이름과 Port를 가지고 있어야지 된다. 

각 이름과 Port를 2개 이상 생성을 시켜서 Channel을 항상 다른 상태로 만들어야지 된다.

System.Collections.IDictionary prop = new System.Collections.Hashtable();
prop["name"] = "tcp1";
prop["port"] = "9113";
ChannelServices.RegisterChannel(new TcpChannel(prop, null, null));   

원격 객체의 종류

MBR(marshal by reference)
  • 호출자가 원격 객체에 대한 proxy를 받아준다.
  • 구현 : System.MarshalByRefObject class에서 파생된다.
MBV(marshal by value)
  • 호출자가 원격 객체의 객체 사본을 받는다. (Client copy본을 만들어준다.)
  • 구현 : Serializable 속성으로 구현한다.

Serial되지도 않고, System.MarshalByRefObject에서 상속되지도 않는 class는 만들어진 응용 프로그램 도매인 안에서만 활성화 되며, 사용될 수 있다. (Contextound type이 된다.)  

  • 서버 활성 개체는 필요할 때만 서버에서 만들어집니다. 즉, new 또는 Activator.GetObject를 호출하여 클라이언트 프록시를 만들 때가 아니라 클라이언트에서 해당 프록시에 대한 첫 번째 메서드를 호출할 때 만들어집니다. 자세한 내용은 서버 활성화를 참조하십시오.
  • Singleton 개체는 해당 개체에 대한 클라이언트의 수에 상관없이 항상 하나의 인스턴스만 있으며 기본 수명을 가지는 개체입니다.클라이언트에서는 수명 임대 시스템을 사용하여 Singleton 인스턴스의 수명에 관여합니다. 자세한 내용은수명 임대를 참조하십시오.
  • 개체를 SingleCall 개체로 구성하면 시스템에서는 클라이언트에서 메서드를 호출할 때마다 새 개체를 만듭니다. 클라이언트가 각 호출에서 새 인스턴스에 대한 참조를 얻기 때문에 SingleCall 형식은 수명 임대 시스템에 관여하지 않습니다.        

Singleton 형식은 한 번에 하나 이상의 인스턴스를 가질 수 없습니다. 하나의 인스턴스가 있는 경우 모든 클라이언트 요청은 해당 인스턴스에서 처리됩니다. 인스턴스가 없는 경우에는 서버에서 인스턴스를 만들며 모든 후속 클라이언트 요청은 이 인스턴스에서 처리됩니다. Singleton 형식에는 기본 수명이 연관되어 있지 않으므로 한 번에 하나 이상의 인스턴스를 사용할 수 없는 경우라도 클라이언트에서 항상 원격화할 수 있는 클래스의 동일한 인스턴스에 대한 참조를 받는 것은 아닙니다.

SingleCall 형식은 항상 클라이언트 요청마다 하나의 인스턴스를 가집니다. 다음 메서드 호출은 시스템에서 이전 인스턴스를 아직 재생하지 않은 경우에도 다른 서버 인스턴스에 의해 처리됩니다. SingleCall 형식은 수명 임대 시스템에 관여하지 않습니다.

Posted by Y2K
,

제목이 너무나도 거창한 제목이 되어버렸지만... 이런 제목 이외에는 적을 내용이 없어서 이런 제목으로 밖에 못적겠다. --;

  

d0037487_489d8a444c8b5.png 

 여기에서 3.5에서 구현된 LINQ, ADO.NET Entity Framework는 결국은 Data의 object화 라는 말로 표현할 수 있다.

MS가 이제는 시스템기반이 아닌 데이터를 어떻게 다루고, 그 데이터를 어떻게 하느냐에 대한 관심으로 넘어가고 있는 단적인 내용이 아닐까 하는 생각을 하게 만든다.

  

먼저, LINQ를 사용해보면서, MS에서 이야기하는 Data의 object화는 ruby on rails에서 나온 개념과 너무나도 유사한 것이 재미있다는 생각도 들고, ruby를 잠시 공부해보면서 이렇게 멋진 내용이 있다는 것에 대해서 감탄을 하고 있었는데. 결국은 MS에서 그대로 따라가는 것이 좋은것은 다들 좋다고 생각하는 것 같다.

  

그리고, 차기 버젼에서 나올 기술들은 둘다 "P"를 가지고 있는데... 

이는 둘다 Parallel의 약자이다.  

  

Task Parallel Library, Parallel Language Integrated Query 둘다 multi-processor 기반의 Library로, 기존 single-processor에서는 큰 성능향상이 나타나지 않음을 MS에서도 제시하고 있다. (“Parallel Performance: Optimize Managed Code For Multi-Core Machines: http://msdn2.microsoft.com/en-us/magazine/cc163340.aspx”)

  

그렇다하더라도.. 무언가 새로운 것은 계속 만들어져가고 있고, 그 새로운 것들을 이용한 막강한 기능은 계속해서 손에 쥐어지고 있다. 보다 더 나은 S/W를 만들기 위한 방법은 계속해서 제시되어가고 있는데... 왜 사람은 계속해서 오래된 생각만을 계속하게 되는 것일까.

  

과연 1+1이 2가 되는 것이 사람일까?  

Posted by Y2K
,

I can't write Hangule on linux system(openSUSE 10.3).

 

with mono 1.9.1(beta)

1) use C# 3.0 feature

2) can use LINQ.

3) can use System.Core like C# 3.5

4) can use visual IDE enviroment.

 

-> It's Excellant! T_T

 

Screenshot.png

: it's mono development.

it can check syntec like visual studio but can't check linq syntex. but it's very fast.

 

download mono-project vm.(VMWare Image)

http://www.go-mono.com/mono-downloads/download.html

Posted by Y2K
,

대부분의 경우에서 이름을 결정하는데는 파스칼 케이싱(Pascal casing)을 이용하여 변수의 대 소문자를 결정하길 권유한다. 파스칼 케이싱은 이름의 첫번째 문자가 항상 대문자이어야하는 법칙이다. 예를 들면 EmployeeSalary, ConfirmationDialog, PlaainTextEncoding 와 같다. 대 소문자를 결정하기 위해 사용하는 다른 규칙은 카멜 케이싱(camel casing)이다. 카멜케이싱은 단어의 첫번째 문자에 대문자를 사용하지 않는 것이다. 예를 들면 employeeSalary, confirmationDialog, plainTextEncoding와 같다. 카멜 케이싱은 다음 두가지 경우에 사용하자.

메소드에 전달되는 모든 매개변수의 이름은 카멜 케이싱이다.

public void RecordSale(string salesmanName, int quantity);

동일한 이름을 가지는 두 개의 항목을 구별하기 위해서도 카멜 케이싱을 사용한다. - 즉 프로퍼티와 필드를 구별할 때 사용한다.

private string employeeName;

public string EmployeeName

{

get  {    return employeeName;   }

}

 private 멤버에 대해서는 카멜 케이싱을 사용하고 다른 public 멤버나 protected 멤버에 대해서는 파스칼 케이싱을 사용한다.

   

  

이름 스타일

변수 이름을 지을때는 일관적인 스타일을 사용해야 한다. 예를 들어 클래스의 메소드 중 하나가 ShowConfirmationDialog()라는 이름을 가졌다면 다른 메소드의 이름은 ShowDialogWaring()이나 WarningDialogShow()가 되어서는 안된다. 다른 메소드의 이름은 ShowWarningDialog()가 되어야한다.

  

네임스페이스 이름

네임 스페이스 이름은 .NET이 공유 어셈블리 내의 객체이름을 구별하는 단 한가지 방법이다. <회사이름>.<기술이름>으로 시작하는 네임스페이스 이름을 권한다.

  

이름과 키워드

C#과 C++은 소문자 키워드를 사용한다. 그러나 VB.NET은 키워드가 많고 대소문자를 구별하지 않기 때문에 주의가 필요하다. VB.NET에서 호출할 코드를 사용한다면 VB.NET키워드를 사용하지 않도록 주의한다. (264개의 키워드 있슴)

  

프로퍼티와 메소드 사용하기

변수처럼 사용되는 것은 프로퍼티로 사용하자.

프로퍼티 값을 읽어들이는 데 많은 시간이 걸리면 안된다.

프로퍼티를 순서에 상관없이 설정할 수 있어야한다.

프로퍼티를 계속해서 읽어들여도 일정한 값이 나와야한다.

  

필드 사용하기

필드는 항상 private가 되어야한다. 상수나 읽기전용 필드는 public 이어도 좋다.


Pascal case

The first letter in the identifier and the first letter of each subsequent concatenated word are capitalized. You can use Pascal case for identifiers of three or more characters. For example:

BackColor

Camel case

The first letter of an identifier is lowercase and the first letter of each subsequent concatenated word is capitalized. For example:

backColor

Uppercase

All letters in the identifier are capitalized. Use this convention only for identifiers that consist of two or fewer letters. For example:

System.IOSystem.Web.UI
IdentifierCaseExample
Class Pascal AppDomain
Enum type Pascal ErrorLevel
Enum values Pascal FatalError
Event Pascal ValueChange
Exception class Pascal WebException
Note   Always ends with the suffix Exception.
Read-only Static field Pascal RedValue
Interface Pascal IDisposable
Note   Always begins with the prefix I.
Method Pascal ToString
Namespace Pascal System.Drawing
Parameter Camel typeName
Property Pascal BackColor
Protected instance field Camel redValue
Note   Rarely used. A property is preferable to using a protected instance field.
Public instance field Pascal RedValue
Note   Rarely used. A property is preferable to using a public instance field.

Class 명명법 : Pascal Case, 반드시 명사 사용

  • Property
    • Pascal Case
    • 명사 이용
  • Event
    • Pascal Case
    • public delegate void MouseEventHandler(object sender, MouseEventArgs e)
    • Event의 처리 대리자의 경우, Handler를 붙여서 나타낸다.
    • Event의 경우, 동사를 이용 발생하는 것을 표현
  •  Method
    • Pascal Case
    • 동사 이용
  •  Parameter
    • camel Case
    • 이름 자체에서 설명이 가능한 형태, 명사로 이용
  •  Field
    • Public으로 나타내는 경우에는 모두 Property를 이용한다.
    • camel Case
    • 예전의 '_'는 절대로 사용하지 않는다. <<-- 왜 바뀐거야??
Posted by Y2K
,

하얀색 바탕에 기본 셋팅이 눈에 잘 안들어와서..

여간해서는 셋팅을 완전히 바꿔서 사용한다.

 

특히 주로 사용하는 Resharper의 Rename 기능이 간간히 심각한 버그를 나타내는 것때문에 절대로 사용하지 않기 위해서..

CTRL+R *2 에 대한 Keyboard short cut을 변경해서 기본적으로 사용하는중.

 

폰트는 Envy Code R VS를 Size를 10상태로 사용하는 것이 가장 깔끔.

폰트 다운로드는 다음 URL에서..

http://damieng.com/blog/2008/05/26/e...eased#comments

 

Code Page

CodePage.png

 

Web Page

WebCode.png

 

Xml Code (Web.Config)

xmlCode.png

Posted by Y2K
,

web page 돌아다니다가 간단한 자료 조사 


http://www.windowsnetworking.com/art...irtual-PC.html

: Sysprep을 이용한 virtual pc의 배포 방법 제시

http://msdn.microsoft.com/en-us/libr...92(VS.85).aspx
: Hyper-V WMI document information

http://blogs.msdn.com/virtual_pc_guy...h-hyper-v.aspx
: Hyper-V PowerShell & VBScript create sample api

http://blogs.msdn.com/mikester/archi...-in-winpe.aspx
: Using the Hyper-V integration components in WinPE

Posted by Y2K
,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

주인장입니다.

시끌벅적 2009. 1. 7. 10:34

Name : YoungKwan Yoon

Job : Programmer

Company : www.hostway.co.kr

Language : C, C++, VB, C#, Python, Ruby

My favorite language : C#

 

1단계 : 초보자란 한가지 언어의 기본적인 기능들을 사용할수 있는 프로그래머를 말한다.
초보자는 클래스와 루틴, 루프, 조건문을 작성할수 있으며 해당언어의 많은 기능을 사용할수 있다.

2단계 : 입문 초보 단계를 넘어온 중급수준의 프로그래머는 여러언어의 기본적인 기능들을 사용할 수 있으며 적어도 한가지의 언어를 능숙하게 다룬다.

3단계 : 유능한 프로그래머는 한가지의 언어나 환경 또는 둘 다 에 전문적인 기술을 가지고 있다.
이 단계에 있는 프로그래머는 J2EE에 있는 모든 복잡한 단계를 알고 있던가 C++ Reference를 암기하고 있을 것이다.
이 단계에 있는 프로그래머는 회사에서 중요한 위치에 있게 되는데, 많은 개발자들이 이 단계를 넘어서질 못한다.

4단계 : 리더는 3단계 프로그래머에 대한 전문적인 지식을 가지고 있다. 그리고 프로그래밍에서 컴퓨터와의 의사소통은 오직 15% 정도이며 85%가 사람과의 의사소통임을 알고 있다. 일반적인 프로그래머는 30%만 혼자서 일한다. 심지어 그보다 더 적은 시간을 컴퓨터와 작업하는데 보낸다. 전문가는 기계보다는 사람을 위해서 코드를 작성한다. 진정한 전문가 수준의 프로그래머는 보석처럼 명확한 코드를 작성하며 문서화한다. 그들은 한줄의 주석으로 표현하여 이해할 수 있는 코드의 로직을 재작성하느라 머리를 쓰지 않는다.

 

Know what your library is hiding from you and why you chose it. 


Posted by Y2K
,