프로그램 업데이트 목록을 만들다 보면은 ListCtrl에 업데이트 목록을 넣어두고
업데이트를 할때마다 리스트 현재 행을 변경시킬때가 있다 그럴때 유용하다.

    // 먼저 현재 선택상태를 해제합니다
    m_listResult.SetItemState( -1, 0, LVIS_SELECTED|LVIS_FOCUSED );
    // 원하는 아이템을 선택합니다
    m_listResult.SetItemState(m_nCurrentItem, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
    // 선택된 아이템을 표시합니다
    m_listResult.EnsureVisible(m_nCurrentItem, false);
    // 리스트 컨트롤에 포커스를 맞춥니다
    m_listResult.SetFocus(); 
posted by 뚱2

[JSP] Procedure Call

Java/Jsp 2011. 3. 17. 09:35
업무용 프로그램에서 많이 사용하는 프로시져
저희쪽 환경은 Jsp + Tomcat + Oracle 입니다.

// 드라이버 로드
try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e1) {
    e1.printStackTrace(pw);
}

// 연결 클래스 변수 선언
Connection 		  conn  = null;
CallableStatement cstat = null;
ResultSet         rs    = null;
try {
    conn = DriverManager.getConnection("jdbc:oracle:thin:@아이피:포트:Tnsname", "아이디", "비밀번호");

    // 프로시져 콜
    CallableStatement cstat = conn.prepareCall("{CALL 패키지명.프로시져명(?)}");
    // output cursor로 데이터를 받아온다.    
    cstat.registerOutParameter(1, OracleTypes.CURSOR);
    cstat.execute();

    rs = (ResultSet)cstat.getObject(1);
    
    if ( rs != null )
    {
        ResultSetMetaData rsmeta = rs.getMetaData();
        int nColumn = rsmeta.getColumnCount();
        out.println("");
        out.println("");
        for (int i = 0; i <= nColumn; i++)
        {
            if ( i == 0 )
                out.println(" 번호 ");
            else
            {
                String strColumnName = rsmeta.getColumnName(i);
                out.println(strColumnName);					
            }
        }//for (int i = 0; i <= nColumn; i++)
        out.println("");
        
        int nRow = 1;
        while (rs.next())
        {
            out.println("");
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i <= nColumn; i++)
            {
                if ( i == 0 )
                    sb.append(  Integer.toString(nRow) );
                else
                    sb.append( rs.getString(i) );
            }
            out.println(sb.toString());
            out.println("");
            nRow++;
        }//while (rs.next())
        
        out.println("");
    }//if ( rs != null )
} catch (SQLException e) {
    e.printStackTrace(pw);
} finally {
    try {rs.close();   } catch (SQLException e) {}
    try {cstat.close();} catch (SQLException e) {}
    try {conn.close(); } catch (SQLException e) {}
}
posted by 뚱2

ADO를 이용해서 Recordset 개체를

Open하는데 두번째 인자(ActiveConnection)는 옵션인자입니다.

'Visual Basic
recordset.Open Source, ActiveConnection, CursorType, LockType, Options



이걸 그냥 NULL 이렇게 주면은 실행시 예외를 떨굽니다.
이럴떼 NULL 대신
// Visual C++
_variant_t vOPTION;
vOPTION.vt = VT_ERROR;
vOPTION.scode = DISP_E_PARAMNOTFOUND;


해주시면 됩니다.

p.s. 2011-08-06 추가
MFC에서 컴관련 클래스로 COleVariant가 있습니다.
COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 

'C/C++ > VC++ / MFC' 카테고리의 다른 글

[MFC] MFC에서 Token 분리  (0) 2011.07.21
[MFC] CListCtrl 현재 행 선택하기  (0) 2011.03.20
#pragma message  (0) 2011.02.25
Predefines Macros  (0) 2011.02.16
[링크] 일정 시간이 흐른후 메세지 박스 종료하기  (0) 2011.02.15
posted by 뚱2

CreateDirectory는 API 입니다. 만약 만들려는 폴더의 상위 폴더가 존재하지 않는다면
폴더가 생성되지 않습니다.

SHCreateDirectory는 쉘 함수로써 상위 폴더가 존재하지 않더라도 만들어줍니다. 더 편해요 ^^

다면 Microsoft Windows XP Service Pack 2 (SP2) and Windows Server 2003. 이상에서 사용할수 있습니다.
그리고 SHCreateDirectory 함수는 Unicode 함수입니다. 다라서 MultiByte에서 사용하실려면
문자열을 변환해주셔야 합니다.

posted by 뚱2

Visual Studio 2008에서 데이터베이스에 Input, Output 하는 프로그램을 만들었습니다.

프로그램에서 Oracle에 Insert하면은 정상적으로 한글이 보이는데

파일을 읽어서 Oracle에 Insert하면은 깨지는 현상이 나타났습니다.

결국 해결은

Visual Studio 2008의 로케일을 변경해서 해결했습니다.

// 로케일을 설정
_tsetlocale(LC_ALL, _T("korean"));
// 또는 #pragma로도 가능하다.
#pragma setlocale("korean")



또한 #pragma
posted by 뚱2

#pragma message

C/C++/VC++ / MFC 2011. 2. 25. 13:15
참 재미있는 기능입니다.
이걸로 TODO를 만들면 VC++에서 점프가 가능합니다.


위와 같이 Output 창에서 해당 라인을 더블클릭하면 실제 소스로 이동합니다.

// with line number
#define STRING2(x) #x
#define STRING(x) STRING2(x)
#define TODO(x) message(__FILE__"("STRING(__LINE__)") : ▶"x"◀")


사용할때는
// Used
#pragma TODO("테스트")


이렇게 사용하시면 됩니다.
posted by 뚱2

다른 사람의 소스를 임포트 하면 소스 주석이 깨져서 보이는 경우가 있습니다.
안드로이드 프로젝트를 생성할때 UTF-8로 생성을 많이 합니다.
그런데 시스템 디폴트는 Windows XP의 경우 MS949입니다.
따라서 UTF-8로 만들어진 프로젝트나 소스를 임포트 하면은 소스의 한글이 깨져서 보입니다.

Endcoding을 수정하는 방법은 크게 2가지 입니다.

1. Project->Properties->Resource->Text file encoding


2. Window->Preferences->General->Editors->Text Editors->Dictionaries->Encoding


1, 2번 둘다 encoding 하는 방법은 같지만 1번은 특정 프로젝트만 적용하는 옵션이고 2번은 이클립스 설정 전체를
변경하는 옵션입니다.


* 2012-06-21 추가 설정입니다.









posted by 뚱2

도와주세요! 팀장이 됐어요

Books 2011. 2. 23. 09:27


1. 제   목 : 도와주세요! 팀장이 됐어요
2. 출판사 : 위키북스
3. 저   자 : 신승환
4. 가   격 : 13,000원
5. 판   매 : 판매중
6. 평   가 : ★★★★☆

요즘 한창 고민하게 되는 부분. 아직 나에게는 멀게만 느껴지는 책 제목이지만 꼭 팀장이 아니더라도
개발자 간의 문제 혹은 개발자와 팀장과의 관계, 무엇보다 사람관의 관계에 대해서 배울수 있다.
책은 초보 팀장인 나영철이라는 인물을 중심으로 1부는 소설 2부는 QnA 형식으로 풀어쓰고 있다.
이 책의 큰 주요 골자 2가지는 리팩토링과 애자일이다 웬 관리기술에 개발방법론이냐 하겠지만
방법론이라는건 컨셉,목적 인데 두가지 방법(리팩토링, 애자일)이 팀장이 프로젝트를 성공적으로
이끌어 가는데 큰 밑바탕이 될 수 있다고 알려준다.
책 분량은 290페이지 가량인데 소설 형식에 분량도 적어서 책을 조금 느리게 보는 사람도 3시간 정도면
다볼 분량이다.
분량은 적은데 내용은 가볍지 않은 책!!!
출퇴근시 볼만하다.
posted by 뚱2


1. 제   목 : Head First Object-Oriented Analysis & Design 세상을 설계하는 객체지향 방법론
2. 출판사 : 한빛미디어
3. 저   자 :
브렛 맥래프린, 게리 폴리스, 데이빗 웨스트 저 / 신광연, 박종걸 역
4. 가   격 : 28,000원
5. 난이도 : 초중급 (★★
☆☆)
6. 판   매 : 판매중
7. 평   가 : ★★★★
   

   언제나 그렇지만 Head First 시리즈는 호불호가 확실한 책인것 같습니다. 내용이 문제가 아니라  책의 컨셉이 말입니다.
   저는 싫어하는 쪽 사람인데요. 그렇지만 꽤 많은 Head First 시리즈를 가지고 있습니다. 
   (책의 컨셉은 싫지만 내용은 좋습니다. 조금 모순되지요)    
   아무튼 객체 지향 설계 분석을 그림책 읽듯이 쉽게 읽게 해주는 책입니다.
   편하게 쭉 읽어가다 부분 부분 나라면 어떻게 할까 생각하면 분석, 설계 기초 잡는데 좋을 것 같습니다.
   저는 초보이기때문에 이것 보고 조금 더 세부적으로 깊이가 있는 책을 찾아서 읽어봐야겠습니다.
   처음 개발자 들이 접근할때 어려워하는 분석, 설계, 객체지향 그리고 그중에 간간히 나타나는 디자인패턴에 대한 설명이
   한데 잘 어우러지는 책 입니다.

    
posted by 뚱2

Visual Studio 2008에는 F12 단축키가 있습니다. 클래스의 정의나 선언으로 점프 합니다.

이와 비슷한 기능이 토드에는 F4입니다.

'IDE/Tool > Toad for Oracle' 카테고리의 다른 글

[Toad] Toad Oracle Explain Plan  (0) 2012.01.30
[Toad] 글꼴 변경  (0) 2012.01.18
[Toad] Toggle RHS Visibiity Problem  (0) 2011.04.21
[Toad] Package Compile 단축키  (0) 2011.04.20
[Toad] Stored Procedure 실행 시키기  (0) 2011.04.07
posted by 뚱2

객체지향 원리

일반 2011. 2. 18. 11:47
출처 ( Head First Object-Oriented Analysis & Design 세상을 설계하는 객체지향 방법론 )

객체지향 원리
1. 변화는 것을 캡슐화(분리)하라.
2. 구현에 의존하기보다는 인터페이스에 의존하도록 코딩하라.
3. 각 클래스는 변경 요인이 오직 하나이어야 한다. (하나의 클래스는 하나의 기능을 갖도록 설계)
4. 클래스는 행동과 기능에 관한 것이다.

다 맞는 이야기 입니다.
다만 이론은 이론일뿐 이걸 실제 적용할려면 멍해진다는
결론은 경험이 없이는 책만 보아서는 알수 없는게 개발 인것 같습니다.


posted by 뚱2

Predefines Macros

C/C++/VC++ / MFC 2011. 2. 16. 17:59
컴파일시 변수와 비슷하게 사용할수 있는 Macro들이 있습니다.
그중 __FILE__, __LINE__, __FUNCTION__은  디버깅시 유용합니다.

__FILE__           : 현재 소스의 파일 경로 문자열을 리턴
__LINE__          : 소스 파일의 라인번호 숫자를 리턴
__FUNCTION__ : 현재 위치의 함수 이름 문자열을 리턴

참고 ( http://msdn.microsoft.com/en-us/library/b0084kay(VS.71).aspx )

posted by 뚱2
출처 ( http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8514&page=1 )

데브피아 살펴보다가 유용한 팁이 있어서 링크 없어질것 대비하여 블로그에 옮겨 놓습니다.

나중에 써먹어야지!!


글 내용
---------------------------------------------------------------------------------------------------
팁이 될지 모르겠네요. 모르는분들을 위한 팁이에요...양해 바랍니다. ^^
어떤분이 질문을 올리셨기에...
질문의 내용은 A프로그램에서 B프로그램 실행후 B프로그램이 끝날때까지 A프로그램은 계속 대기
B프로그램에서 메시지박스가 떠 있기때문에 무한정 기다려야 하는 문제가 있을 경우 사용하면 될것 같습니다.
또는 그냥 시간되면 메시지 박스를 종료하고 싶을때 사용하면 될것 같습니다.
사용 방법은 SetTime를 이용합니다. 
---------------------------------------------------------------------------------------------------
SetTimer(101, 1000, NULL);
if(AfxMessageBox("박스다..") == IDOK)
{
    // AfxMessageBox("OK");
}

//OnTimer() 안에서 사용하시면 됩니다.
HWND wndDlg = ::GetLastActivePopup(m_hWnd);
if(wndDlg && wndDlg != m_hWnd)
{
    char buffer[256] = {0};
    ::GetClassName(wndDlg, buffer, 256);
    if(CString("#32770") == buffer) //메시지 박스는 분명히 다이얼로그이며 클래스명이 #32770
    {
        ::EndDialog(wndDlg, IDOK);
    }
}

posted by 뚱2

Visual Assist X를 사용하면 제일 편한 기능중 하나가 .h와 .cpp간의 전환 단축키 입니다.

이걸 매크로로 구현한 글이 있어서 링크 합니다.

Visual Studio 2005, 2008에서 동작 확인했습니다.

Function OpenDocument(ByVal path As String) As Window
    If (My.Computer.FileSystem.FileExists(path)) Then
        OpenDocument = DTE.ItemOperations.OpenFile(path)
    Else
        Dim filename As String
        filename = path.Substring(path.LastIndexOf("\") + 1)
        Dim item As ProjectItem
        item = DTE.Solution.FindProjectItem(filename)
        If (item IsNot Nothing) Then
            If (item.Document Is Nothing) Then
                OpenDocument = item.Open()
            Else
                OpenDocument = item.Document.ActiveWindow()
            End If
        End If
    End If
    If (OpenDocument IsNot Nothing) Then
        OpenDocument.Activate()
    End If
End 

Function Sub ToggleBetweenSourceAndHeader()
    Dim document As Document
    document = DTE.ActiveDocument
    Dim path As String
    path = document.FullName
    Dim ext_position As Integer
    ext_position = path.LastIndexOf(".")
    If (ext_position <> -1) Then
        Dim ext As String
        ext = path.Substring(ext_position)
        Dim path_without_ext As String
        path_without_ext = path.Remove(ext_position, ext.Length())
        If (ext.ToLower().Contains(".cpp")) Then     ' .cpp -> .hpp or .h
            If (OpenDocument(path_without_ext & ".hpp") Is Nothing) Then
                OpenDocument(path_without_ext & ".h")
            End If
        ElseIf (ext.ToLower().Contains(".cxx")) Then ' .cxx -> .hxx
            OpenDocument(path_without_ext & ".hxx")
        ElseIf (ext.ToLower().Contains(".cc")) Then  ' .cc -> .hh
            OpenDocument(path_without_ext & ".hh")
        ElseIf (ext.ToLower().Contains(".c")) Then
            OpenDocument(path_without_ext & ".h")
        ElseIf (ext.ToLower().Contains(".h")) Then   ' .h -> .c or .cpp
            If (OpenDocument(path_without_ext & ".c") Is Nothing) Then
                OpenDocument(path_without_ext & ".cpp")
            End If
        ElseIf (ext.ToLower().Contains(".hpp")) Then ' .hpp -> .cpp
            OpenDocument(path_without_ext & ".cpp")
        ElseIf (ext.ToLower().Contains(".hxx")) Then ' .hxx -> .cxx
            OpenDocument(path_without_ext & ".cxx")
        ElseIf (ext.ToLower().Contains(".hh")) Then  ' .hh -> .cc
            OpenDocument(path_without_ext & ".cc")
        End If
    End If
End Sub






posted by 뚱2


제가 모바일에서 주로 사용하는 database는 SQLite입니다.
용량이 작으면서도 RDB의 기능을 잘 갖추고 있습니다.
그렇지만 RDBMS로는 모자르죠 ^^;
SQLite에는 typeof라는 함수가 존재합니다.

Function
        typeof(X)
   
Descript
        The typeof(X) function returns a string that indicates the datatype of the expression X: "null", "integer", "real", "text", or "blob". 


참고 ( http://www.sqlite.org/lang_corefunc.html )

이번에 Oracle을 사용하면서 이와 비슷한 함수를 찾았는데
못찾았습니다. 그러던중 오라클에는 COLS 라는 시스템 테이블이 있어서
그 안에 컬럼에 대한 정보를 저장합니다. 이 테이블을 이용하면 사용자 function을 만들면
typeof 비슷하게 만들수 있을것 같습니다.

SELECT DATA_TYPE
  FROM COLS
 WHERE TABLE_NAME = '테이블명'
   AND COLUMN_NAME = '컬럼명'

posted by 뚱2

SQLite Expert

DB / NoSQL/SQLite 2011. 2. 15. 10:27

iPhone, Android, Windows Mobile 등 스마트폰에서 어플을 만들때

데이터 저장 용도로 SQLite를 자주 사용합니다.

개발을 진행중 테스트 용도로 SQLite db를 편집하고 싶을때 CUI툴만 사용해서 하면

답답합니다.

이럴때 무료로 사용할수 있는 좋은 툴이 있네요

http://www.sqliteexpert.com

링크로 들어가셔서 Personal 제품만 무료 입니다.

대부분의 기능이 잘 되고 화면 UI도 깔끔하네요.

'DB / NoSQL > SQLite' 카테고리의 다른 글

[SQLite] ADO.NET 2.0 Provider for SQLite  (0) 2012.05.03
SQLite 3.7.2 Windows Mobile용 dll  (0) 2010.09.25
posted by 뚱2

Dina 코딩용 글꼴

일반 2011. 2. 13. 13:40


코딩용 글꼴 1위로 뽑힌 Bitstream Vera Sans Mono도 사용해 보고

Visuao Studio 6에서 기본으로 사용되는 Fixedsys도 사용해 봤는데

나한테는 이 Dina 폰트가 가장 잘 맞는것 같다.


참고로 무료다.
posted by 뚱2

글래스 자동 임포트 기능이라기 보다 정리기능이라고 할 수 있습니다.
사용하는 클래스는 자동으로 임포트 하고
사용하지 않는 클래스가 임포트 되어 있으면 정리해 줍니다.

단축키는 Ctrl+Shift+O (영어) 입니다.
posted by 뚱2

Window -> Preferences -> General -> Keys


posted by 뚱2
전부터 궁금했던 사항을 잘 정리한 블로그가 있어서 링크 걸어 둡니다.

posted by 뚱2

물론 MultiByteToWideChar API를 사용하면  Ansi->Unicode로 전환할수 있습니다.

MultiByteToWideChar를 보시면 알겠지만 인자가 많습니다. ㅡㅡ;

int MultiByteToWideChar(
  UINT CodePage, 
  DWORD dwFlags,         
  LPCSTR lpMultiByteStr, 
  int cbMultiByte,       
  LPWSTR lpWideCharStr,  
  int cchWideChar        
);

이럴때 MFC에서만 사용할수 있는 꼼수

char szBuffer[] = "Ansi 스트링 입니다.";
CString strUnicode = (CString)szBuffer;

이렇게만 하면 끝났습니다.
다만 그냥 컨버팅 되는게 아니라
프로그램 베이스가 Unicode 기반으로 작성된 프로그램에서
Ansi 문자열을 Unicode 기반으로 컨버팅 하실때 편하게 사용하실수 있습니다.

소스를 쫓아 들어가보면 알겠지만

형변환 내부적으로 MultiByteToWideChar 함수를 호출하고 있습니다.

// 데이터 길이 가져오는 함수
static int __cdecl GetBaseTypeLength( _In_z_ LPCSTR pszSrc ) throw()
{
    // Returns required buffer size in wchar_ts
    return ::MultiByteToWideChar( _AtlGetConversionACP(), 0, pszSrc, -1, NULL, 0 )-1;
}

// 데이터 변환 하는 함수
static void __cdecl ConvertToBaseType( _Out_cap_(nDestLength) LPWSTR pszDest
, _In_ int nDestLength, _In_z_ LPCSTR pszSrc, _In_ int nSrcLength = -1) throw()
{
    // nLen is in wchar_ts
    ::MultiByteToWideChar( _AtlGetConversionACP()
                          , 0, pszSrc, nSrcLength, pszDest, nDestLength );
}

그런데 막상 해보면 글자가 한글이 깨집니다.
이유는 http://msdn.microsoft.com/ko-kr/library/w1sc4t4k(VS.80).aspx
문자열 변환 보시면 알겠지만 기본 코드 페이지가 변경되었습니다.


문자열 변환

Visual C++ 6.0의 ATL 3.0 및 그 이전 버전에서는 atlconv.h의 매크로를 사용하는 문자열 변환이 항상 시스템의 ANSI 코드 페이지(CP_ACP)를 사용하여 수행되었습니다. Visual C++ .NET의 ATL 7.0부터는 _CONVERSION_DONT_USE_THREAD_LOCALE이 정의되지 않은 경우 문자열 변환이 현재 스레드의 기본 ANSI 코드 페이지를 사용하여 수행됩니다. _CONVERSION_DONT_USE_THREAD_LOCALE이 정의된 경우에는 이전과 같이 시스템의 ANSI 코드 페이지가 사용됩니다.

CW2AEX 등의 문자열 변환 클래스를 사용하면 변환에 사용할 코드 페이지를 해당 생성자에 전달할 수 있습니다. 코드 페이지를 지정하지 않으면 해당 클래스에서는 매크로와 동일한 코드 페이지를 사용합니다.

자세한 내용은 ATL and MFC String Conversion Macros를 참조하십시오.


결국 컨버전 할때 내부적으로

inline UINT WINAPI _AtlGetConversionACP() throw()
{
#ifdef _CONVERSION_DONT_USE_THREAD_LOCALE
    return CP_ACP;
#else
    return CP_THREAD_ACP;
#endif
}

이 함수를 호출하는데 _CONVERSION_DONT_USE_THREAD_LOCALE 매크로가 없기 때문에 CP_THREAD_ACP 코드
페이지가 작성됩니다.

그래서 매크로를 프로젝트에 추가(Property Pages->Configuration Properties->C/C++->Preprocessor->Preprocessor Definitions)해주고

Rebuild All 해서 사용하시면 됩니다.

posted by 뚱2
추가 : 2011-04-27
Windows 7 x64에 10204_vista_w2k8_x64_production_client 을 다운받아서 설치했는데
설치까지는 이상없이 됐는데 설치만 하면 무선 네트웍과 충돌이 일어나더니 무선네트웍이 죽는
현상이 발생했습니다.. 그래서 결국  다른 방법으로

1. 10203_vista_w2k8_x86_production_db 설치 (x86)
2. 10203_vista_w2k8_x86_production_client 설치 (x86)
3. Toad 9.7.2 (x86)
이렇게 설치하니 다 잘되네요.




오라클 홈페이지에서 Windows7을 지원한다는 10g x64를 받고 실치히는데
버전 확인에서 열심히 막혔다. 30분가량 삽질끝에 

\install\oraparam.ini

파일을 오픈한후

[Certified Versions]
#You can customise error message shown for failure, provide value for CERTIFIED_VERSION_FAILURE_MESSAGE
Windows=5.0,5.1,5.2,6.0,6.1

에서 Windows에 6.1을 추가... 설치

설치는 잘 넘어갔는데
홈 패스에서 자꾸 걸려서 설치가 안되서 기본설치 말고 고급 사용자 정의 설치? (둘중 아래쪽) 하니 잘된다.

ps. 인터넷 네이버 지식In에서 찾은 추가사항

\install\oraparam.ini

[Certified Versions]
#You can customise error message shown for failure, provide value for CERTIFIED_VERSION_FAILURE_MESSAGE
Windows=5.0,5.1,5.2,6.0,6.1

\stage\prereq\db\refhost.xml
<CERTIFIED_SYSTEMS>
    <OPERATING_SYSTEM>
        <VERSION VALUE="5.0"/>
        <SERVICE_PACK VALUE="1"/> 
    </OPERATING_SYSTEM>
    <OPERATING_SYSTEM>
        <VERSION VALUE="5.1"/>
        <SERVICE_PACK VALUE="1"/> 
    </OPERATING_SYSTEM>
    <OPERATING_SYSTEM>
        <VERSION VALUE="5.2"/>
    </OPERATING_SYSTEM>
    <!--Microsoft Windows Vista-->
    <OPERATING_SYSTEM>
        <VERSION VALUE="6.0"/>
    </OPERATING_SYSTEM>
    <!--Microsoft Windows 7-->
    <OPERATING_SYSTEM>
        <VERSION VALUE="6.1"/>
    </OPERATING_SYSTEM>
</CERTIFIED_SYSTEMS>

\stage\prereq\db_prereqs\db\refhost.xml
<CERTIFIED_SYSTEMS>
    <OPERATING_SYSTEM>
        <VERSION VALUE="5.0"/>
        <SERVICE_PACK VALUE="1"/> 
    </OPERATING_SYSTEM>
    <OPERATING_SYSTEM>
        <VERSION VALUE="5.1"/>
        <SERVICE_PACK VALUE="1"/> 
    </OPERATING_SYSTEM>
    <OPERATING_SYSTEM>
    <VERSION VALUE="5.2"/>
        </OPERATING_SYSTEM>
    <!--Microsoft Windows Vista-->
    <OPERATING_SYSTEM>
        <VERSION VALUE="6.0"/>
    </OPERATING_SYSTEM>
    <!--Microsoft Windows 7-->
    <OPERATING_SYSTEM>
        <VERSION VALUE="6.1"/>
    </OPERATING_SYSTEM>
</CERTIFIED_SYSTEMS>


 


posted by 뚱2
이번에 집을 이사하고 인터넷을 교체했습니다. LG XX -> QooX (?)

업체를 변경했으니 당연히 인터넷 속도 측정을 해보고 싶더군요.

국내 인터넷 속도 측정을 하면 가입 절차도 복잡하고 제일 중요한건 ActiveX를 설치해야 합니다.

또한 집에서 Mac과 Windows를 혼용해서 사용하기 때문에 Mac을 사용할때 속도 측정이 어렵습니다.

외국 사이트로 ActiveX도 없고 인증 절차도 없이 편하게 사용할수 있는 사이트가 있어서 소개 합니다.


처음 접속하면 테스트 서버를 선택해야 하는데 국내를 선택하시는게 사실적 속도 측정에 도움이 됩니다.

외국서버를 설정하지면 속도차이가 꽤 납니다.


posted by 뚱2

[Mac] 화면 캡쳐 하기

OS/Mac 2011. 1. 26. 23:51

화면의 그림을 파일로 저장                      SHIFT+COMMAND+3
화면의 그림을 클립보드에 복사                CONTROL+SHIFT+COMMAND+3
선택한 영역의 그림을 파일로 저장            SHIFT+COMMAND+4
선택한 영역의 그림을 클립보드에 복사      CONTROL+SHIFT+COMMAND+4

'OS > Mac' 카테고리의 다른 글

[Mac] delete  (0) 2011.04.02
[Mac] 용 원격데스크탑 (Remote Desktop Connection)  (0) 2011.03.31
[Mac] Shift + Space 한영전환  (0) 2011.01.23
[Mac] 하드웨어 정보 확인하기  (0) 2011.01.16
[Mac] 키보드 단축키  (0) 2011.01.12
posted by 뚱2
데이터를 파일로 저장하는 프로그램을 만들다 보면은 꼭 필요한게
데이터 저장 폴더가 유효한지 아닌지 판단한는 일입니다.
그럴대 유용한 API 입니다.

PathIsDirectory Function


Verifies that a path is a valid directory.


Syntax

BOOL PathIsDirectory(LPCTSTR pszPath);


Parameters

pszPath
[in] A pointer to a null-terminated string of maximum length MAX_PATH that contains the path to verify.


Return Value

Returns TRUE if the path is a valid directory, or FALSE otherwise.


Function Information

Minimum DLL Version shlwapi.dll version 4.71 or later
Custom Implementation No
Header shlwapi.h
Import library shlwapi.lib
Minimum operating systems Windows 2000, Windows NT 4.0 with Internet Explorer 4.0, Windows 98, Windows 95 with Internet Explorer 4.0
Unicode Implemented as ANSI and Unicode versions.

posted by 뚱2

MFC를 사용 할 때 전역적으로 사용할수 있는 API 앞머리에 Afx가 붙습니다.
그중 현재 프로그램의 Instance Handle을 구할수 있는 API입니다.

AfxGetInstanceHandle();

그런데 이걸 Winapi로 하면 어떻게 될까요?  우선 GetWindowLong API를 이용하면 해결됩니다.
// 원형
LONG GetWindowLong(          
    HWND hWnd,
    int nIndex
);

아래와 같이 호출해 주시면 됩니다.  hWnd는 호출하는 쪽의 윈도우 핸들 입니다.
GetWindowLong(hWnd, GWL_HINSTANCE);

posted by 뚱2

[Mac] Shift + Space 한영전환

OS/Mac 2011. 1. 23. 02:50
좋은 정보를 찾아서 링크 걸어 둡니다. 

http://river.ecplaza.net/river/425?category=29

Windows에 익숙한 저로써는 한영전환에 어려움이 있었는데 이렇게 설정하면은

Windows 와 Mac 동일하게 사용할 수 있어서 한영 전환에 혼선이 없을 것 같습니다.

'OS > Mac' 카테고리의 다른 글

[Mac] delete  (0) 2011.04.02
[Mac] 용 원격데스크탑 (Remote Desktop Connection)  (0) 2011.03.31
[Mac] 화면 캡쳐 하기  (0) 2011.01.26
[Mac] 하드웨어 정보 확인하기  (0) 2011.01.16
[Mac] 키보드 단축키  (0) 2011.01.12
posted by 뚱2

KBS FM Streaming

뚱2's 이야기 2011. 1. 22. 22:31
출처 http://mielikki.tistory.com/197 

참 잘 사용하고 있는 KBS FM Streaming 주소였습니다.
KBS는 URL호출시 아이디를 보내주면 아이피를 동적으로 바뀌는 방법을 사용해서 URL을 이용한
접속을 차단하더군요.
결국 URL을 파싱해주는 서버가 필요합니다. 전 서버가 없어서 따로 적용할수가 없네요 ㅠㅠ.
우선 위 출처에서 있는 소스를 저장해둘 요량으로 적어 놓습니다.
나중에 서버구하면 적용해야겠습니다.
< ?php
// KBS ID, 채널
$id = $_GET["id"];
$channel = $_GET["channel"];

// 문자열을 가져올 주소
$whois_server = "http://kong.kbs.co.kr/live_player/channelMini.php?id=".$id."&channel=".$channel;

// 문자열을 가져온다
$whois_server = parse_url($whois_server);
$fp = fsockopen($whois_server["host"], 80, $errno, $errstr);
fputs($fp,"GET ".$whois_server["path"].($whois_server["query"] ? '?'.$whois_server["query"] : '')." HTTP/1.0\r\n");
fputs($fp,"Host: " . $whois_server["host"] . "\r\n");
fputs($fp,"User-Agent: PHP Script\r\n");
fputs($fp,"Connection: close\r\n\r\n");

$string = "";
while(!feof($fp)) { $string .=  fgets($fp,1024); }
fclose($fp);

// 필요한 부분만 자른다
$string = strstr($string, 'mms://');

// 스트리밍 주소로 바로 이동(스트리밍 프로그램에서 바로 쓸 수 있게)
header("Location:$string");
? >
posted by 뚱2

WINDOWS API 폴더 선택

C/C++/VC++ / MFC 2011. 1. 21. 21:49
윈도우 프로그래밍을 하다보면은 많이 사용하는 파일, 색상, 폰트, 프린트 등을 공통대화상자로 만들어두워
재사용 할수 있게 했습니다.

그런데 이상하게도 폴더를 선택할수 있는 공통대화 상자는 없습니다. 다른 것보다 덜 사용해서 그런지...
없다고 안되는건 아니고 Shell쪽에서 함수를 제공하고 있습니다.

간단하게 다음과 같이 사용하실수 있습니다.

BOOL ChoiceFolder(HWND hWndOwner, TCHAR* pszFolderPath)
{
	ASSERT( IsWindow(hWndOwner) == TRUE && pszFolderPath != NULL);
	
	LPITEMLIST pidl;
	BROWSEINFO bi;

	bi.hwndOwner      = hWndOwner;
	bi.pidRoot        = NULL;
	bi.pszDisplayName = NULL;
	bi.lpszTitle      = _T("폴더를 선택해 주세요.");
	bi.ulFlags        = BIF_NEWDIALOGSTYLE|BIF_EDITBOX|BIF_RETURNONLYFSDIRS;
	bi.lpfn           = NULL;
	bi.lParam         = 0;

	pidl = SHBrowseForFolder(&bi);
	if ( pidl == NLULL)
		return FALSE;
	
   	return SHGetPathFromIDList(pidl, pszFolderPath);
}



posted by 뚱2
VC++에서 ADO를 사용하는 방법은 크게 2가지가 있다.

1. OLE DB SDK라이브러리를 이용하는 방법
2. #import를 이용하여 Type Library를 이용하는 방법

전 개인적으로 2번째 방법을 선호합니다.
그리고 Type Library를 import 하면 스마트 포인터를 사용할수 있기때문에 편리합니다.

#import를 할려면 msadoxx.tlb 파일이나 msadoxx.dll 파일이 필요합니다.
ado는 버전별로 있기때문에 본인에게 맞는 버전을 사용하면 됩니다.

import할 파일은 C:\Program Files\Common Files\System\ado\ 에 있습니다.
MFC를 이용해서 프로그래밍을 한다면 StdAfx.h에 선언해 주는게  편합니다.
StdAfx.h에 선언하지 않으면 사용하는 곳마다 계속 선언을 해줘야 합니다.

//StdAfx.h
//...
#import "C:\\Program Files\\Common Files\\System\\ado\\msado26.tlb" \
        no_namespace rename("EOF", "adoEOF")
//...

type library를 임포트 할려면 .tlb라는 파일이 필요한데 ado는 .dll에도 type library가 저장되어 있습니다.
따라서 .tlb, .dll 둘중에 아무거나 임포트 하시면 됩니다.
namespace를 사용하지 않게 옵션을 주어서 코딩시 편하게 할 수 있습니다.
간혹 이름 충돌이 발생할수 있는데 그럴때는 rename_namespace("새로운이름") 옵션으로 이름을 변경해
주시면 됩니다.

rename("EOF", "adoEOF")는 혹 다른곳에서 EOF를 사용함으로 해서 충돌나는 것을 방지해줍니다.
posted by 뚱2