천객만래 [千客萬來] (It has an interminable succession of visitors)

프로그래밍 언어 하나만이 아닌 여러개가 아직 가능하다

개발이 가능하다. 파트 부분 개발은 혼자서 설계부터 개발까지 가능하다.
요즘 트렌드 분야와 거리가 가깝지 않아서 안타깝지만
아직은 배워서 수행하는데 문제가 없다.



내가 좋아하는 편의점 커피는 늘 곁에 있다.

Posted by SB패밀리

[개발/VC++] error C3861: '_bstr_t' : 식별자를 찾을 수 없습니다.




_bstr_t 데이터 타입을 사용하면 다음과 같은 컴파일 에러에 직면할 수 있다.

error C3861: '_bstr_t' : 식별자를 찾을 수 없습니다.
or
error C3861: '_bstr_t' : undeclared identifier

이 경우 다음과 같이 헤더를 인클루드시켜주면 된다.

#include <comutil.h>

위의 include만 추가하면 다음과 같은 링크 에러가 나오는데

xxx.obj : error LNK2019: unresolved external symbol "void __stdcall _com_issue_error(long)" (?_com_issue_error@@YGXJ@Z) referenced in function "public: __thiscall _bstr_t::_bstr_t(wchar_t const *)" (??0_bstr_t@@QAE@PB_W@Z)

이 경우 다음과 같이 설정을 변경해줌으로써 해결할 수 있다.

#pragma comment(lib, "comsuppw.lib")
#include <comutil.h>

거나

Properties -> Configuration Properties -> Linker -> Input -> Additional Dependencies

Debug 모드 시 다음을 추가한다.
comsuppwd.lib
Release 모드 시 다음을 추가한다.
comsuppw.lib

Posted by SB패밀리

[개발/이론] 악성코드 스파이웨어 분류



http://labs.no-ad.co.kr/net/SpywareDB.aspx

 

• 트래킹쿠키
2개 이상의 다른 사이트에서 공유하는 쿠키입니다. 쿠키는 사이트마다 생성하여 접속 정보를 저장하는 파일인데, 여러 사이트에서 쿠키를 공유하게 되면 사용자의 정보가 유출될 우려가 있습니다. 
• 광고 표시
프로그램 실행 중에 프로그램의 화면 내부 혹은 팝업으로 광고를 노출합니다 
• 로봇
시스템 외부에서 사용자 허락 없이 시스템을 조작할 수 있도록 하는 프로그램입니다. 
• 수집기
개인 정보 혹은 관련된 파일을 수집하는 프로그램입니다. 
• 사기
사용자의 시스템에 대하여 의도적으로 잘못된 정보를 표시하는 프로그램입니다. 
• 제거방해
해당 프로그램을 삭제할 때 불편한 과정을 거쳐야 하거나 제거할 수 없게 하는 프로그램입니다. 
• 비정상적 설치경로
프로그램 제작사의 공식 홈페이지나 포털사이트의 공개자료실 및 패키지형태가 아닌 개인 홈페이지, 동호회 등의 게시판에서 ActiveX등의 형식으로 설치되는 프로그램입니다. 
• 실행방해
다른 정상적인 프로그램의 실행을 방해하는 프로그램입니다. 
• 백도어
외부에서 시스템 내부로 접근할 수 있는 통로를 생성하는 프로그램입니다. 이 통로를 통하여 사용자의 파일을 유출하거나 시스템의 권한을 획득할 가능성이 있습니다. 
• BHO
인터넷 익스플로러의 기능을 추가/확장하는데 사용되는 기술인 Browser Helper Objects의 약자입니다. 하지만 이 기능은 원치 않는 광고를 노출하는 등의 목적으로 이용되기도 합니다. 
• 번들러
다른 프로그램을 포함하여 배포되는 프로그램입니다. 포함되는 프로그램은 설치과정에서 함께 설치되거나, 프로그램 운용중에 설치됩니다. 
• 시스템 설정 변경
윈도우의 시스템 설정을 변경하는 프로그램입니다. 
• IE 설정 변경
인터넷 익스플로러의 설정을 변경하는 프로그램입니다. 
• 다이얼러
인터넷 ISP 혹은 사설 BBS등에 사용자 확인 없이 접속하는 프로그램입니다. 
• 다운로더
다른 프로그램을 네트워크를 통해 다운로드/설치하는 프로그램입니다. 
• 드로퍼
실행 파일 내부에 보관된 악성프로그램을 파일 실행 시 특정한 다른 곳에 복사하는 프로그램입니다. 
• 가로채기
시스템의 설정을 변경하여 사용자의 요청을 가로채어 자신의 목적대로 수행하도록 유도하는 프로그램입니다. 대표적인 예로 강제적인 사이트 포워딩 행위가 있습니다. 
• 후킹
다른 프로그램의 수행을 가로채는(후킹하는) 특성을 가진 프로그램입니다. 
• 설치
설치 기능을 가진 모든 프로그램을 지칭합니다. 
• 키로거
설치 기능을 가진 모든 프로그램을 지칭합니다. 
• 키워드 변경
검색 키워드를 초기화하거나 변경하는 프로그램입니다. 
• 메일러
메일 전송을 가진 프로그램입니다. 
• 루트킷
관리자 권한이나 기타 특수한 접근 권한을 획득하는데 사용되는 프로그램입니다. 
• 툴바
인터넷 익스플로러의 추가기능으로 설치되는 도구모음 프로그램입니다. 
• 트로이 목마
정상적인 프로그램으로 가장하여 정보 수집 등의 기능을 수행하는 프로그램입니다. 
• 바이러스
정상적인 파일 안에 자신을 숨겨 파일이 실행될 때 시스템의 데이터를 변조, 파괴하며 다른 정상적인 파일에 자신을 복제해 넣는 프로그램입니다. 
• 웜
네트워크를 통해 스스로 확산되는 프로그램입니다. 바이러스와 달리 숙주가 되는 파일이 필요하지 않으며, 스스로 실행됩니다. 
• 팝업 표시
사용자에게 불편을 초래할 수 있는 별도의 창을 띄우는 프로그램입니다. 
• 시작페이지 변경
인터넷 익스플로러의 시작 페이지를 초기화하거나 변경하는 프로그램입니다. 
• 시작프로그램 변경
윈도우의 시작 프로그램 항목을 변경하거나 추가하는 프로그램입니다. 
• 로컬 코드 실행
로컬 코드를 실행하는 프로그램입니다. 
• 스파이웨어 제거
스파이웨어 제거 프로그램입니다. 
• 변장 프로그램
다른 프로그램으로 가장하여 특수한 목적을 수행하는 프로그램입니다. Trojan과 비교하여 악의적인 목적을 가지지는 않으나 사용자에게 불편을 초래할 가능성이 있는 프로그램입니다. 
• 즐겨찾기 변경
웹브라우저에 즐겨찾기를 추가하거나 변경하는 프로그램입니다. 
• 바로가기 생성
바탕화면에 바로가기를 생성하는 프로그램입니다. 
• 해킹툴
시스템의 정보를 유출하거나 변조/파괴하기 위해 사용하는 프로그램이며 일반적으로 시스템의 보안 취약점을 이용합니다. 




Posted by SB패밀리

그레이웨어 분류기준 

 
http://labs.no-ad.co.kr/net/GraywareCriteria.aspx
 
1 개요
 
이 문서는 그레이웨어에 대한 (주)노애드의 자체 정의 및 기준을 기술하고 있습니다.
이 문서에 기술된 정의 및 기준은 노애드 및 노애드2+에 내장된 검사/치료 데이터베이스의 기반이 됩니다.
 
 
 
2 정의
 
그레이웨어는 악성프로그램과는 다르게 사용자의 동의를 얻어 설치되며 사용자의 컴퓨터에 위협적인 행동을 하지는 않지만 사용자에게 불편을 야기할 수 있는 프로그램입니다.
다음 절에서 기술한 행위를 수행하는 프로그램은 그레이웨어로 인정할 수 있습니다.

그레이웨어로 분류된 프로그램의 제작사는 해당 프로그램이 아래에 기술된 행위를 더 이상 수행하지 않는다는 증거자료를 첨부하여 ㈜노애드에 이의를 제기할 수 있으며 ㈜노애드에서는 해당 프로그램에 대해 3~6개월 동안 해당 행위가 반복되지 않음을 확인한 후에 노애드 및 노애드2+의 그레이웨어 데이터베이스에서 해당 프로그램을 삭제합니다.
 
 
 
3 인정 기준
 
프로그램의 이름을 명확하게 알리지 않거나 프로그램의 기능에 대하여 프로그램 배포 사이트 혹은 설치관리자를 통하여 사용자에게 명확하게 주지시키지 않는 행위
웹브라우저 주소표시줄의 기능을 변경하는 행위.

사용자가 쉽게 구분할 수 없는 웹브라우저의 기본 주소표시줄과 유사한 형태의 주소표시줄을 설치하는 행위

프로그램 실행 중에 해당 프로그램창 내부가 아닌 곳에 광고를 노출하는 행위.

사용자 동의 없이 바탕화면에 바로가기, 즐겨찾기를 추가하는 행위.

사용자가 의도하지 않은 물품을 구매하거나, 의도하지 않은 판매자에게 구매하도록 유도하는 행위.

사용자에게 웹사이트 이용에 반드시 필요하지 않은 해당 프로그램의 설치를 요구하는 행위.

프로그램 실행 중에 프로그램의 실행여부를 확인할 수 없게 하는 행위(작업표시줄, 트레이아이콘, 프로그램창 등).

프로그램 제거 과정에서 프로그램 제거를 취소하도록 유도하거나 협박하는 행위.

사용자의 승인 없이 시스템 시작과 동시에 실행되는 프로그램 목록(레지시트리, 시작프로그램, 기타 모든 목록)에 해당 프로그램을 등록시키는 행위 
 
 

Posted by SB패밀리

[javascript] 남녀 표준체중알아보기


20070327




<SCRIPT LANGUAGE="JAVASCRIPT">
function Man_Weight(h)
{
     c=(h-100)*0.9
     return c;
}
function Woman_Weight(h)
{
    c=(h-100)*0.85
    return c;
}
function calculate_Weight(w, c)
{
    d=w/c*100
    return d;
}    
function error(form)
{
       if (form.w.value==null||form.w.value.length==0 || form.h.value==null||form.h.value.length==0)
       {
          alert("측정할 정보를 입력하지 않았습니다.");
          return false;
       }
          return true;
}
function ResultCal(form)
{
var sexis=form.type.value;//폼에서 type 항목의 값으로 성별 구분

      if (error(form))
      {
       if(sexis==1)
       {
          c=Math.round(Man_Weight(form.h.value));
       }
       else if(sexis==2)
       {
          c=Math.round(Woman_Weight(form.h.value));
        }
        form.c.value=c;
        fat=Math.round(calculate_Weight(form.w.value, c));
         if(fat>=120)
         {
           form.doctor.value="비만이십니다. 시간나실때 마다 운동을 즐거운 맘으로 하세요";        
         }
         else if(fat>=90 && fat<120)
        {    
          form.doctor.value="건강한 표준 체중이십니다. 건강은 건강할때 지켜야 합니다.";
        }
         else if(fat>0 && fat<90)
        {
          form.doctor.value="표준체중에 미달입니다. 가벼운 운동과 함께 맛있는 음식많이 섭취하세요";
       }
       }
      return;
}
function re(form)
{
    form.w.value = "";
    form.h.value = "";
    form.c.value = "";
    form.doctor.value = "";
}
</SCRIPT>
<!--여기까지의 스크립트를 <head>와 </head>태그 사이에 넣으세요-->
<FORM NAME="test" method=get>  
남성일 경우는 1을  여성일 경우는 2 를 입력하세요<br>
<INPUT TYPE="text" NAME="type" VALUE="1" size="1">
신장<input type=TEXT name=h  size=5 >cm
몸무게<input type=TEXT name=w  size=5 >kg
<input type="BUTTON"  value="측정결과"  onClick="ResultCal(this.form)" name="BUTTON">
<input type="BUTTON"  value="다시입력"  onClick="re(this.form)" name="BUTTON"><br>
귀하의 이상적인 평균체중은
<input type=TEXT name=c size=5>kg
<br>
*처방
<br>
<textarea name="doctor" cols=50 rows=5 wrap=on>
Posted by SB패밀리

[delphi] IP주소 유효성체크


20070326



function TForm1.IsValidIPAddress(strIP: String): Boolean;
var
TempList: TStringList;
i: Integer;
nTemp: Integer;
begin
Result := False;
TempList := TStringList.Create;

ExtractStrings(['.'], [], PAnsiChar(strIP), TempList);
if TempList.Count = 4 then
begin
   for i := 0 to 3 do
   begin
     nTemp := StrToIntDef(TempList[i], -1);
     if (nTemp < 0) or (nTemp > 255) then
     begin
       break;
     end;
   end;
   Result := True;
end;

TempList.Free;
end;


Posted by SB패밀리

[개발] 프로그램 진척도 보고 방법



http://blog.empas.com/eosao1973/18198761

프로젝트 진척도 측정에 있어 가장 믿지 못할 수치가 몇 %완료라는 것이다. 개발자들이나 기획자 혹은 디자이너들이 보통 몇 %를 완료했다고 보고하는데, 측정 기준이 없어 과연 그 수치가 어떤 의미를 가지는지 알지 못할 때가 많다. 

필자는 다음과 같은 측정 기준을 제시하고 주간보고서 및 월간보고서에 업무 단위 당 진척율을 기록하게 한다. 본 기준은 웹 프로젝트를 기준으로 함을 밝혀 둔다.

 

1. 문서 

 40%: 문서 작성 완료 

 60%: 프로젝트 팀 리뷰 후 

 80%: 고객 리뷰 후 

 100%: 고객의 승인 후 

 2. 디자인 

 60%: 디자인 완료 

 80%: HTML 코딩 완료 

 100%: 프로그램과 페이지 연결 완료 



3. 프로그램 진척도 보고 방법

 

 20%: 내부 클래스 및 클래스 구조 완료

 40%: 코딩 완료 (컴파일 완료)

 60%: 모듈 테스트 완료 (실행 완료)

 80%: HTML과 연동 완료 (뷰 완료)

 100%: 시스템 테스팅 완료 (검수완료)

 

위의 기준으로 10% 혹은 39%와 같은 애매한 진척도는 없고, 무조건 위의 기준으로만 진척율을 표시하게 한다. 그러나 전체적인 진척도를 측정하기 위해서는 프로그램 혹은 디자인 전체를 대상으로 진척도를 측정해야 하는데 이는 다음과 같이 측정한다. 

 예) 개발되어야 할 모듈이 10개이고, 이중 4개가 코딩이 완료되었고 6개가 모듈 테이트가 완료되었으면 ((4개 X 40%)+(2개 X 60%))/10= 28%의 전체 진도율을 보인다. 
  
 물론 프로젝트 전체 진도율을 측정하기 위해서는 WBS에 나타나는 모든 업무 단위를 위와 같은 측정 기준으로 작성하여 합한 것이 전체 진도율을 나타내게 된다. 




Posted by SB패밀리

DRM(Digital Rights Management)

2003.04.11



http://www.etimesi.com/news/detail.html?id=200212160145<강호갑 파수닷컴 상무> 
 88 성균관대 전자공학 석사 
 91-2000 삼성 SDS 정보기술연구소 책임연구원 
 2000-현재 파수닷컴 CTO 
  
 디지털 기술의 발전에 힘입어 아날로그 콘텐츠들이 생성 단계에서부터 디지털로 저장·관리되고 있다. 
 하지만 이 디지털 정보는 신속하게 배포되고 정보 변경이 용이하다는 특성 때문에 불법복제 및 위·변조 등 각종 보안 위협에 쉽게 노출돼 있다. 이는 양질의 콘텐츠 생산을 저해할 뿐 아니라 기업 생존에까지 위협을 줄 수 있다. 
 때문에 네트워크단에서 외부사용자의 불법침입을 차단하는 방화벽이나 IDS 솔루션, PKI기반 암호화 솔루션, PC의 매체 제어를 통한 PC보안 솔루션 등 디지털 정보를 안전하게 보호하기 위해 많은 기술들이 사용되고 있으나 정보 자체에 대한 근본적인 보안대책은 되지 못한다. 접근제어 위주의 보안대책과 함께 콘텐츠의 사용권한 제어 및 통제를 지속적으로 보호·관리할 수 있는 새로운 기술이 필요한 것이다.

DRM의 정의=이에 대한 해법이 DRM(Digital Rights Management)이다.

 
 DRM을 한마디로 말하기는 어렵지만 디지털 정보의 신뢰성 있는 유통환경을 제공하는 유일한 솔루션이라는 것이 공통된 해석이다. 
 DRM은 유저·콘텐츠·퍼미션·컨디션으로 구성되며 각 요소들은 상호 연관관계를 갖는다. 
 콘텐츠는 지적자산의 가치가 있는 정보 단위이며, 허가되지 않은 사용자로부터 보호해야 할 대상이다. 유저는 부여된 퍼미션과 컨디션에 따라 콘텐츠를 이용할 주체로 콘텐츠의 생산자·배포자·사용자가 될 수 있으며, 콘텐츠의 이용권리는 콘텐츠별로 정해진 퍼미션에 의해 결정된다. 컨디션은 퍼미션이 수행되기 위한 요구조건 및 제한요소를 포함하고 있다. 
 즉 DRM은 콘텐츠의 권리표현이 시스템적으로 처리 가능하도록 기술하고, 사용자는 명시된 권리 범위 내에서 콘텐츠의 이용을 강제적으로 통제받을 수 있게 함으로써 콘텐츠의 권리를 지속적으로 보호·관리할 수 있는 기술이다. 
 DRM 기술은 콘텐츠에 대한 지속적인 보호가 가능하고 다양한 사용규칙을 적용할 수 있어야 한다. 또 보호하고자 하는 디지털 자산은 다양한 파일포맷 형태로 존재하기 때문에 이를 일관된 방법으로 보호하고 처리할 수 있는 환경을 제공해야 한다. DRM이 적용된 콘텐츠일지라도 기존의 디지털 정보가 유통되던 배포 및 이용 방식을 그대로 수용할 수 있어야 하며 DRM의 기술적 보호조치는 사용자에게 불편을 주어서는 안된다. 
 DRM을 구성하는 시스템 요소는 그림1과 같이 크게 보호대상인 콘텐츠를 메타데이터와 함께 배포 가능한 단위로 패키징하는 패키저와 이렇게 배포된 콘텐츠를 사용자의 플랫폼에서 콘텐츠의 이용권한을 통제하는 DRM 컨트롤러, 콘텐츠에 대한 배포 정책 및 라이선스를 발급·관리하는 클리어링 하우스로 구분할 수 있다. 이와 같은 아키텍처 모듈을 만족하는 DRM 플랫폼을 개발하기 위한 대표적인 핵심기술들은 다음과 같다. 


 △암호화 기술(Encryption) 
 △패키저(Packager)=패키저는 보호 대상인 콘텐츠를 암호화해서 콘텐츠의 식별번호 및 메타데이터 정보와 함께 시큐어 컨테이너로 패키징하는 과정을 수행한다. 
 △시큐어 컨테이너(Secure Container)=저작권 보호대상인 원본 콘텐츠를 안전하게 유통하기 위해서 사용되는 전자적 보안장치로 다양한 콘텐츠 포맷 및 메타데이터의 효율적 관리를 위한 기능성과 여러 가지 채널 및 전송방식으로 배포될 수 있도록 배포 용이성을 보장한다. 
 △콘텐츠 식별관리체계(Identification)=디지털 콘텐츠의 식별체계는 디지털 콘텐츠로 하여금 유일한 식별자를 갖도록 하며, 콘텐츠의 유통과정에서 권리 소유자의 결정 및 권리 표현을 연계하는 등 많은 애플리케이션에서 중요한 역할을 담당한다. 
 △메타데이터(Metadata) 
 △사용규칙(Usage Rule)=디지털 콘텐츠에 대한 권리를 제어하기 위해서는 어떤 사용자가 어떠한 콘텐츠에 대해 어떤 권한과 조건으로 이용할 수 있는지 정의할 수 있어야 한다. 또 이렇게 정의된 권리가 컴퓨터에 의해서 처리될 수 있도록 기계가독형 언어로의 표현이 가능해야 한다. 사용규칙은 다양한 비즈니스 환경에 따라 권리의 정의 및 표현이 달라질 수 있는데 이를 지원하기 위해서는 권리표현의 다양성·확장성·유연성이 충분히 보장돼야 한다. 
 △사용권한 정책관리(Policy Management)=콘텐츠에 대한 사용권한은 콘텐츠를 배포하고 사용권한을 관리하는 도메인의 정책에 의해 결정된다. 다양한 비즈니스 도메인과 모델의 지원을 위해 정책은 자유롭게 설정할 수 있어야 하며, 이를 지원할 정책관리시스템은 유연하고 확장성 있는 구조를 제공해야 한다. 
 △탬퍼링 방지기술(Tampering Resistance)=콘텐츠의 보안성을 높이기 위해서 우선적으로 고려해야 할 분야는 암호화 기술의 견고성과 클라이언트 프로그램의 탬퍼링 방지대책이다. 소스 레벨에서 스크램블 코드를 삽입하는 방식과 운용체계에서 크래킹 시도를 탐지·차단하는 방식, 그리고 위장모듈을 가장한 크래킹 시도를 차단하기 위한 탬퍼 프루핑 방식 등 다양한 탬퍼링 방지기술이 적용된다. 
 △사용내역 모니터링 기술(Usage Reporting)=콘텐츠가 적절하게 사용되고 있는지, 저작권이 적절하게 보호되고 있는지를 파악하기 위해서 콘텐츠 사용내역이 충분히 모니터링돼야 한다. 여기서 수집된 내역정보는 콘텐츠의 거래내역을 증명하거나 정보의 불법유통 사실이 탐지됐을 때 콘텐츠의 이동경로를 추적할 수 있는 정보로 활용된다. 

 ◇DRM의 응용 도메인=DRM 플랫폼은 디지털 형태로 존재하는 지적자산의 보호 및 관리를 위해 그림2와 같이 다양한 응용 도메인에서 활용될 수 있다. 
 DRM이 가장 먼저 적용된 응용 도메인은 디지털 콘텐츠의 상거래 분야로 디지털뮤직·동영상·이미지·e북·만화, 그리고 기타 부가정보서비스 등 디지털 콘텐츠에 대한 불법사용 방지 목적용이다. DRM 기술이 콘텐츠 유통 도메인에 적용됨에 따라 콘텐츠 제공업자는 페이 투 유즈(Pay-to-Use), 프리뷰 비포 퍼처스(Preview-before-Purchase), 서브스크라이브(Subscribe) 등 다양한 마케팅 정책을 수행할 수 있게 됐다. 또 사용자 권한에 따라 뷰/플레이·프린트·에디트·세이브·트랜스퍼 등 세분화된 콘텐츠 이용 통제가 가능하다. 
 디지털 콘텐츠 상거래 분야에 이어 DRM은 기업 및 국가 주요 기관에서 생산·관리하는 중요 기밀문서 보안에도 적용되고 있다. 
 DRM은 보호 대상이 되는 문서 및 도면 등 각종 디지털 지적자산에 대해 허가되지 않은 사용자는 문서를 열어볼 수 없도록 할 뿐만 아니라 허가된 사용자에 한해서도 권한별 세분화된 사용권한 제어, 문서 사용내역에 대한 추적, 배포된 문서의 폐기, 퇴사자의 사용권한 박탈 등 다양한 보안기능을 제공함으로써 기밀문서에 대한 근본적인 보안대책을 수립할 수 있다. 

 ◇DRM 표준화 활동=초기의 DRM 시장은 DRM 기술 제공업체에 의해 주도됨에 따라 콘텐츠의 보호범위가 해당 DRM 업체의 기술을 적용한 콘텐츠에만 국한됐다. 
 이 때문에 사용자는 동일한 콘텐츠임에도 불구하고 어떤 DRM 기술을 적용했느냐에 따라 해당 업체의 전용뷰어 및 관련 프로그램들을 설치해야 하는 불편함을 감수해야 했다. 
 아마존이나 반센노블과 같은 온라인서점 사이트에서 볼 수 있듯이 각 업체들은 포맷간 상호호환성이 보장되지 않기 때문에 여러 가지의 포맷을 모두 준비하고 사용자들에 이의 이용을 유도해야 한다. 
 이런 문제점들을 해결하기 위해 MPEG-21, TV애니타임, AAP, OeBF, W3C, XrML, DOI 등 국제표준화단체 및 기구에서 DRM 표준화를 추진중이다. 국제표준화단체에서는 국제적으로 통용될 수 있는 DRM 기술사양의 개발과 DRM 플랫폼간의 상호호환성 보장을 위한 표준기술 개발에 주력하고 있다. 
 국제표준화기구들을 활동 분야별로 나누면 △DRM 플랫폼의 표준사양 개발분야=MPEG-21, TV애니타임, AAP, OeBF, OMA △식별체계의 표준화 기술개발 분야=DOI, URI, MPEG-21 DII △권리표현기술 개발분야=XrML, ODRL, XMCL, MPEG-21 RDD/REL △지적자산의 메타데이터 정보관리 기술분야=INDECS, ONIX, 더블린 코어 등으로 구분된다. 
 DRM 기술 표준화를 위해 많은 국제표준화 활동들이 진행되고 있지만 가장 적극적으로 표준화 활동을 수행하는 곳은 MPEG-21이다. MPEG-21은 다양한 종류의 디지털 콘텐츠를 서비스가 가능한 총체적인 멀티미디어 프레임워크의 사양을 도출하는 것을 목표로 ISO/IEC 산하의 MPEG 워킹그룹에서 2000년 6월에 착수해 2005년 국제표준안 제정을 완료한다는 방침을 정해 놓고 표준화 작업을 진행중이다. 

 ◇DRM의 전망=DRM이 상용화된 것은 2000년 초반으로 불과 3년 전 일이다. 그러나 짧은 기간이었음에도 불구하고 DRM 기술은 다양한 분야에 적용됐을 뿐만 아니라 적지 않은 디지털 라이프의 패러다임 변화에 영향을 미치고 있다. 
 DRM은 현재의 콘텐츠 유통 도메인이나 기업의 문서보안 도메인 외에 다양한 응용 도메인에서 활용되고 DRM 기술은 장기적으로 다음과 같은 방향으로 발전할 것으로 전망된다. 
 첫째 벤더 및 특정 기관에 의해 분산돼 개발되던 각종 기술들이 표준화돼 유기적으로 통합된 플랫폼으로 발전할 것이다. 즉, 벤더의 DRM 플랫폼과 식별체계, 메타데이터, PKI, 파일포맷 등이 상호호환성을 갖도록 기술적 표준안이 마련되고, 이를 통해 디지털 콘텐츠의 글로벌 유통이 가능한 시기가 도래할 것이다. 이러한 글로벌 유통 플랫폼은 MPEG-21, TV애니타임, W3C 등과 같은 국제표준기구에 의해 주도적으로 추진되겠지만 WMT를 앞세워 결국 de-facto 표준을 노리는 마이크로소프트 등 특정 도메인에서 치열한 시장경쟁을 거치고 생존한 업체들의 de-facto 표준화가 가속화·활성화될 것이다. 
 둘째 유무선 통신기술이 발전함에 따라 디지털 콘텐츠의 이용환경은 유무선 구분이 모호해질 것이다. 또 현재의 PC위주의 콘텐츠 이용환경도 PDA, 태블릿PC, e북 디바이스, 모바일폰 등 다양한 기종의 하드웨어 플랫폼에서 이용될 것이다. 따라서 DRM은 이러한 유비쿼터스 환경에서 디지털 콘텐츠의 투명한 접속 및 이용, 콘텐츠 사용권리의 자유로운 이동 등 사용편리성이 충분히 보장되는 방향으로 발전할 것이다. 
 셋째 DRM 기술은 운용체계에 기본사양으로 포함될 것이다. 현재도 마이크로소프트는 최근에 발표되는 운용체계에 DRM을 기본적으로 내장해 배포하고 있는데 이런 현상은 DRM의 글로벌 표준사양이 정립됨에 따라 유닉스·리눅스를 비롯한 다른 운용체계에도 적용될 것으로 전망된다. 
 넷째 디지털의 유통구조가 대형화·글로벌화됨에 따라 이를 체계적으로 관리하고 투명한 유통 환경을 지원하기 위한 클리어링하우스센터가 구축될 것이다. 클리어링하우스센터는 글로벌 유통망을 대상으로 콘텐츠의 권한통제 관리, 권리계약 이행 감시, 정산 등의 업무를 수행하게 된다.







Posted by SB패밀리

GD를 이용한 통계 그래프


20050227_gd.zip 압축을 풀어서 index.html를 실행하면 됩니다.
필요한 이미지와 폰트파일도 함께있습니다.
폰트파일을 못찾는 에러가 나는 경우 폰트파일의 위치를 절대경로로 수정해 주세요.
버전은 PHP5, GD2.0.28 입니다. GD버전이 낮은 경우 이미지가 선명하게 나오지 않더군요.

세로 막대 그래프
<?php
//클레스 파일
include "graph_class.php";//기본클레스
include "drawColumn.php";//막대그래프클레스

//입력되는 데이터로 디비에서 불러와 처리해도 된다.
$arr_data=array(60,82,103,34,75,126,137,68,119,170,91,52,24,79,99);

//새로운 클래스를 만들어 호출 (막대그래프)
$mydrawColumn=new drawColumn;
$mydrawColumn->data = $arr_data;
$mydrawColumn->runDraw();
?>

가로 라인 그래프
<?php
//클레스 파일
include "graph_class.php";//기본클레스
include "drawLinegraph.php";//꺽은선그래프클레스

//입력되는 데이터로 디비에서 불러와 처리해도 된다.
$arr_data=array(60,82,103,34,75,126,137,68,119,170,91,52,24,79,99);

//새로운 클래스를 만들어 호출 (꺽은선그래프)
$mydrawLinegraph=new drawLinegraph;
$mydrawLinegraph->data = $arr_data;
$mydrawLinegraph->typebg = 2;//배경을 점선으로 한다.
$mydrawLinegraph->runDraw();
?>


세로 막대 그래프
<?php
//클레스 파일
include "graph_class.php";
include "drawColumn.php";

//입력되는 데이터로 디비에서 불러와 처리해도 된다.
$arr_data=array(60,82,103,34,75,126,137,68,119,170,91,52,24,79,99);

//새로운 클래스를 만들어 호출 (막대그래프)
$mydrawColumn=new drawColumn;
$mydrawColumn->data = $arr_data;
$mydrawColumn->typesize = 2;//이미지크기를 중간사이즈로 설정
$mydrawColumn->runDraw();
?>



20050227_gd.zip




Posted by SB패밀리





기능이 제한된 프리웨어.. (상용임)
=================================================================================

무료로 사용가능한 기능

- javascript의 print와 같은 기능(프린트 대화창)

- page setup 호출

- print preview 미리보기 호출

- header/footer/marings /portrait 설정

- 프레임 지정 프린트

- 프린터 고르기 없이 직접 프린트


* 자바스크립트에 넣으시고..

function ThisWindowsPrint() {
with ( factory.printing ) 

header = ''; 
footer = ''; 
portrait = true; // true 세로출력 , false 가로출력
leftMargin = 0; 
rightMargin = 0; 
topMargin = 0; 
bottomMargin = 0; 
//printing.SetMarginMeasure(1); 
//printing.printBackground = true  //배경 및 이미지 인쇄

Print(true, window) // 첫번째 인자 : 대화상자표시여부 , 두번째인자 : 출력될 프레임
}
window.close();
}

* html 에 넣으시고...

<Object id='factory' viewastext style='display:none' classid='clsid:1663ed61-23eb-11d2-b92f-008048fdd814' codebase='http://www.meadroid.com/scriptx/ScriptX.cab#Version=6,1,432,1'>
</Object>


* 인쇄버튼 만드시고.. input으로 ... 레이어 만드시고 하셔도 되고요.. 
* 인쇄시 인쇄버튼이 나오면 안되니깐 클릭시 레이어 hidden 시키고 ThisWindowsPrint() 호출;;;

OnClick='ThisWindowsPrint()'

※ 딴지 - 공개용모듈이라 그런지 ActiveX가 죽지 않는 현상이 이따금 발생하여,
프로그램 에러가 발생입니다. 

파일은 여기서

MeadCo ScriptX 컴포넌트 사용 1. MeadCo 웹사이트에서 ScriptX.Cab을 다운 http://www.meadroid.com/scriptx/sxdownload.asp

 

------------------------------------

새페이지를 띄우지 않고 출력하는 방법

 

<HTML>
 <HEAD>
  <title>풀리백출력</title>
  <OBJECT id="factory" style="DISPLAY: none" codeBase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=6,1,429,14"
   classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext>
  </OBJECT>
  <script defer>
  {
  factory.printing.header = "";   // Header에 들어갈 문장
  factory.printing.footer = "";   // true 면 가로인쇄, false 면 세로 인쇄
  factory.printing.portrait = false;
  factory.printing.leftMargin = 0.4;   // 왼쪽 여백 사이즈
  factory.printing.topMargin =0.2; // 위 여백 사이즈
  factory.printing.rightMargin = 0.0;   // 오른쪽 여백 사이즈
  factory.printing.bottomMargin = 0.0;  // 아래 여백 사이즈
  //factory.printing.SetMarginMeasure(1); 
  // factory.printing.printBackground = true  //배경 및 이미지 인쇄
  }
  </script>
  <script>
 function printDiv () {
 if (document.all && window.print) {
  window.onbeforeprint = beforeDivs;
  window.onafterprint = afterDivs;
  //window.print();
  factory.printing.Print(true);
  }
 }
 function beforeDivs () {
 if (document.all) {
  objContents.style.display = 'none';
  objSelection.innerHTML = document.all['lblPrint'].innerHTML;
 }
 }
 function afterDivs () {
  if (document.all) {
   objContents.style.display = 'block';
   objSelection.innerHTML = "";
  }
 }

function Preview(){
 factory.printing.leftMargin = 0.4; // 왼쪽 여백 사이즈
 factory.printing.topMargin =0.2; // 위 여백 사이즈
 factory.printing.rightMargin = 0.0;  // 오른쪽 여백 사이즈
 factory.printing.bottomMargin = 0.0; // 아래 여백 사이즈

 factory.printing.portrait = false;
 factory.printing.Preview();
 
 }
  </script>
  <STYLE TYPE="text/css"> 
 .break { PAGE-BREAK-AFTER: always } 
  </STYLE>
 </HEAD>
<body>

...

<table style='Z-INDEX: 100; POSITION: absolute' align='center'>
     <TR>
      <TD align="center">
       <IMG style="CURSOR: hand" onclick='javascript:printDiv()' alt="프린트" src="../../image/print.gif">
       <IMG style="CURSOR: hand" onclick="javascript:self.close()" alt="창닫기" src="../../image/winclose.gif">
       <IMG style="CURSOR: hand" onclick="javascript:Preview()" src="../../image/btn_printt.gif"
        alt="프린터 설정">
      </TD>
     </TR>
    </table>
   </DIV>
   <DIV id="objSelection"><FONT face="굴림"></FONT></DIV>
</body>
</HTML>



Meadroid_ScriptX.zip


Posted by SB패밀리

SHGetFolderPath  윈도우즈 특수 폴더 구하기







다음은 특수 폴더 목록 샘플입니다.

 

Folder Name

Folder Path

CSIDL

CSIDL Name

Application Data

C:\Documents and Settings\Administrator\Application Data

0x1a

CSIDL_APPDATA

CD Burning

C:\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\CD Burning

0x3b

CSIDL_CDBURN_AREA

Common Administrative Tools

C:\Documents and Settings\All Users\Start Menu\Programs\Administrative Tools

0x2f

CSIDL_COMMON_ADMINTOOLS

Common Application Data

C:\Documents and Settings\All Users\Application Data

0x23

CSIDL_COMMON_APPDATA

Common Desktop

C:\Documents and Settings\All Users\Desktop

0x19

CSIDL_COMMON_DESKTOPDIRECTORY

Common Documents

C:\Documents and Settings\All Users\Documents

0x2e

CSIDL_COMMON_DOCUMENTS

Common Favorites

C:\Documents and Settings\All Users\Favorites

0x1f

CSIDL_COMMON_FAVORITES

Common Music

C:\Documents and Settings\All Users\Documents\My Music

0x35

CSIDL_COMMON_MUSIC

Common Pictures

C:\Documents and Settings\All Users\Documents\My Pictures

0x36

CSIDL_COMMON_PICTURES

Common Start Menu

C:\Documents and Settings\All Users\Start Menu

0x16

CSIDL_COMMON_STARTMENU

Common Start Menu Programs

C:\Documents and Settings\All Users\Start Menu\Programs

0x17

CSIDL_COMMON_PROGRAMS

Common Startup

C:\Documents and Settings\All Users\Start Menu\Programs\Startup

0x18

CSIDL_COMMON_STARTUP

Common Templates

C:\Documents and Settings\All Users\Templates

0x2d

CSIDL_COMMON_TEMPLATES

Common Video

C:\Documents and Settings\All Users\Documents\My Videos

0x37

CSIDL_COMMON_VIDEO

Cookies

C:\Documents and Settings\Administrator\Cookies

0x21

CSIDL_COOKIES

Desktop

C:\Documents and Settings\Administrator\Desktop

0x10

CSIDL_DESKTOPDIRECTORY

Favorites

C:\Documents and Settings\Administrator\Favorites

0x06

CSIDL_FAVORITES

Fonts

C:\WINDOWS\Fonts

0x14

CSIDL_FONTS

History

C:\Documents and Settings\Administrator\Local Settings\History

0x22

CSIDL_HISTORY

Local Application Data

C:\Documents and Settings\Administrator\Local Settings\Application Data

0x1c

CSIDL_LOCAL_APPDATA

My Documents

C:\Documents and Settings\Administrator\My Documents

0x05

CSIDL_PERSONAL

My Music

C:\Documents and Settings\Administrator\My Documents\My Music

0x0d

CSIDL_MYMUSIC

My Pictures

C:\Documents and Settings\Administrator\My Documents\My Pictures

0x27

CSIDL_MYPICTURES

NetHood

C:\Documents and Settings\Administrator\NetHood

0x13

CSIDL_NETHOOD

PrintHood

C:\Documents and Settings\Administrator\PrintHood

0x1b

CSIDL_PRINTHOOD

Profile Folder

C:\Documents and Settings\Administrator

0x28

CSIDL_PROFILE

Program Files

C:\Program Files

0x26

CSIDL_PROGRAM_FILES

Program Files - Common

C:\Program Files\Common Files

0x2b

CSIDL_PROGRAM_FILES_COMMON

Recent

C:\Documents and Settings\Administrator\Recent

0x08

CSIDL_RECENT

Send To

C:\Documents and Settings\Administrator\SendTo

0x09

CSIDL_SENDTO

Start Menu

C:\Documents and Settings\Administrator\Start Menu

0x0b

CSIDL_STARTMENU

Start Menu Programs

C:\Documents and Settings\Administrator\Start Menu\Programs

0x02

CSIDL_PROGRAMS

Startup

C:\Documents and Settings\Administrator\Start Menu\Programs\Startup

0x07

CSIDL_STARTUP

System Directory

C:\WINDOWS\system32

0x25

CSIDL_SYSTEM

Templates

C:\Documents and Settings\Administrator\Templates

0x15

CSIDL_TEMPLATES

Temporary Folder

C:\Documents and Settings\Administrator\Local Settings\Temp\

Temporary Internet Files

C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files

0x20

CSIDL_INTERNET_CACHE

Windows Directory

C:\WINDOWS

0x24

CSIDL_WINDOWS

 

명령 프롬프트 상태에서 명령어로 구동 시, 다음 목록의 스위치(switch)를 추가할 수 있습니다.

/stext <Filename>

Save the list of all special folders into a regular text file.

/stab <Filename>

Save the list of all special folders into a tab-delimited text file.

/scomma <Filename>

Save the list of all special folders into a comma-delimited text file (csv).

/stabular <Filename>

Save the list of all special folders into a tabular text file.

/shtml <Filename>

Save the list of all special folders into HTML file (Horizontal).

/sverhtml <Filename>

Save the list of all special folders into HTML file (Vertical).

/sxml <Filename>

Save the list of all special folders to XML file.

/sort <column>

This command-line option can be used with other save options for sorting by the desired column. If you don't specify this option, the list is sorted according to the last sort that you made from the user interface. The <column> parameter can specify the column index (0 for the first column, 1 for the second column, and so on) or the name of the column, like "Folder Name" and "Folder Path". You can specify the '~' prefix character (e.g: "~Folder Name") if you want to sort in descending order. You can put multiple /sort in the command-line if you want to sort by multiple columns.

Examples: 
SpecialFoldersView.exe /shtml "f:\temp\folders.html" /sort 2 /sort ~1 
SpecialFoldersView.exe /shtml "f:\temp\folders.html" /sort "Type" /sort "Name"

/nosort

When you specify this command-line option, the list will be saved without any sorting.





Posted by SB패밀리

[개발/VC++] ATL Window Class 종류



ATL 은 COM을 지원하기 위해 디자인 되었지만 윈도우를 모델링 하는 클래스 영역도 포함한다고

한다. 그리고 ActiveX 같은 윈도우를 가지는 객체도 만들수 있다.

아래는 ATL 에서의 주요 윈도우 클래스들이다.

 

 CWindow - 윈도우를 조작하기 위한 Win32 APIs의 작은 랩퍼 클래스이다.

                    윈도우 핸들과 HWND 를 CWindow 로 변환하는 오퍼레이터를 포함한다.

                    그러므로 윈도우 핸들을 필요로하는 어떤 함수에 CWindow 오브젝트를

                    넘길수 있다.

 CWindowImpl - 이미 존재하는 윈도우를 서브클래싱 하거나 이미 존재하는 클래스를

                    수퍼클래싱 하거나 , 윈도우 베이스의 새로운 윈도우를 만들때

                    사용한다.
 CContainedWindow - 다른 클래스의 메세지 맵을 위한 메세지 경로를 구현한 윈도우

                    클래스이다. 이 클래스는 하나의 클래스에 메세지 처리를 집중하는 것을 허락한다.

 CAxWindow - 컨트롤을 만들거나 존재 하는 컨트롤에 붙임으로써 ActiveX control

                    호스트 윈도우 구현을 지원한다. 
 CDialogImpl - 모달이나 모달리스 다이얼로스를 구현한다. IDOK 나 IDCANCEL 같은

                    기본 메세지 경로를 지원한다.
 CSimpleDialog - 단순 모달 다이얼로그를 주어진 리소스 ID로 구현한다. IDOK나 IDCANCEL과

                    같은 기본 메세지 맵을 기지고 있다.
CAxDialogImpl - CDialogImpl 과 같이 모달과 모달리스를 를 구현하는 베이스 클래스로 사용되

                    며 상속된 클래스에 기본 메세지 맵을 제공한다.
                    추가로 ActiveX 컨트롤을 지원한다. ATL 오브젝트 위저드에서 CAxDialogImpl에

                    상속된 클래스를 프로젝트에 넣은 것을 지원한다.

CWndClassInfo -  새로운 윈도우 클래스의 정보를 보관한다.

                    특별히 WNDCLASSEX를 캡슐화한다.

CWndTraits and CWinTraitsOR - ATL 윈도우 오브젝트의 스타일을 캡슐화한다





Posted by SB패밀리

[javascript] 배경 고정/스크롤 하기



배경 고정/스크롤 하기

- background-image : 배경이미지를 설정합니다.
-- url() : 해당 문서의 URL을 설정합니다.
  ex)background-image : url("image/patten.gif");
- background-attachment : 배경이미지의 고정/스크롤 유무를 설정합니다.
-- fixed : 배경이미지를 고정시킵니다.
-- scroll : 배경이미지를 스크롤시킵니다. 초기값입니다.
- background-repeat : 배경이미지의 반복유무를 설정합니다.
-- no-repeat : 반복하지 않습니다.
-- repeat : 바둑판식으로 반복합니다.
-- repeat-x : 가로식으로 반복합니다.
-- repeat-y : 세로식으로 반복합니다.





----------------------------------------------------------------------------------------



<html>
<head>

<style type="text/css">
<!--



p {
border : 2px #808060 solid;
font-weight : bold;
font-size : 9pt;
color : #d08050;
width : 140px;
height : 120px;
overflow : scroll;
background-image : url("http://cafefiles.naver.net/data23/2006/5/27/279/drop.jpg");
background-repeat : repeat; 
}



p.fixed { background-attachment : fixed; }



-->
</style>

</head>
<body>



<table cellpadding=10>

<tr>


<td>
<p>
움직여 봅시다.
<br><br><br><br><br><br>
배경이 움직입니다.
<br><br><br><br><br><br>
</p>
</td>



<td>
<p class="fixed">
움직여 봅시다.
<br><br><br><br><br><br>
배경이<br>
고정되었습니다.
<br><br><br><br><br><br>
</p>
</td>


</tr>

</table>



</body>
</html>



출처: 인터넷


Posted by SB패밀리



박스안 리스트설정

- list-style-position : 글머리의 위치를 지정합니다.
-- outside : 외곽선 바깥쪽에 글머리를 배치합니다.
-- inside : 외곽선 안쪽에 글머리를 배치합니다.
- list-style-image : 항목 앞에 이미지를 넣습니다.
-- url() : 해당이미지의 url을 넣습니다.
-- none : 이미지를 표시하지 않습니다.





----------------------------------------------------------------------------------------



<html>
<head>
<style type="text/css">
<!--



ul#dot_border {
background-color : wihite;
margin : 10px;
border : 3px #40b0e0 dotted;
padding : 10px;
width : 130px;
}



ul {
list-style-position : inside;
list-style-image : url("http://cafefiles.naver.net/data15/2006/4/25/151/ico_star.gif");
color : green;
}



-->
</style>
</head>
<body>



<ul id="dot_border">
<li> clipboard
<li> cellbox
<li> workbook
<li> package
</ul>



</body>
</html>

Posted by SB패밀리

LPSTR LPCTSTR 위험 CStrgin -> char 으로 변환




(LPSTR)(LPCTSTR)csTest은 위험하다.!!
-. 유니코드를 고려하지 않았을뿐 아니라
-. 위험하게 내부데이터를 접근합니다.
 
CString strPP;
char * chNN = (LPSTR)(LPCSTR)strPP;
이렇게 해서 chNN을 CString의 포인터로 가져 옵니다.

(LPSTR)(LPCSTR)strPP 이 부분 에서 이유는 MSDN을 찾아보시면 아시겠지만 CString은 const char * 으로 만 받을수 있답니다. 
그래서 (LPCTSTR)strPP 이런 형식으로도 사용합니다. 물론 const char *으로 return되겠죠.. 다시 char *을 필요하신다면  
char * chNN = (char *)(LPCTSTR)strPP; 이런 식으로도 사용합니다
 
char *pstr = (LPSTR)(LPCTSTR)str;        이 줄은 UNICODE인경우 
    char *pstr = (char *) (const wchar_t *) str;    입니다.
특히 wchar_t를 본래데이터형으로 보지 않을 경우
    char *pstr = (char *)(const unsigned short *)str;   입니다..
 
유니코드를 고려하지 않는다고 하더라도, CString이 제공하는 것은 const 가 붙은 형변환 밖에 없는데,
이걸 const 를 억지로 빼버리고는 마치 접근해서 고쳐도 되는 것처럼 보이게 되므로 
잘못사용하면 오류를 일으키며. 프로그램이 뻗을수도 있습니다.
 
const 변환은 받는 쪽에서 안고친다고 보고 CString이 자기 내부 메모리주소를 살짝 보여주는 건데.. 
그걸 char로 바꾸고 쓰려고 하면 당연히 에러가 발생 하겠죠...
보통 이런 문제는 char[50] 에서 처럼 .. "특정 위치의 글자를 바로 접근할 수 있냐..?"란 의문에서 생기는데 
이 문제는 CString만으로도 충분합니다.

CString이 operator[] 를 제공하고 있습니다.. operator를 이용 하면 됩니다.. 
str[23] 이렇게 마치 char[] 처럼 사용하실수 있습니다. 
물론 이때도 배열의 길이를 넘어서는 접근은 피해야 합니다.
C/C++의 배열이 제공못하는 길이를 CString은 GetLength()형태로 제공하니 얼마나 편합니까 .
출처:이상 데브피아
 
 
"이하" 파란 생각~
CString csTest = "사나이로 태어나서 할일은 사랑하기";
char* cTest = (LPSTR)(LPCTSTR)csTest;
AfxMessageBox(cTest);
 
즉, 위와 같이 무리한 형변환 보다는 CString의 Operator의 GetBuffer()을 사용해서 가지고오면 더욱 효율적입니다.
char* cTest;
CString csTest = "사나이로 태어나서 할일은 사랑하기";
cTest = csTest.GetBuffer(0);                //GetBuffer(0): csTest가 가지고 있는 문자열의 만큼 가지고 온다는 의미
AfxMessageBox(cTest);
 







Posted by SB패밀리

CString ↔ char 변환




1. CString을 char으로 변환
CString csTest;
csTest = "I Love You";
char* cTest = LPSTR(LPCTSTR(csTest));
 
2. char을 CString으로 변환
char cTest[10] = "I Love You";
CString csTest;
csTest.Format("%s", cTest);

출처 : http://blog.daum.net/sjdody/5693925



Posted by SB패밀리

CreateProcess 함수 예제 소스코드





/*
 * 출처 : 
http://sosal.tistory.com/
 * made by so_Sal
 */


CreateProcess 라는 함수를 이용하여
Notepad를 실행시키는 간단한 소스입니다.
이해가 가지 않는 부분이 있다면
아래 링크를 참조하세요.
LINK_

====================== CreateProcess ======================

#include<stdio.h>
#include<windows.h>
#include<tchar.h>

#define DIR_LEN BUFSIZ
//BUFSIZ는 운영체제마다 다른 크기를 가지고 있습니다.
//한번 크기를 출력해보시는것도 좋겠네요.

int _tmain(int argc, TCHAR* argv[]){
 STARTUPINFO si = {0,};    //구조체 선언, 초기화
 PROCESS_INFORMATION pi;
 
 si.cb = sizeof(si);
 si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE;
 //Flags 값들이 여러가지가 있습니다.
 //STARTF_USEPOSITION :: dwX, dwY 위치 사용
 //STARTF_USESIZE     :: dwXSize, dwYSize 사용
 //Flags 값이 주어지지 않는 si구조체 값은
 //새로 만들어지는 프로세스에 영향을 주지 않습니다.
 si.dwX = 100;
 si.dwY = 100;
 si.dwXSize = 300;
 si.dwYSize = 300;  //dw ~ 는 사실 잘 쓰이지 않습니다.

 si.lpTitle = _T(" Child process! ");
 
 TCHAR command[] = _T("notepad 10 10");
 //10 10은 argv[]로 들어가겠죠, 아래 결과를 보시면
 //notepad의 이름으로 들어간다는걸 확인하실 수 있습니다.

 BOOL state;

 state = CreateProcess(
  NULL, //여기에 이름을 넣을 수 있습니다.
  command, // 경로를 System에 해줬기 때문에 notepad가 열릴 수 있죠!
  NULL,NULL, 
  TRUE, //부모프로세스중 상속가능한 핸들 상속
  CREATE_NEW_CONSOLE, //dwCreationFlags
  NULL,NULL,
  &si, //STARTUPINFO 구조체 정보를 위에서 만들어줬죠.
  &pi  //이젠 프로세스의 정보를 가져올때 이 구조체를 사용!
 );

 if(state!=0){
  _fputts(_T("Creation OK! \n"), stdout);
 }
 else{
  _fputts(_T("Creation Fail! \n"), stdout);
 }

 return 0;
}


=======================================================================================


프로세스 :: 시스템 자원들을 포함하는 하나의 주소공간

프로세스는 프로그램 코드, 자료, 변수들, 열린 파일들,
그리고 환경으로 구성됩니다.
하드 메모리에 저장되어 있는 프로그램을 시스템 메모리에 끌어와
하드메모리에 존재하는 하나의 복사본만 존재할 수 있도록
프로그램 코드와 시스템 라이브러리들을 여러 프로세스들이 공유하게 합니다.
더 자세한 내용은 이전에 쓴 '04. Windows 프로세스' 글을 참조하시고
여기서는 프로세스 생성 함수에 대해서 설명하겠습니다.
(프로세스가 새로운 프로세스를 실행시키는것)


프로세스의 생성

하나의 프로세스가 새로운 프로세스를 만든다면,(CreateProcess)
원래의 프로세스는 부모 프로세스라고 하고,
새로 만들어진 프로세스는 자식 프로세스라고 합니다.

그렇다면, 이것은 바탕화면에서 프로그램을 더블클릭하여
생성한 프로세스와 다른것인가?
아닙니다. 바탕화면을 보여주는것도 프로세스입니다.
바탕화면 관리자에서 보여지는 프로그램을 실행시킨다면 (더블클릭)
바탕화면 관리자는 부모프로세스, 실행된 프로세스는 자식 프로세스가 됩니다.
ㅇㅋ?



** :: CreateProcess :: **
MSDN :: 
http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx ::
BOOL CreateProcess(
    LPCTSTR lpApplicationName,
             //생성될 프로세스의 이름 (NULL을 넣고 IpCommandLine로 전달 가능)
     
LPTSTR lpCommandLine,
        
   //argc. argv[] 인자로 전달할 문자 매개변수. 표준 검색 경로를 기준으로 찾는다.
     LPSECURITY_ATTRIBUTES lpProcessAttributes, //보안 속성을 지정하는 인자. 보통 NULL
     LPSECURITY_ATTRIBUTES lpThreadAttributes,
                           //쓰레드의 보안 속성 지정. NULL 입력시 기본 보안 속성지정
     BOOL bInheritHandles, // TRUE ::부모 프로세스가 소유하는 상속 가능한 핸들을 상속한다.
     DWORD dwCreationFlags, // 프로세스의 특성을 결정짓는 옵션. 사용 안할경우 0 입력
     LPVOID lpEnvironment, //환경변수 지정. NULL 전달시 부모는 자식에게 환경변수 복사
     LPCTSTR lpCurrentDirectory, //생성하는 프로세스의 현재 디렉터리 NULL시 자식위치 = 부모위치
     LPSTARTUPINFO lpStartupInfo, //STARTUPINFO 구조체 변수 초기화후 변수의 포인터를
               //매개변수 로 전달. STARTUPINFO 구조체 변수들은 프로세스의 속성 정보를 전달한다.
     
LPPROCESS_INFORMATION lpProcessInformation
            
//생성하는 프로세스의 정보를 얻기 위한 매개변수.
               //PROCESS_INFORMATION 구조체 변수의 주소값을 받음
);

9번째 인자 LPSTARTUPINFO 에 정보를 저장하여
CreateProcess를 통하여 프로세스를 생성합니다.
그럼 프로세스의 정보를 다시 가져올때는?
LPPROCESS_INFORMATION을 통해 가져오게 됩니다.

아.. 그런데 위에 CreateProcess 함수 하나에 매개변수가 10개고..
미친듯이 외워야 할거같고,.. 답답..합니다.
저거 다 외워서 쓰는사람... 아무도 없습니다.
공부할때 한번쯤 훑어주고..
중요하게 굵게 써놓은거 정도만 자세히 봐주고...
넘어갑시다!!!!
아주 많이 사용되는 함수도 아닐 뿐더러
책을 보던가 인터넷 조금만 뒤져봐도
상당히 자세히 나와있고, 예제도 널려있으니
그거 보고 프로그래밍 하시면 됩니다!

위 함수를 실행하면 새로운 프로세스가 생성되는데..
프로그램이 부모 프로세스가 되고, 프로그램 안에서 함수에 의해 새로 생성된 프로세스는
자식 프로세스라고 말합니다.

CreateProcess의 첫번째로 전달되는 인자를 통해서 실행파일의 이름이 전달하는 경우에는
현재 디렉터리를 기준으로 실행파일을 찾게 된다.
하지만 두번째 인자로 (첫번째에 NULL을 넣고) 전달되는 경우에는
표준 검색경로 순서대로 실행파일을 찾는다.

1.프로세스의 실행파일이 존재하는 풀더
2.실행중인 프로세스의 현재 풀더
3.windows의 시스템 풀더(system Directory)
4.windows풀더 (windows directory)
5.환경변수 PATH


함수 매개변수의 9번째 매개변수를 보면 STARTUPINFO 라는 구조체가 있다고 나오는데,
그 구조체에 대해서 살펴봅시답!
이것은 새롭게 생성할 프로세스에 정보를 입력하기 위한 구조체입니다.

LPSTARTUPINFO의 구조이다.
MSDN :: 
http://msdn.microsoft.com/en-us/library/ms686331(VS.85).aspx ::

typedef struct _STARTUPINFO {
  DWORD  cb;                           //구조체 변수 크기
  LPTSTR lpReserved;
  LPTSTR lpDesktop;
  LPTSTR lpTitle;                      // 타이틀 바 제목
  DWORD  dwX;                        // 시작될 프로세스 윈도우의 x좌표
  DWORD  dwY;                        // 시작될 프로세스 윈도우의 y좌표
  DWORD  dwXSize;                  // 윈도우의 가로길이
  DWORD  dwYSize;                  // 윈도우의 세로길이
  DWORD  dwXCountChars;
  DWORD  dwYCountChars;
  DWORD  dwFillAttribute;
  DWORD  dwFlags;                   // 설정된 멤버의 정보
  WORD   wShowWindow;
  WORD   cbReserved2;
  LPBYTE lpReserved2;
  HANDLE hStdInput;           // 이 글에서는 CreateProcess에 대해서
  HANDLE hStdOutput;         // 적당히 살펴보는 취지라..
  HANDLE hStdError;           // 핸들에 대한 내용은 넘기겠습니다.
} STARTUPINFO, *LPSTARTUPINFO;

첫번째 인자 DWORD cb가 중요한 이유는
CreateProcess 함수에서 9번째에 들어갈 프로세스 정보 구조체에 들어가는 구조체가
혹시나 다음에 바뀔 수도 있고, 다양한 구조체가 들어갈 수 있게 하기 위해서 둔것인데,
즉 정보를 전달하는 구조체가 무엇인지 구분짓겠다는 의도라고 생각하시면 되겠네요.


Posted by SB패밀리

insert 시 null값에 관한 질문입니다




[질문] insert 시 null값에 관한 질문입니다.. 좀 알려주세요..ㅡ.ㅡ;;


input 폼에서 데이타를 받아서 insert.aspx.cs에서 저장 프로시저를 이용해 데이타를 저장하려고 하는데..

input 폼중 radio 에서 하나로 선택을 하지 않으면 nullException 어쩌구 하면서 에러가 발생합니다..

이값이 null 이 될수도 있는데.. ""(값이 없이) 저장을 하려면 어떻게 해야 하나요?? 

if(rb_Ma.SelectedItem.Value==null)
{
  Cmd.Parameters["@ma"].Value="";
}
else
{
  Cmd.Parameters["@ma"].Value=rb_Ma.SelectedItem.Value;
}

혹시나 해서 이처럼 해 보았는데.. 역시나 에러가 발생하는군요..
이것은 "" 으로 저장을 하려면 어떻게 해야 하는지 좀 알려주시면 감사하겟습니다..

디비에서 데이타 형은 char(1) 입니다..

그리고 하나만 더.. ^^;;

Cmd.Parameters.Add("@email",SqlDbType.NVarChar,100);
Cmd.Parameters["@email"].Value=tb_Email.Text;

이메일을 받아서 저장을 하면 데이타 타입이 맞지 않다면서 에러가 발생하고 있습니다..
(tb_Email 에 aaa@aaa.com 으로 입력시..)

그래서 다른 문자를 입력(aaa.aaa.com) 으로 해 보았더니 정상적으로 입력이 되더군요..

저장 프로시저를 이용해 저장할때 그 데이타에 @ 가 오면 저장이 안 되나요??
아닌것 같은데..

이것도 좀 알려주시면 감사하겠습니다..^^;;
그럼 좋은 하루 보내시기 바랍니다..




[답변]


Cmd.Parameters["@ma"].Value=DbNull.Value; 일케 해보세요





Posted by SB패밀리

ADO.NET: 데이터베이스 트랜잭션 사용

출처: 인터넷



ADO.NET: 데이터베이스 트랜잭션 사용

데이터베이스 트랜잭션은 데이터베이스에 대한 데이터 커밋을 제어하는 데 사용됩니다. 예를 들어, 표준 계좌 프로시저의 경우에는 입출금 계좌에서 동시에 입출금이 발생해야 합니다. 하지만 정전이나 네트워크 오류 등으로 인해 컴퓨터가 중단될 경우, 한 레코드만 업데이트되거나 추가될 가능성이 있습니다. 이러한 상황을 방지하기 위해 트랜잭션이 사용됩니다. ADO.NET의 트랜잭션은 ADO에서처럼 데이터베이스 수준에서 처리되므로 데이터베이스에서 트랜잭션을 지원해야 합니다.

트랜잭션에 대한 세 가지 기본 명령에는 BeginTransactionCommit 및 Rollback이 있습니다. BeginTransaction은 트랜잭션 시작을 표시합니다. BeginTransaction과 다음 명령인 Rollback 또는 Commit 사이에 발생되는 모든 것은 트랜잭션의 일부로 간주됩니다. 다음 코드 예제에서는 트랜잭션을 사용하는 방법을 보여 줍니다.

 

 

 

SqlConnection myConnection = new SqlConnection("server=(local)\\VSdotNET;Trusted_Connection=yes;database=northwind");
    SqlCommand myCommand = new SqlCommand();
  

  SqlTransaction myTrans;
    
    // Open the connection.
    myConnection.Open();
    
    // Assign the connection property.
    myCommand.Connection  = myConnection;
    
    // Begin the transaction.
    myTrans = myConnection.BeginTransaction();
    
    // Assign transaction object for a pending local transaction
    myCommand.Transaction = myTrans;
    
    try
    {
      // Restore database to near its original condition so sample will work correctly.
      myCommand.CommandText = "DELETE FROM Region WHERE (RegionID = 100) OR (RegionID = 101)";
      myCommand.ExecuteNonQuery();
    
      // Insert the first record.
      myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'MidWestern')";
      myCommand.ExecuteNonQuery();
    
      // Insert the second record.
      myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'MidEastern')";
      myCommand.ExecuteNonQuery();
    
      myTrans.Commit();
      Console.WriteLine("Both Records are written to the database!");
    }
    catch(Exception e)
    {
      myTrans.Rollback();
      Console.WriteLine(e.ToString());
      Console.WriteLine("Neither record is written to the database!");
    }
    finally
    {
      myConnection.Close();
    }

Posted by SB패밀리

델파이 컴포넌트

delphi VCL



http://sf.net/projects/graphics32http://www.graphics32.org/wiki/
February 25, 2005: Release of Graphics32 1.7.1. 
개발환경 : D4,5,6,7,2005 C5,6

Graphics32 is a library designed for fast 32-bit graphics handling on Delphi and Kylix. Optimized for 32-bit pixel formats, it provides fast operations with pixels and graphic primitives, and in most cases Graphics32 outperforms the standard TCanvas? classes. It is almost a hundred times faster in per-pixel access and about 2–5 times faster in drawing lines. 

Features
Some of Graphics32 features include: 

Fast per-pixel access up to 100 times faster compared to standard TBitmap?; 
High-performance Bitmap alpha blending (including per-pixel alpha blending); 
Pixel, line and polygon antialiasing with sub-pixel accuracy (combined with alpha blending); 
Arbitrary polygon transformations and custom fillings; 
Bitmap resampling with high quality reconstruction filters (e.g. Lanczos, Cubic, Mitchell); 
A unique state-of-the-art rasterization system; 
Affine transformations of bitmaps: rotations, scaling, etc with sub-pixel accuracy; 
Arbitrary projective transformations of bitmaps; 
Arbitrary remapping transformations of bitmaps (e.g. for Warping, Morphing); 
Flexible supersampling implementation for maximum sampling quality; 
Flicker-free image displaying components with optimized double buffering via advanced MicroTiles? based repaint optimizer; 
Multiple customizible easy-to-use overlay layers; 
Locking of bitmaps for safe multithreading; 
A property editor for RGB and alpha channel loading; 
Design-time loading of image formats supported by standard TPicture; 
Works on Borland Delphi, C++ Builder and Kylix. 

As of version 1.5.1b Graphics32 is licensed under the terms of the Mozilla Public License. 

+++++ 설치

Graphics32 supports Delphi versions 4, 5, and 6, and C++ Builder 5.

Note, because some properties of range bars and gage bars have been changed, you can obtain some error messages while opening your previous Graphics32 projects. Just ignore these messages and Delphi will fix DFM files automatically.



Unzip the files; 
Add location of main installation directory to Tools | Environment Options | Library | Library Path. 
Select File | Open... on the menu bar. Set Files of type to Delphi package source, locate and open GR32_DSGN_D6.dpk (GR32_DSGN_D5 for Delphi5, GR32_DSGN_D4 for Delphi4 or GR32_DSGN_B5 for C++ Builder); 
A package editor window will appear. Click Compile, then click Install; 
If compiler asks whether you want to save changes, usually it is a good idea to choose No. 



+++++ 설명:

Additional Topics
Line Patterns

Using TImage32

Classes (Alphabetical)
TAffineTransformation

TArrowBar

TBitmap32

TBitmap32Collection

TBitmap32Item

TBitmap32List

TBitmapLayer

TByteMap

TCustomGaugeBar

TCustomImage32

TCustomImgView32

TCustomLayer

TCustomMap

TCustomPaintBox32

TCustomRangeBar

TGaugeBar

TImage32

TImgView32

TIVScrollProperties

TLayerCollection

TPaintBox32

TPaintStages

TPolygon32

TPositionedLayer

TProjectiveTransformation

TRangeBar

TRubberbandLayer

TThreadPersistent

TTransformation
Classes (Hierarchy)
TArrowBar

TCustomGaugeBar

TGaugeBar

TCustomRangeBar

TRangeBar

TBitmap32Collection

TBitmap32Item

TBitmap32List

TCustomLayer

TPositionedLayer

TBitmapLayer

TRubberbandLayer

TCustomPaintBox32

TCustomImage32

TCustomImgView32

TImgView32

TImage32

TPaintBox32

TIVScrollProperties

TLayerCollection

TPaintStages

TPolygon32

TThreadPersistent

TCustomMap

TBitmap32

TByteMap

TTransformation

TAffineTransformation

TProjectiveTransformation


Routines
AlphaComponent  Creating Points  Lighten  
AlphaToGrayscale  Creating Rectangles  OffsetRect  
ApplyLUT  EMMS  Polygon  
Blend  EqualRect  Polyline  
BlendEx  Fixed Point Math  PolyPolygon  
BlockTransfer  Gray32  PolyPolyline  
BlueComponent  GreenComponent  PtInRect  
Color32  HSLtoRGB  RedComponent  
ColorAdd  InflateRect  RGBtoHSL  
ColorMax  Intensity  SetAlpha  
ColorMin  IntensityToAlpha  SetBorderTransparent  
ColorModulate  IntersectRect  SetGamma  
ColorSub  Invert  StretchTransfer  
ColorToGrayScale  InvertRGB  Transform  
Combine  IsRectEmpty  WinColor  

Types
Arrays  TFloatMatrix  TRBHandles  
Color Types  TLUT8  TRBStyle  
Point Types  TPaintBoxOptions  TRectRounding  
Rectangle Types  TPaintStage  TSize  
TConversionType  TPixelCombineEvent  TSizeGripStyle  
TDrawMode  TPolyFillMode  TStretchFilter  
TFixed  TRBBackgnd  

Variables
MMX_ACTIVE  

Constants
Color Constants  IdentityMatrix  Paint Stage Constants  
G32Version  Layer Options Bits  

Units
GR32  GR32_Filters  GR32_Polygons  
GR32_Blend  GR32_Image  GR32_RangeBars  
GR32_ByteMaps  GR32_Layers  GR32_Transforms  



Graphics32_1_7_1.zip


Posted by SB패밀리