정채봉 – 오늘의 명언

 
해가 들면 어떻고,
바람이 불면 어떻고,
눈이 오면 어떠랴.

해가 들어주어도 고맙고,
바람이 불어주어도 고맙고,
눈이 와주어도 고마울 뿐.

그렇다, 고맙지 않은 것이 없다.

밤은 밤이어서 고맙고,
새벽은 새벽이어서 고맙고,
낮은 낮이어서 고맙다.

아, 고마운 삼라만상이여!


facebook posting twit

  • 오일도 – 코스모스 꽃
  • 김남조 – 겨울 바다
  • 김지하 – 둥글기 때문
  • 어느 잡지에서…
  • 사랑표현 100가지
  • 윤영돈 – 한 번 쓰러지면 일어나기 힘들다.
  • 윤영돈 – 한 번 쓰러지면 일어나기 힘들다.

    많은 사람들이 실패는 성공의 어머니다 말한다.

    하지만, 그 실패가 치명적인 실수라면 결코 성공의 어머니가 될 수 없다. 특히 자기가 어떤 환경에 놓여있는지 우선 파악하는 것이 매우 중요하다.



    二曰天

    이왈천 <시계편計篇第>

    이기기 위해 두 번째로 중요한 것은 기상조건이다.



    당신은 지금 주위를 둘러보라.

    어디에 있는가? 화장실에, 사무실에, PC방에 장소에 따라 어울리는 행동이 있기 마련이다.

    자기 경영은 주위 환경에 따라 다른 방법으로 승부해야 한다.

    지금 억수 같은 비가 오는데, 우산이 없다면 어떻게 할 것인가.



    출퇴근이 정해진 회사원이라면 잘못된 시간관리로 시간이 없어 자기계발을 하지 못한다는 핑계를 대서는 안된다.

    똑같은 일을 주더라도 어떤 사람은 단 몇시간 만에 자신의 할 일을 다하는 반면, 어떤 사람은 어떻게 처리해야 할 지 고민하느냐고 몇일이 걸릴지 모른다. 중요도에 따라서 실수도 용납될 수 있으냐 없으냐가 문제인 것이다. 즉 자신이 처해 있는 환경을 정확하게 파악해서 한 번 실수로 쓰러지지 않도록 노력해야 할 것이다.


    facebook posting twit

  • 김남조 – 겨울 바다
  • 김지하 – 둥글기 때문
  • 어느 잡지에서…
  • 사랑표현 100가지
  • 정채봉 – 오늘의 명언
  • 아라시 – Yes? No?

    라이브에서 부른 노래.

    처음 부를때 이런 문구가 나온다.

    당신에게 있어서 가장 중요한 <ONE>은 무엇입니까? 그 <ONE>을 생각해 본 적이 있습니까?

    사쿠라이 쇼의 랩이 독특하게 나오는 뮤직 비디오다.



    facebook posting twit

  • 신인배우 박신혜… 민망하구먼~
  • 한국서 베일 벗은 `스타크래프트2`
  • 아라시 – 눈동자 속의 겔럭시
  • D&D – Rembering Yesterday
  • D&D – Shape Up Love
  • 아라시 – 사쿠라 사케
  • 아라시 – WISH
  • 아라시 – itsukano sama
  • 아라시 – Music Station -Kitto Daijobu
  • 귀여운 노리삐
  • 아라시 – 사쿠라 사케

    아라시의 사쿠라 사케


    握りしめた手が何か言う &#39366;け出せば間に合うさと
    니기리시메타테가나니카유- 카케다세바마니아우사토
    꽉 잡은 손이 뭔가 말했어 달려나가면 시간에 맞출수 있을거라고
    コンビにで&#38609;誌立ち&#35501;みしてた 昨日の僕に Bye-Bye
    콤비니데잣-시타치요미시테타키노-노보쿠니바이바이
    편의점에 서서 잡지를 읽던 어제의 나에게 바이바이
    走り出した街の音は &#27475;&#22768;のよう
    하시리다시타마치노오토와칸-세이노요-
    달려나갔던 거리의 소음은 환호성 같아
    サクラ&#21682;け 僕の胸のなかに 芽生えた名もなき夢たち
    사쿠라사케보쿠노무네노나카니메바에타나모나키유메다치
    벚꽃이여 피어라! 나의 가슴 속에 싹튼 이름없는 꿈들
    振り向くな 後ろには明日はないから前を向け
    후리무쿠나우시로니와아스와나이카라마에오무케
    돌아보지마 뒤에는 내일은 없으니까 앞을 향해라!

    &#39365;前で誰か歌ってる それは君の好きな歌
    에키마에데다레카우탓-테루소레와키미노스키나우타
    역 앞에서 누군가 노래하고 있어 그건 그대가 좋아하는 노래
    遠く離れても決して消えない だから別れじゃない
    토오쿠하나레테모켓시테키에나이다카라와카레쟈나이
    멀리 떨어져도 결코 사라지지 않아 그러니 이별이 아니야
    いつかふたり 望む場所でめぐり合いたい
    이쯔카후타리노조무바쇼데메구리아이타이
    언젠가 둘이서 바라는 장소에서 다시 만나고싶어
    サクラ&#21682;け 君の胸のなかで&#25594;れてた小さな&#34174;よ
    사쿠라사케키미노무네노나카데유레테타치이사나츠보미요
    벚꽃이여 피어라! 그대의 가슴 속에 흔들리던 자그마한 봉오리여
    負けないように くじけないように 今歌うから
    마케나이요-니쿠지케나이요-니이마우타우카라
    지지 않도록 꺾이지 않도록 지금 노래할테니

    未&#26469;なんてさ すぐに&#22793;わる &#22793;えてみせる
    미라이난테사스구니카와루카에테미세루
    미래따윈 금방 변해 바꿔보이겠어

    (RAP)
    「右へ ならえ」から 踏み出すこの一&#27497;を
    미기에나라에카라후미다스코노입-뽀오
    「오른쪽에 정렬」로부터 내딛는 이 한 걸음을
    打った点が分ける結果 陰と陽
    웃타텐카와케루켁카 인토요-
    쳤던 부분이 나누는 음과 양
    だから 知っとこう 生きるヒントを
    다카라싯토코- 이키루힌토오
    그러니까 알아두자 살아가는 힌트를
    かすむ蜃&#27671;&#27004;すらも つかむ勢い
    카스무신키로-스라모쯔카무이키오이
    희미해지는 신기루조차도 잡을 기세로
    今蒔けば 種 花 &#21682;かす
    이마마케바타네하나사카스
    지금 뿌린 씨앗이 꽃을 피울거야
    やった後 言うなら まだ分かるんだ
    얏타아토유-나라 마다와카룬다
    해낸 다음 말해보면 알수 있을거야
    そう そりゃ 時間なんてのは かかる
    소- 소랴 지칸난테노와카카루
    그래, 그야 시간이 걸리겠지
    春には 大きな花を&#21682;かす
    하루니와오오키나하나오사카스
    봄에는 커다란 꽃을 피울거야

    めぐり合いたい 必ず
    메구리아이타이 카나라즈
    만나고 싶어 반드시

    サクラ&#21682;け 君の胸の中で&#25594;れてた小さなつぼみよ
    사쿠라사케키미노무네노나카데유레테타치이사나츠보미요
    벚꽃이여 피어라! 그대의 가슴 속에 흔들리던 자그마한 봉오리여
    負けないように くじけないように 今歌うから
    마케나이요-니쿠지케나이요-니이마우타우카라
    지지 않도록 꺾이지 않도록 지금 노래할테니
    サクラ&#21682;け 僕の胸の中に芽生えた名もない夢たち
    사쿠라사케보쿠노무네노나카니메바에타나모나키유메다치
    벚꽃이여 피어라! 나의 가슴 속에 싹튼 이름없는 꿈들
    振り向くな 後ろには明日はないから前へ前へ
    후리무쿠나우시로니와아스와나이카라마에에마에에
    돌아보지마 뒤에는 내일은 없으니까 앞으로, 앞으로-


    아라시 - 사쿠라 사케 아라시 - 사쿠라 사케

  • 한국서 베일 벗은 `스타크래프트2`
  • 아라시 – 눈동자 속의 겔럭시
  • D&D – Rembering Yesterday
  • D&D – Shape Up Love
  • 아라시 – Yes? No?
  • 아라시 – WISH
  • 아라시 – itsukano sama
  • 아라시 – Music Station -Kitto Daijobu
  • 귀여운 노리삐
  • Kagami no Doresu – Noriko Sakai


    facebook posting twit

  • 한국서 베일 벗은 `스타크래프트2`
  • 아라시 – 눈동자 속의 겔럭시
  • D&D – Rembering Yesterday
  • D&D – Shape Up Love
  • 아라시 – Yes? No?
  • 아라시 – WISH
  • 아라시 – itsukano sama
  • 아라시 – Music Station -Kitto Daijobu
  • 귀여운 노리삐
  • Kagami no Doresu – Noriko Sakai
  • 아라시 – WISH

    마쯔모토 준이 주연으로 연기했던 꽃보다 남자의 주제가로 쓰였던 곡으로
    상당히 경쾌한 리듬의 곡이다.



    facebook posting twit

  • 아라시 – 눈동자 속의 겔럭시
  • D&D – Rembering Yesterday
  • D&D – Shape Up Love
  • 아라시 – Yes? No?
  • 아라시 – 사쿠라 사케
  • 아라시 – itsukano sama
  • 아라시 – Music Station -Kitto Daijobu
  • 귀여운 노리삐
  • Kagami no Doresu – Noriko Sakai
  • Tokunaga Hideaki – Ichiban
  • 아라시 – itsukano sama

    아이바짱이 혼자 부른 노래로 이 비디오 출연자는 딱 한명이다.
    별루 그런 느낌없었는데, 이 비디오에는 무척 잘생기게 나온다.



    facebook posting twit

  • D&D – Rembering Yesterday
  • D&D – Shape Up Love
  • 아라시 – Yes? No?
  • 아라시 – 사쿠라 사케
  • 아라시 – WISH
  • 아라시 – Music Station -Kitto Daijobu
  • 귀여운 노리삐
  • Kagami no Doresu – Noriko Sakai
  • Tokunaga Hideaki – Ichiban
  • 소년대 – 데카메론 이야기
  • 아라시 – Music Station -Kitto Daijobu

    2000년대 들어서서 일본 문화의 큰 축을 이루고 있는 아라시가 뮤직스테이션에서 노래를 부르는 장면이다.





    facebook posting twit

  • D&D – Shape Up Love
  • 아라시 – Yes? No?
  • 아라시 – 사쿠라 사케
  • 아라시 – WISH
  • 아라시 – itsukano sama
  • 귀여운 노리삐
  • Kagami no Doresu – Noriko Sakai
  • Tokunaga Hideaki – Ichiban
  • 소년대 – 데카메론 이야기
  • 소년대 – Kimi Takeni
  • wave 파일 mixing 하기. (웨이브 믹싱)

    용도는.. 배경음에다 목소리 합칠때 사용하는 겁니다.
    검증은 좀 덜됐지만, 이런식으로 하면.. 얼마든지 응용이 가능할꺼 같네요.
    그럼.. 문제 있으시면 답글 부탁드립니다.
     
     
     
    // WAVE 파일을 Mixing 한다. - 배경음 + 목소리용
    // [in] pFile1 : 목소리 파일
    // [in] pFile2 : 배경음 파일(목소리 파일보다 커야한다.)
    // [in]nPreMargineSec : 몇초 후부터 음성을 합칠것인가. (배경음만 출력되는 초기시간)
     
    int WavFileMix(char *pFile1, char *pFile2, char *pFileRes, int nPreMargineSec)
    {
        int len1, len2, len;
        short *in1, *in2;
        short *out;
        char pWaveHeader[44];
     
        CFile cf1, cf2, cfRes;
     
        if(!cf1.Open(pFile1, CFile::modeRead)) {
            return -1;
        }
     
        if(!cf2.Open(pFile2, CFile::modeRead)) {
            return -1;
        }
     
        DWORD dwFileSize1 = cf1.GetLength();
        len1 = dwFileSize1 - 44;
     
        DWORD dwFileSize2 = cf2.GetLength();
        len2 = dwFileSize2 - 44;
     
        int nRead2 = cf2.Read(pWaveHeader, 44);         // wave 헤더를 읽어온다.
        if(nRead2 <= 0)
            return -1;
     
        int nSamplesPerSec;
        memcpy(&nSamplesPerSec, &pWaveHeader[24], 4);   // 초당 샘플링을 읽어온다.
     
        if(len1 > len2)
            len = len1;
        else
            len = len2;
        
        in1 = (short*)malloc(sizeof(short)*len1);
        in2 = (short*)malloc(sizeof(short)*len2);
        out = (short*)malloc(sizeof(short)*len);
     
        cf1.Read(in1, len1);
        cf1.Close();
        
        cf2.Read(in2, len2);
        cf2.Close();
     
        // wave data mix
        WavMix(in1, in2, out, len1, len2, nPreMargineSec, nSamplesPerSec);
        
        //save output file  
        if(!cfRes.Open(pFileRes, CFile::modeCreate | CFile::modeWrite)) {
            free(in1);
            free(in2);
            free(out);
            return -1;
        }
     
        cfRes.Write(pWaveHeader, 44);                   // wave 헤더를 먼저 기록.
        cfRes.Write(out, len);
        cfRes.Close();
     
        free(in1);
        free(in2);
        free(out);
     
        return 0;
    }
     
    // Music + Voice 용도로만 사용한다. (목소리 재생시 배경음악은 볼륨을 낮춘다.)
    // WAVE 데이터를 합성한다.
    void WavMix(short *in1, short *in2, short *out, int nVoiceSize, int nMusicSize, int nPreMargineSec, int nSamplesPerSec)
    {
        int i;
        float tmp;
        float nTemp;
     
        int nVoiceMute = nSamplesPerSec * nPreMargineSec/*초*/;
     
        for(i = 0 ;i < nMusicSize; i++)
        {
            if(i < (nVoiceSize/2)+nVoiceMute)
            {
                if( i >= nVoiceMute && i < nVoiceMute+20)
                {
                    // 합쳐지는 부분의 순간 잡음을 없애기 위해.
                    // 추후 Fade Out , Fade In 사용예정
                    out[i] = 0;
                }
                else if(i < nVoiceMute)
                {
                    // 앞에 x초는 배경음만
                    out[i] = (short)in2[i];
                }
                else
                {
                    // 합친다. (합친후 다시 나누기할때의 배율은 입맛에 맞게 조절한다.)
                    nTemp = in1[i-nVoiceMute];
                    nTemp += (float)(in2[i]*0.7);
                    //tmp = (float)(nTemp / 2.0);
                    tmp = (float)(nTemp / 1.7);
     
                    out[i] = (short)tmp;
                }
            }
            else
            {
                // 배경음 뒷부분은 그대로..
                out[i] = (short)in2[i];
            }
        }
    }

    facebook posting twit

  • DirectShow에서 비디오 출력 크기 조정해주기
  • ShellExecute 실행 끝날때 까지 기다리기
  • Starting an application as an icon in the system tray
  • 디렉토리 복사 루틴 (하부디렉토리까지 몽땅)
  • File Attribute 바꾸는 방법
  • ATL/ActiveX 에서 자바스크립트로 데이터(문자열) 보내기
  • System Log-Off, Suspend, Reboot, Shutdown 시키기
  • GDI+ 에서 이미지 반투명 처리하기..
  • 자기자신 IP알아내기(로칼컴퓨터)
  • 프로세스명으로 프로세스 죽이는 함수
  • ATL/ActiveX 에서 자바스크립트로 데이터(문자열) 보내기

    음.. 보통 param 으로 엑티브X로 값을 넘겨 받아서 쓰는데요

    그 반대도 궁금해서 찾아봤더니 자료가 별로 없더군요.

    혹시나 해서 올립니다.

    1. 클래스뷰 인터페이스항목에서 메서드를 추가합니다

    2. 매개 변수 형식을 VARIANT*  로 하고 특성에 out과 retval을 설정합니다. (메서드 이름과 변수 이름은 적당히...)

    3. 구현부분을 다음과 같이 합니다.

    STDMETHODIMP CTest::TestMethod(VARIANT* pVal)
    {
        // TODO: 여기에 구현 코드를 추가합니다.
        pVal->vt=VT_BSTR;    // VARIANT 속성을 문자열로 합니다.
        pVal->bstrVal=L"테스트합니다. 이문자를 전송합니다.";
        return S_OK;
    }
     

    4. 자바스크립트 추가
     

    <script language="JavaScript">
    <!--
    function MyTest()
    {
        var v_test;
        v_test=document.Test.TestMethod();
        alert(v_test);
    }
    //-->
    </script>

     

    ...

    <OBJECT  ID="Test" .... >

    ...

    <input type="button" value="문자열 받기" onClick="MyTest();">

     

     

     

    요기서 주목할건 
     

    v_test=document.Test.TestMethod();  이부분 입니다.
     

    메서드 추가시 retval 항목을 선택하면 실제 리턴값은 pVal값이 됩니다. S_OK의 리턴값은 확인할수 없습니다만 ㅠ
     

    신기한게 자바는 원래 포인터를 따로 쓰는게 아니라 가끔 원하지 않는 동작이 나더군요...
     

    (이걸 전문용어로 설명할수 없습니다 ㅠ)
     

    예를 들어 아래 처럼 하면 에러가 납니다.
     

     

    retval 항목을 끄고
     

    document.Test.TestMethod(v_test); 
     

    라고 하면 될것 같지만 대번 에러납니다. 실력이 모자란 관계로 처음에 무척당황했습니다 -_-a
     

    실제 디버그 해보면
     

    STDMETHODIMP CTest::TestMethod(VARIANT* pVal)   ->   이부분에서 pVal값이 NULL이 나옵니다. ㅠ
     

    이상 허접한 팁이었습니다 ㅠ
     

    한분에게라도 작은 도움이 되었으면 하는 바람입니다. 🙂



    facebook posting twit

  • ShellExecute 실행 끝날때 까지 기다리기
  • Starting an application as an icon in the system tray
  • 디렉토리 복사 루틴 (하부디렉토리까지 몽땅)
  • File Attribute 바꾸는 방법
  • wave 파일 mixing 하기. (웨이브 믹싱)
  • System Log-Off, Suspend, Reboot, Shutdown 시키기
  • GDI+ 에서 이미지 반투명 처리하기..
  • 자기자신 IP알아내기(로칼컴퓨터)
  • 프로세스명으로 프로세스 죽이는 함수
  • 빈폴더 찾아내기
  • System Log-Off, Suspend, Reboot, Shutdown 시키기

    윈도우에서 시스템 Shutdown, Reboot, Log-Off는 ExitWindowsEx 함수로, Suspend는 SetSystemPowerState 함수로 가능합니다.
    윈도우 NT를 베이스로 하는 2000, XP의 경우는 시스템을 컨트롤 하기 위해서는 권한을 변경하는 과정이 필요합니다.
     
    BOOL IsWindowsNT()
    {
        OSVERSIONINFO verInfo;
        verInfo.dwOSVersionInfoSize = sizeof(verInfo);
        GetVersionEx(&verInfo) ;
        switch(verInfo.dwPlatformId)
        {
            case VER_PLATFORM_WIN32_WINDOWS:
                  return FALSE;
            case VER_PLATFORM_WIN32_NT:
                  return TRUE;
         }
       return FALSE;
    }

    BOOL AdjustSystemForShutdown()
    {
            if(IsWindowsNT() == FALSE)
                   return FALSE ;

            HANDLE hTk;
            TOKEN_PRIVILEGES tp;

            /* Get a token for this process. */
            if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hTk))
                    return FALSE;

            /* Get the LUID for the shutdown privilege. */
            LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tp.Privileges[0].Luid);

            tkp.PrivilegeCount = 1; /* one privilege to set */
            tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

            /* Get the shutdown privilege for this process. */
            return AdjustTokenPrivileges(hTk, FALSE, &tp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
    }
     


    이렇게 해서, 권한 변경에 성공하면 ExitWindowsEx, SetSystemPowerState 함수로 자신이 원하는 대로 시스템을 컨트롤 할 수 있습니다.
     
         // Windows 2000, XP       
         // Log Off
          ExitWindowsEx(EWX_LOGOFF|EWX_FORCEIFHUNG , SHTDN_REASON_FLAG_PLANNED );  

           // Shutdown
           ExitWindowsEx(EWX_POWEROFF|EWX_FORCEIFHUNG , SHTDN_REASON_FLAG_PLANNED ); // NT
     
           // Reboot
           ExitWindowsEx(EWX_REBOOT|EWX_FORCEIFHUNG,SHTDN_REASON_FLAG_PLANNED );

           // Suspend
           SetSystemPowerState(TRUE, TRUE ); // force suspend
     
          // Windows 95, 98, ME
          // Log Off
          ExitWindowsEx(EWX_LOGOFF|EWX_FORCE , 0 );  

           // Shutdown
           ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE, 0 ); // Windows 98, Windows ME

           // Reboot
           ExitWindowsEx(EWX_REBOOT|EWX_FORCE, 0 );

           // Suspend
           SetSystemPowerState(TRUE, TRUE ); // force suspend

    facebook posting twit

  • Starting an application as an icon in the system tray
  • 디렉토리 복사 루틴 (하부디렉토리까지 몽땅)
  • File Attribute 바꾸는 방법
  • wave 파일 mixing 하기. (웨이브 믹싱)
  • ATL/ActiveX 에서 자바스크립트로 데이터(문자열) 보내기
  • GDI+ 에서 이미지 반투명 처리하기..
  • 자기자신 IP알아내기(로칼컴퓨터)
  • 프로세스명으로 프로세스 죽이는 함수
  • 빈폴더 찾아내기
  • IE 패치에 따른 object, embed, applet 대처 방안
  • GDI+ 에서 이미지 반투명 처리하기..

    GDI 에선 AlphaBlend 라는 함수로 가능하기는 하는데

    찍을 부분의 이미지 색상과 혼합을 해야 제대로 구현이 됩니다

    계산식이야 MSDN 에도 있고 여기 Q&A 에 검색해도 있습니다.

    AlphaBlend 로 하다가 계산하는거 짜증나서

    GDI+ 찾아 보니까 있더군여..

    MSDN 에서 발췌했습니다.

    여기 검색해봐도 없길래... 갖다 붙여 넣습니다... 참고하세요..

     

     
    Using a Color Matrix to Set Alpha Values in Images

    The Bitmap class (which inherits from the Image class) and the ImageAttributes class provide functionality for getting and setting pixel values. You can use the ImageAttributes class to modify the alpha values for an entire image, or you can call the SetPixel method of the Bitmap class to modify individual pixel values. For more information on setting individual pixel values, see Setting the Alpha Values of Individual Pixels.

    The following example draws a wide black line and then displays an opaque image that covers part of that line.

    Bitmap bitmap(L"Texture1.jpg");
    Pen pen(Color(255, 0, 0, 0), 25);

    // First draw a wide black line.
    graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));

    // Now draw an image that covers part of the black line.
    graphics.DrawImage(&bitmap,
       Rect(30, 0, bitmap.GetWidth(), bitmap.GetHeight()));

    The following illustration shows the resulting image, which is drawn at (30, 0). Note that the wide black line doesn't show through the image.

    The ImageAtributes class has many properties that you can use to modify images during rendering. In the following example, an ImageAttributes object is used to set all the alpha values to 80 percent of what they were. This is done by initializing a color matrix and setting the alpha scaling value in the matrix to 0.8. The address of the color matrix is passed to the SetColorMatrix method of the ImageAttributes object, and the address of the ImageAttributes object is passed to the DrawImage method of a Graphics object.

     

     

    // 다음 코드가 반투명 효과를 일으키게하는 소스이며.. 주석과 같이 4행4열의 0.8값을 주의깊게 보십시요

    // 이 값을 바꿔주면서 이미지를 확인해 보시면 잘 알수 있을겁니다...

    // 그럼.. 참고하세요..

     

     

    // Create a Bitmap object and load it with the texture image.
    Bitmap bitmap(L"Texture1.jpg");
    Pen pen(Color(255, 0, 0, 0), 25);

    // Initialize the color matrix.
    // Notice the value 0.8 in row 4, column 4.
    ColorMatrix colorMatrix = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
                               0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
                               0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
                               0.0f, 0.0f, 0.0f, 0.8f, 0.0f,
                               0.0f, 0.0f, 0.0f, 0.0f, 1.0f};

    // Create an ImageAttributes object and set its color matrix.
    ImageAttributes imageAtt;
    imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault,
       ColorAdjustTypeBitmap);

    // First draw a wide black line.
    graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));

    // Now draw the semitransparent bitmap image.
    INT iWidth = bitmap.GetWidth();
    INT iHeight = bitmap.GetHeight();
    graphics.DrawImage(
       &bitmap,
       Rect(30, 0, iWidth, iHeight),  // Destination rectangle
       0,                             // Source rectangle X
       0,                             // Source rectangle Y
       iWidth,                        // Source rectangle width
       iHeight,                       // Source rectangle height
       UnitPixel,
       &imageAtt);

    During rendering, the alpha values in the bitmap are converted to 80 percent of what they were. This results in an image that is blended with the background. As the following illustration shows, the bitmap image looks transparent; you can see the solid black line through it.

    Where the image is over the white portion of the background, the image has been blended with the color white. Where the image crosses the black line, the image is blended with the color black.

    facebook posting twit

  • 디렉토리 복사 루틴 (하부디렉토리까지 몽땅)
  • File Attribute 바꾸는 방법
  • wave 파일 mixing 하기. (웨이브 믹싱)
  • ATL/ActiveX 에서 자바스크립트로 데이터(문자열) 보내기
  • System Log-Off, Suspend, Reboot, Shutdown 시키기
  • 자기자신 IP알아내기(로칼컴퓨터)
  • 프로세스명으로 프로세스 죽이는 함수
  • 빈폴더 찾아내기
  • IE 패치에 따른 object, embed, applet 대처 방안
  • HTML 긁어오는 프로그램 소스
  • 자기자신 IP알아내기(로칼컴퓨터)

    ^^.
    여러가지 방법이 올라와 있지만 제 컴에는 이넘 밖에 되지 않았습니다.
    Test 컴파일러 : VC++6.0 , VC++.NET
     
     
    #include <windows.h>
    #include <winsock.h>
    #include <stdio.h>
    #pragma comment(lib, "ws2_32.lib")
     
     
     
     CString CLogToNmdDlg::GetMyIp(void)
    {  
        CString strHostName="";
        CString strLocalIP="";
     
        char  szHostName[512] = { 0, };
        DWORD dwIP    = inet_addr("1.2.3.4");
        PBYTE pIP     =  (PBYTE)(&dwIP);
        DWORD dwTest  = dwIP;
        printf("%03d %03d %03d %03d ", pIP[0], pIP[1], pIP[2], pIP[3]);
        printf("%03d %03d %03d %03d "
            , (dwTest >> 24) & 0x000000FF
            , (dwTest >> 16) & 0x000000FF
            , (dwTest >>  8) & 0x000000FF
            ,  dwTest        & 0x000000FF
            );
        if((dwTest & 0x000000FF) != pIP[4]) //printf("당신의 시스템은 '호스트 바이트 오더'를 사용합니다 ");
            AfxMessageBox("당신의 시스템은 '호스트 바이트 오더'를 사용합니다 ");
        else                                //printf("당신의 시스템은 '네트워크 바이트 오더'를 사용합니다 ");
            AfxMessageBox("당신의 시스템은 '네트워크 바이트 오더'를 사용합니다 ");
     
     
        GetMyNetworkInfo(&dwIP, szHostName, 512);
        //printf("당신의 호스트 네임 : %s ", szHostName);
        strHostName.Format("당신의 호스트 네임 : %s", szHostName);
        //printf("당신의 아이피 주소 : %d.%d.%d.%d ", pIP[0], pIP[1], pIP[2], pIP[3]);
        strLocalIP.Format("당신의 아이피 주소 : %d.%d.%d.%d", pIP[0], pIP[1], pIP[2], pIP[3]);
        //AfxMessageBox(strLocalIP);

        return strLocalIP;
    }
     
    BOOL CLogToNmdDlg::GetMyNetworkInfo(DWORD* pdwIP, char* szHostName, int nHostNameLength)
    {
        // 인자확인
      if(!pdwIP || !szHostName || (0 >= nHostNameLength)) return false;
     
      // WSAStartup() 실행.
      WSADATA wsaData;
      WORD    wVersion = MAKEWORD(1, 1);
      if(WSAStartup(wVersion, &wsaData) == 0)
      {
        // 버전확인.
        if(wsaData.wVersion >= wVersion)
        {
          // 나의 호스트 네임 알아오기.
          if((gethostname(szHostName, nHostNameLength)) == 0)
          {
            // 나의 호스트 상세성보 알아 오기(IP알아오기)
            HOSTENT *HostEnt = gethostbyname(szHostName);
            if(HostEnt)
            {
              (*pdwIP) = (*(DWORD*)HostEnt->h_addr);
              sprintf(szHostName, HostEnt->h_addr + 4);
            }
          }
        }
     
        // WSACleanup() 실행.
        WSACleanup();
        return false;
      }
      return false;
    }

    facebook posting twit

  • File Attribute 바꾸는 방법
  • wave 파일 mixing 하기. (웨이브 믹싱)
  • ATL/ActiveX 에서 자바스크립트로 데이터(문자열) 보내기
  • System Log-Off, Suspend, Reboot, Shutdown 시키기
  • GDI+ 에서 이미지 반투명 처리하기..
  • 프로세스명으로 프로세스 죽이는 함수
  • 빈폴더 찾아내기
  • IE 패치에 따른 object, embed, applet 대처 방안
  • HTML 긁어오는 프로그램 소스
  • 작업관리자에 프로그램 안뜨게 하기
  • 프로세스명으로 프로세스 죽이는 함수

    /*
        사용법 : ExitProcessName("IEXPLORE.EXE"); //한줄이면 됨..ㅋ
    */

    #include "psapi.h" // Psapi.lib 라이브러리 추가 해야 됨 [VS 2003 프로젝트 속성-링커-입력-추가종속성]에 넣어줄것 [VS6.0-project-settings-Link 탭에 Object/library modles에 넣어 줄것! ]

    //psapi.h MS에서 지원해주는 거임 2003은 그냥 컴파일되나 6.0은 SDK 설치 해야 됨..

     

    void ExitProcessName(CString strProcessName)
    {
        DWORD aProcesses[1024], cbNeeded, cProcesses;
        unsigned int i;

        if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
            return;

        // Calculate how many process identifiers were returned.
        cProcesses = cbNeeded / sizeof(DWORD);

        // Print the name and process identifier for each process.

        for ( i = 0; i < cProcesses; i++ )
        {
            char szProcessName[MAX_PATH] = "unknown";

            HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                PROCESS_VM_READ,
                FALSE, aProcesses[i] );
     

            if (NULL != hProcess )
            {
                HMODULE hMod;
                DWORD cbNeeded;

                if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
                    &cbNeeded) )
                {
                    GetModuleBaseName( hProcess, hMod, szProcessName,
                        sizeof(szProcessName) );
                }
            }

            bool bRet;

                if(strcmp(szProcessName,(LPSTR)(LPCTSTR)strProcessName)==0)
                {
                    HANDLE hProcess = NULL;

                    hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, aProcesses[i]);
                    if(hProcess != NULL)
                    {        
                        DWORD    ExitCode = 0;

                        GetExitCodeProcess( hProcess, &ExitCode );
                        bRet = ::TerminateProcess(hProcess, ExitCode );                

                        if( bRet )
                        {
                            ::WaitForSingleObject(hProcess, INFINITE);
                        }

                        ::CloseHandle(hProcess);
                    }
                }
                CloseHandle( hProcess );
        }
    }

    facebook posting twit

  • wave 파일 mixing 하기. (웨이브 믹싱)
  • ATL/ActiveX 에서 자바스크립트로 데이터(문자열) 보내기
  • System Log-Off, Suspend, Reboot, Shutdown 시키기
  • GDI+ 에서 이미지 반투명 처리하기..
  • 자기자신 IP알아내기(로칼컴퓨터)
  • 빈폴더 찾아내기
  • IE 패치에 따른 object, embed, applet 대처 방안
  • HTML 긁어오는 프로그램 소스
  • 작업관리자에 프로그램 안뜨게 하기
  • String Find Function (StrFnd)
  • 빈폴더 찾아내기

    주어진 경로 하위에 위치한 빈폴더를 모두 찾아내 삭제하는 함수입니다.

    수정해야 할부분이 있다면 알려주세요 ^^




    BOOL DelEmptyFolder(CString strPath)
    {       
        CFileFind finder;
        int nValidCnt = 0;

        BOOL bWorking = finder.FindFile(strPath + "*.*");

        
        while (bWorking)
        {
            bWorking = finder.FindNextFile();

            if(finder.IsDots()) continue;
            else if(finder.IsDirectory())
            {
                if(DelEmptyFolder(finder.GetFilePath()) == TRUE)
                    nValidCnt++;                
            }
            else
                nValidCnt++;        
        }

        if(nValidCnt == 0)
        {
            // 폴더 삭제 명령 작성할 위치
            cout << "Del: " << (LPCTSTR)strPath << endl;
            return FALSE;
        }

        return TRUE;
    }



    facebook posting twit

  • ATL/ActiveX 에서 자바스크립트로 데이터(문자열) 보내기
  • System Log-Off, Suspend, Reboot, Shutdown 시키기
  • GDI+ 에서 이미지 반투명 처리하기..
  • 자기자신 IP알아내기(로칼컴퓨터)
  • 프로세스명으로 프로세스 죽이는 함수
  • IE 패치에 따른 object, embed, applet 대처 방안
  • HTML 긁어오는 프로그램 소스
  • 작업관리자에 프로그램 안뜨게 하기
  • String Find Function (StrFnd)
  • Toolbar에서 Icon 없애기
  • IE 패치에 따른 object, embed, applet 대처 방안

    기존 방법
    <html>
    <body>
    <embed src="examplecontrol">
    </body>
    </html>



    <html>
    <body>
    <script src="Embed.js"></script>
    </body>

    Embed.js
    document.write(‘<embed src=”examplecontrol”>’);

    단점 : embed 시킬 파일마다 js파일을 생성해주어야함 ㅡㅡa



    facebook posting twit

  • System Log-Off, Suspend, Reboot, Shutdown 시키기
  • GDI+ 에서 이미지 반투명 처리하기..
  • 자기자신 IP알아내기(로칼컴퓨터)
  • 프로세스명으로 프로세스 죽이는 함수
  • 빈폴더 찾아내기
  • HTML 긁어오는 프로그램 소스
  • 작업관리자에 프로그램 안뜨게 하기
  • String Find Function (StrFnd)
  • Toolbar에서 Icon 없애기
  • 웹브라우져가 떠서 웹페이지 보이게 하는 소스
  • Virtusertable

    참고 ~ http://www.oops.org/lecture.php?n=4&sb=sendmail


    이 part는 virtual hosting시에 여려명의 user가 서로 같은 계정을 요구할때의 곤란함을 해결하기 위한 방법을 제시한다. 이 방법은 sendmail의 virtual user table을 이용하며 sendamil의 compile 방법 및 기본 설정에 대해서는 KLDP에 한글 자료가 있으니 참고하기를 바라고, 이 강좌에서 설정할 virtual user table 기능을 추가하기 위해서는 sendmail의 공식 홈페이지에서 virtual hosting 관련 page를 참고하기 바란다. 또는 FTP 의 sendmail을 이용하는 것도 가능하다. 또한 요즘의 왠만한 배포본에 들어 있는 sendmail 의 경우에는 기본적으로 지원을 하는 추세이다.



    Hanterm - cat /etc/mail/virtusertable

    [root@oops mail]# cat virtusertable

    # 이 file은 virtual user를 설정하는 file이다.
    # 실제로 없는 계정을 mapping 할수 있으며, 같은 이름 역시
    # domain 별로 다르게 mapping 할수 있다.
    #                                                                      
    # 작성후
    # makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
    # 명령을 실행 해 줘야 한다.
    #
    #                  작성  김정균. <admin at oops.org>      

    admins@oops.org bbuwoo@chollian.net
    sales@oops.org oops
    help@oops.org oops
                                                      
    admins@abc.co.kr abc
    sales@abc.co.kr abc
    help@abc.co.kr abc@abc-kr.co.kr      
    @abc.co.kr error: nouser Unknown User

    @asdf.com asdf
    @bbc.co.kr %1@other.oops.org

    [root@oops mail]#





    이 file은 sendmail의 virtual user를 이용하기 위한 설정 file이다. virtual user table을 이용하기 위해서 즉, 이 file을 이용하기 위해서는 /etc/mail/sendmail.cf에서


    Kvirtuser hash /etc/mail/virtusertable
    과 virtual user handle 이 정의 되어 있어야 하며 FTP 에서 받은 package에는 미리 이 설정들을 정의를 해 놓았으니 걱정할 필요는 없다.

    그럼 위의 file에서 설정한 것들에 대해 간단하게 설명을 하겠다. 이 설정으로 보아 이 설정 file이 존재하는 host에는 oops.org 이라는 domain과 abc.co.kr 이라는 2개의 domain을 가지고 있는 것으로 예상을 할수가 있다. 그리고 대충 눈치를 보아서 oops라는 계정과 abc라는 계정을 가지고 있다는 것도 눈치가 빠른 사람이라면 금방 알수 있을 것이다.

    그럼 간단하게 세 줄을 가지고 이 file에 대해서는 설명을 할수가 있다.


    admins@oops.org bbuwoo@chollian.net
    admins@abc.co.kr abc
    @asdf.com asdf


    보통 sendmail에서 위의 하나의 host에 여러개의 account를 가지고 있다고 해도 e-mail address의 ID가 같다면 모두 동일한 계정으로 가게된다. 하지만 sendmail 의 Virtual User Table을 사용하여 위와 같이 설정을 함에 따라 admin이라는 계정이 없음에도 불구하고 또한 같은 account 임에도 불구하고 mail address의 domain에 따라서 admins@oops.org으로 가는 mail은 bbuwoo@chollian.net 으로 mapping 하며, admins@abc.co.kr 으로 가는 mail을 abc 라는 계정으로 갈수 있게 하는 것이다. 앞부분은 가상의 e-mail account가 되는 것이며 뒷부분은 가상의 e-amil address로 오는 mail을 실제로 받는 계정이 된다. 또한 마지막 예는 asdf.com으로 보내는 메일은 어떤 계정으로 보내더라도 모두 asdf 라는 계정으로 메일을 가게 하는 것을 뜻한다.

    localhost의 account로 mapping을 할수도 있으며, 다른 host의 account로도 mapping이 가능하다. 이 virtual user table을 잘만 이용한다면 aliases는 별 사용할 필요가 없어 지기도 한다.

    그럼 다음의 예를 보도록 한다.


      @abc.co.kr error: nouser Unknown User
      @bbc.co.kr %1@other.oops.org


    위에서 이 설정들의 용도를 살펴 보자면 일단 첫번째줄 부터 설명을 하겠다. 첫번째 줄의 경우 admins@abc.co.kr, sales@abc.co.kr, help@abc.co.kr 외에 abc.co.kr 이라는 도메인으로 오는 메일들은 virtusertable에서는 해당 설정이 없기 때문에 다음 단계인 aliases file로 넘어가게 되며 aliases에서도 해당 설정이 없으면 실제 계정을 찾게 된다. 그럼 문제는 대형 메일 서버일경우 이렇게 실제 계정을 찾는 단계까지 갔음에도 불구하고 없는 계정이라면 상당한 서버 부하를 가져 올수도 있는 문제가 발생한다. 그래서 이 설정을 함으로서 admin, sales, help 외의 계정으로 abc.co.kr이라는 도에민으로 오는 메일들은 virtusertable 차원에서 return을 시켜 버리는 역할을 하게 되는 것이다. 잘 사용하면 그만큼 부하를 낯출수도 있는 것이다.

    그럼 다음줄을 보면 이상한 것을 볼수 있다. 즉 "%1" 이라는 표현법을 볼수 있다. 이 %1은 실제 메일 header에 들어 있는 메일 주소의 account부분 즉 admins@abc.co.kr로 온 메일이라면 이중 admin 을 %1에 match를 하게 된다.

    이 file의 설정을 끝냈다고 해서 설정이 그대로 적용되지는 않는다. sendmail에서는 대체로 text 설정 file들을 DB화 하여 db file들을 이용하여 설정을 적용시킨다. 이 virtusertable file을 db화 하여 놓은 file이 /etc/mail/virtusertable.db 이다. virtusertable을 db file로 적용시키기 위하여 virtusertable을 저장한 후에 shell에서


    makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
    명령으로서 virtusertable.db file을 갱신 시켜 줘야 한다. 만약 NDBM으로 sendmail을 compile했다면 모든 설정 file들의 hash를 dbm 으로 바꾸어 줘야 한다. hash는 버클리 DB(NEWDBM)을 의미한다.
    이곳의 패키지를 설치를 했다면 좀더 쉽게 할수가 있다. /etc/mail밑에 보면 makemap.sh 라는 file이 존재를 한다. 그럼 /etc/mail 로 이동을 하여 SHELL> ./makemap.sh virt 를 실행하면 위의 방법과 동일한 결과를 가져 온다.

    이 정도면 virtual user table에 대한 설명은 끝났다. 좀더 정밀한 setting은 이 page의 상단에 link되어 있는 sendmail page의 virtual hosting 문서를 살펴 보기 바란다.


    facebook posting twit

  • cgi File Downloading Module
  • AES (Advanced Encryption Standard) Source Code
  • Simple Socket Server based on C
  • UNIX에서 LOCALTIME 구하는 방법 & GetTicketCount()
  • how to lock workstation? seems like shutdown
  • 웹서버 및 웹메일 설정 방법
  • 음력-양력 변환기
  • PHP에서 메일 함수가 동작하지 않을때
  • 웹페이지 긁어서 타이틀 뿌려주는 소스
  • PHP로 객체지향 프로그래밍 하는 방법
  • 웹서버 및 웹메일 설정 방법

    # 가상 유저 (virtual user) 설정방법

    /etc/mail/virtual***
    파일에 설정하고자 하는 user를 설정하고 다음과 같이 실행
    rm -rf *.db
    make
    /etc/rc.d/init.d/sendmail restart


    # 다중 도메인 (virtual domain; 가상 도메인) 설정 방법

    /etc/mail/local-domain-names 파일에 쓰고자하는 도메인명을 추가하고 다음과 같이 실행

    rm -rf *.db
    make
    /etc/rc.d/init.d/sendmail restart


    # POP3 서버 및 SMTP 서버 설정 방법
    자세한 것은 첨부파일 참조...

    facebook posting twit

  • AES (Advanced Encryption Standard) Source Code
  • Simple Socket Server based on C
  • UNIX에서 LOCALTIME 구하는 방법 & GetTicketCount()
  • how to lock workstation? seems like shutdown
  • Virtusertable
  • 음력-양력 변환기
  • PHP에서 메일 함수가 동작하지 않을때
  • 웹페이지 긁어서 타이틀 뿌려주는 소스
  • PHP로 객체지향 프로그래밍 하는 방법
  • 파일 업로드 (file upload) 사이즈 늘리기
  • 음력-양력 변환기

    $Lunar_Month = array(
    /* 1881 */ // 1881년 1월 30일은 음력 1월 1일
        "1","2","1","2","1","2","2","3","2","2","1","2","1",   "1","2","1","2","1","2","1","2","2","1","2","2","0",
        "1","1","2","1","1","2","1","2","2","2","1","2","0",   "2","1","1","2","1","3","2","1","2","2","1","2","2",  
        "2","1","1","2","1","1","2","1","2","1","2","2","0",   "2","1","2","1","2","1","1","2","1","2","1","2","0",
        "2","2","1","2","3","2","1","1","2","1","2","1","2",   "2","1","2","2","1","2","1","1","2","1","2","1","0",  
        "2","1","2","2","1","2","1","2","1","2","1","2","0",   "1","2","3","2","1","2","2","1","2","1","2","1","2",  
    /*1891*/
        "1","2","1","2","1","2","1","2","2","1","2","2","0",   "1","1","2","1","1","2","3","2","2","1","2","2","2",
        "1","1","2","1","1","2","1","2","1","2","2","2","0",   "1","2","1","2","1","1","2","1","2","1","2","2","0",  
        "2","1","2","1","2","3","1","2","1","2","1","2","1",   "2","2","2","1","2","1","1","2","1","2","1","2","0",
        "1","2","2","1","2","1","2","1","2","1","2","1","0",   "2","1","2","3","2","2","1","2","1","2","1","2","1",  
        "2","1","2","1","2","1","2","2","1","2","1","2","0",   "1","2","1","1","2","1","2","2","3","2","2","1","2",  
    /*1901*/
        "1","2","1","1","2","1","2","1","2","2","2","1","0",   "2","1","2","1","1","2","1","2","1","2","2","2","0",
        "1","2","1","2","1","3","2","1","1","2","2","1","2",   "2","2","1","2","1","1","2","1","1","2","2","1","0",  
        "2","2","1","2","2","1","1","2","1","2","1","2","0",   "1","2","2","1","4","1","2","1","2","1","2","1","2",
        "1","2","1","2","1","2","2","1","2","1","2","1","0",   "2","1","1","2","2","1","2","1","2","2","1","2","0",  
        "1","2","3","1","2","1","2","1","2","2","2","1","2",   "1","2","1","1","2","1","2","1","2","2","2","1","0",  
    /*1911*/
        "2","1","2","1","1","2","3","1","2","2","1","2","2",   "2","1","2","1","1","2","1","1","2","2","1","2","0",
        "2","2","1","2","1","1","2","1","1","2","1","2","0",   "2","2","1","2","2","3","1","2","1","2","1","1","2",  
        "2","1","2","2","1","2","1","2","1","2","1","2","0",   "1","2","1","2","1","2","2","1","2","1","2","1","0",
        "2","1","3","2","1","2","2","1","2","2","1","2","1",   "2","1","1","2","1","2","1","2","2","2","1","2","0",  
        "1","2","1","1","2","1","2","3","2","2","1","2","2",   "1","2","1","1","2","1","1","2","2","1","2","2","0",  
    /*1921*/
        "2","1","2","1","1","2","1","1","2","1","2","2","0",   "2","1","2","2","1","3","2","1","1","2","1","2","2",
        "1","2","2","1","2","1","2","1","2","1","1","2","0",   "2","1","2","1","2","2","1","2","1","2","1","1","0",  
        "2","1","2","2","3","2","1","2","2","1","2","1","2",   "1","1","2","1","2","1","2","2","1","2","2","1","0",
        "2","1","1","2","1","2","1","2","2","1","2","2","0",   "1","2","3","1","2","1","1","2","2","1","2","2","2",  
        "1","2","1","1","2","1","1","2","1","2","2","2","0",   "1","2","2","1","1","2","3","1","2","1","2","2","1",
    /*1931*/
        "2","2","2","1","1","2","1","1","2","1","2","1","0",   "2","2","2","1","2","1","2","1","1","2","1","2","0",
        "1","2","2","1","2","4","1","2","1","2","1","1","2",   "1","2","1","2","2","1","2","2","1","2","1","2","0",  
        "1","1","2","1","2","1","2","2","1","2","2","1","0",   "2","1","1","4","1","2","1","2","1","2","2","2","1",
        "2","1","1","2","1","1","2","1","2","2","2","1","0",   "2","2","1","1","2","1","1","4","1","2","2","1","2",  
        "2","2","1","1","2","1","1","2","1","2","1","2","0",   "2","2","1","2","1","2","1","1","2","1","2","1","0",
    /*1941*/
        "2","2","1","2","2","1","4","1","1","2","1","2","1",   "2","1","2","2","1","2","2","1","2","1","1","2","0",
        "1","2","1","2","1","2","2","1","2","2","1","2","0",   "1","1","2","1","4","1","2","1","2","2","1","2","2",  
        "1","1","2","1","1","2","1","2","2","2","1","2","0",   "2","1","1","2","1","1","2","1","2","2","1","2","0",
        "2","2","3","1","2","1","1","2","1","2","1","2","2",   "2","1","2","1","2","1","1","2","1","2","1","2","0",  
        "2","2","1","2","1","2","1","3","2","1","2","1","2",   "2","1","2","2","1","2","1","1","2","1","2","1","0",  
    /*1951*/
        "2","1","2","2","1","2","1","2","1","2","1","2","0",   "1","2","1","2","1","4","2","1","2","1","2","1","2",
        "1","2","1","1","2","2","1","2","2","1","2","2","0",   "1","1","2","1","1","2","1","2","2","1","2","2","0",  
        "2","1","1","4","1","1","2","1","2","1","2","2","2",   "1","2","1","2","1","1","2","1","2","1","2","2","0",
        "2","1","2","1","2","1","1","2","3","2","1","2","2",   "1","2","2","1","2","1","1","2","1","2","1","2","0",  
        "1","2","2","1","2","1","2","1","2","1","2","1","0",   "2","1","2","1","2","2","3","2","1","2","1","2","1",  
    /*1961*/
        "2","1","2","1","2","1","2","2","1","2","1","2","0",   "1","2","1","1","2","1","2","2","1","2","2","1","0",
        "2","1","2","1","3","2","1","2","1","2","2","2","1",   "2","1","2","1","1","2","1","2","1","2","2","2","0",  
        "1","2","1","2","1","1","2","1","1","2","2","1","0",   "2","2","2","3","2","1","1","2","1","1","2","2","1",
        "2","2","1","2","2","1","1","2","1","2","1","2","0",   "1","2","2","1","2","1","2","3","2","1","2","1","2",  
        "1","2","1","2","1","2","2","1","2","1","2","1","0",   "2","1","1","2","2","1","2","1","2","2","1","2","0",  
    /*1971*/
        "1","2","1","1","2","3","2","1","2","2","2","1","2",   "1","2","1","1","2","1","2","1","2","2","2","1","0",
        "2","1","2","1","1","2","1","1","2","2","2","1","0",   "2","2","1","2","3","1","2","1","1","2","2","1","2",  
        "2","2","1","2","1","1","2","1","1","2","1","2","0",   "2","2","1","2","1","2","1","2","3","2","1","1","2",
        "2","1","2","2","1","2","1","2","1","2","1","1","0",   "2","2","1","2","1","2","2","1","2","1","2","1","0",  
        "2","1","1","2","1","2","4","1","2","2","1","2","1",   "2","1","1","2","1","2","1","2","2","1","2","2","0",  
    /*1981*/
        "1","2","1","1","2","1","1","2","2","1","2","2","0",   "2","1","2","1","3","2","1","1","2","2","1","2","2",
        "2","1","2","1","1","2","1","1","2","1","2","2","0",   "2","1","2","2","1","1","2","1","1","2","3","2","2",  
        "1","2","2","1","2","1","2","1","1","2","1","2","0",   "1","2","2","1","2","2","1","2","1","2","1","1","0",
        "2","1","2","2","1","2","3","2","2","1","2","1","2",   "1","1","2","1","2","1","2","2","1","2","2","1","0",  
        "2","1","1","2","1","2","1","2","2","1","2","2","0",   "1","2","1","1","2","3","1","2","1","2","2","2","2",  
    /*1991*/
        "1","2","1","1","2","1","1","2","1","2","2","2","0",   "1","2","2","1","1","2","1","1","2","1","2","2","0",
        "1","2","2","3","2","1","2","1","1","2","1","2","1",   "2","2","2","1","2","1","2","1","1","2","1","2","0",  
        "1","2","2","1","2","2","1","2","3","2","1","1","2",   "1","2","1","2","2","1","2","1","2","2","1","2","0",
        "1","1","2","1","2","1","2","2","1","2","2","1","0",   "2","1","1","2","1","3","2","2","1","2","2","2","1",  
        "2","1","1","2","1","1","2","1","2","2","2","1","0",   "2","2","1","1","2","1","1","2","1","2","2","1","0",  
    /*2001*/
        "2","2","2","1","3","2","1","1","2","1","2","1","2",   "2","2","1","2","1","2","1","1","2","1","2","1","0",
        "2","2","1","2","2","1","2","1","1","2","1","2","0",   "1","2","3","2","2","1","2","1","2","2","1","1","2",  
        "1","2","1","2","1","2","2","1","2","2","1","2","0",   "1","1","2","1","2","1","2","3","2","2","1","2","2",
        "1","1","2","1","1","2","1","2","2","2","1","2","0",   "2","1","1","2","1","1","2","1","2","2","1","2","0",  
        "2","2","1","1","2","3","1","2","1","2","1","2","2",   "2","1","2","1","2","1","1","2","1","2","1","2","0",  
    /*2011*/
        "2","1","2","2","1","2","1","1","2","1","2","1","0",   "2","1","2","4","2","1","2","1","1","2","1","2","1",
        "2","1","2","2","1","2","1","2","1","2","1","2","0",   "1","2","1","2","1","2","1","2","2","3","2","1","2",  
        "1","2","1","1","2","1","2","2","2","1","2","2","0",   "1","1","2","1","1","2","1","2","2","1","2","2","0",
        "2","1","1","2","1","3","2","1","2","1","2","2","2",   "1","2","1","2","1","1","2","1","2","1","2","2","0",  
        "2","1","2","1","2","1","1","2","1","2","1","2","0",   "2","1","2","2","3","2","1","1","2","1","2","1","2",  
    /*2021*/
        "1","2","2","1","2","1","2","1","2","1","2","1","0",   "2","1","2","1","2","2","1","2","1","2","1","2","0",
        "1","2","3","2","1","2","1","2","2","1","2","1","2",   "1","2","1","1","2","1","2","2","1","2","2","1","0",  
        "2","1","2","1","1","2","3","2","1","2","2","2","1",   "2","1","2","1","1","2","1","2","1","2","2","2","0",
        "1","2","1","2","1","1","2","1","1","2","2","2","0",   "1","2","2","1","2","3","1","2","1","1","2","2","1",  
        "2","2","1","2","2","1","1","2","1","1","2","2","0",   "1","2","1","2","2","1","2","1","2","1","2","1","0",  
    /*2031*/
        "2","1","2","3","2","1","2","2","1","2","1","2","1",   "2","1","1","2","1","2","2","1","2","2","1","2","0",
        "1","2","1","1","2","1","2","3","2","2","2","1","2",   "1","2","1","1","2","1","2","1","2","2","2","1","0",  
        "2","1","2","1","1","2","1","1","2","2","1","2","0",   "2","2","1","2","1","1","4","1","1","2","1","2","2",
        "2","2","1","2","1","1","2","1","1","2","1","2","0",   "2","2","1","2","1","2","1","2","1","1","2","1","0",  
        "2","2","1","2","2","3","2","1","2","1","2","1","1",   "2","1","2","2","1","2","2","1","2","1","2","1","0",  
    /*2041*/
        "2","1","1","2","1","2","2","1","2","2","1","2","0",   "1","2","3","1","2","1","2","1","2","2","2","1","2",
        "1","2","1","1","2","1","1","2","2","1","2","2","0"
    );

    function is_yun_year($year)
    {
            if ($year % 4 != 0) return 0;   /* not yun year */
            if ($year % 100 != 0) return 1; /* yun year */
            if ($year % 400 != 0) return 0;  /* not yun year */
            return 1;                                               /* yun year */
    }


    function how_many_days($year, $month)
    {
        switch($month)
        {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            return 31;
        case 4: case 6: case 9: case 11:
            return 30;
        case 2:
            if (is_yun_year($year)) return 29;
            else return 28;
        }
    }

    function end_day_of_lunar_month($year, $month)
    {
        global $Lunar_Month;

        for ($i = 0; $i < $month; $i++) {
            $flag = $Lunar_Month[$year-1880][$i];
            if ($flag == '3' || $flag == '4') break;
        }
        if ($i != month)
            $flag = $Lunar_Month[($year-1880)*13+$month];
        else $flag = $Lunar_Month[($year-1880)*13+$month-1];

        if ($flag == '1') return 29;
        else return 30;
    }

    function solar_to_lunar($year, $month, $day)
    {
        global $Lunar_Month , $lunar_date;
        $total_day = 0;

        // 해의 범위를 측정한다.
        if ($year < 1881 || $year > 2043) return -1;

        for ($i = 0; $i < 163; $i++) {
            $Sum_of_Lunar_Day[$i]=0;  // 1년의 음력 날자의 합을 저장하는 배열

            $list_of_year[$i]=1881+$i;

            for ($j = 1; $j <= 13; $j++) {
                $this_month = $i*13+$j-1;
                switch($Lunar_Month[$this_month]) {
                    case '0':
                        break;
                    case '1': case '3':
                        $Sum_of_Lunar_Day[$i] = $Sum_of_Lunar_Day[$i] + 29;
                        $imsi=29;
                        break;
                    case '2': case '4':
                        $Sum_of_Lunar_Day[$i] = $Sum_of_Lunar_Day[$i] + 30;
                        $imsi=30;
                        break;
                }
            }
        }

        /* 오늘까지의 양력 날자의 합구하기. */
        /* 1881-1-30이 음력 1월 1일이나깐 1880년까지 날에 29일을 더한다. */
        $sum_of_1881 = (int)(1880*365 + 1880/4 - 1880/100 + 1880/400 + 29);

        /* 입력받은 날까지의 날짜의 합구하기 */
        //--- 작년 까지의 날짜의 합 ---//
        $last_year=$year-1;
        $sum_of_today = (int)($last_year*365 + $last_year/4 - $last_year/100 + $last_year/400);

        //--- 자난 달 까지의 날짜의 합 ---//
        for($i = 1; $i < $month ; $i++){
            $sum_of_today = $sum_of_today + how_many_days($year,$i);
        }

        //--- 오늘까지의 날짜의 합 ---//
        $sum_of_today = $sum_of_today + $day;

        // 오늘까지의 날짜 합에서 1881년 1월 29일의 날짜의 합을 뺀다.//
        // $total_day는 날짜의 차이..
        if($year == 1881) $total_day  = $sum_of_today - $sum_of_1881;
        else $total_day  = $sum_of_today - $sum_of_1881 -1;

        //--------------------------------------------------------------------//
        // 이제 부터 음력을 계산 한다..
        $total_imsi = $Sum_of_Lunar_Day[0];
        for($i = 0; $i < 163; $i++) {
            if ($total_day <= $total_imsi) break;
            else $total_imsi = $total_imsi + $Sum_of_Lunar_Day[$i + 1];
        }

        $lun_year = $i + 1881; // 음력 년도 구함..

        $ext_total_day = $total_day - $total_imsi + $Sum_of_Lunar_Day[$i];;

        if ($Lunar_Month[$i*13+12] == '0') $count = 12;
        else $count = 13;

        $m2 = 0;
        for ($j = 0; $j < $count; $j++) {
            $this = $i*13+$j;
            if ($Lunar_Month[$this] == 1) {
                $m2++;
                $m1 = $Lunar_Month[$this] + 28;
                $is_yun_month = 0;
            }
            else if ($Lunar_Month[$this] == 2) {
                $m2++;
                $m1 = $Lunar_Month[$this] + 28;
                $is_yun_month = 0;
            }
            else if ($Lunar_Month[$this] == 3) {
                $m1 = $Lunar_Month[$this] + 26;
                $is_yun_month = 1;
            }
            else {
                $m1 = $Lunar_Month[$this] + 26;
                $is_yun_month = 1;
            }

            // 다음달이 윤달인지 아닌지를 리턴한다..
            // 넘기는 이유는 생일자의 쿼리 전송을 위해서..
            // 음력 윤달의 생일자 또는 평달에 태어난 생일자가
            // 윤달이 다음달에도 나오지 않게.
            // 그러니깐 생일이 두번 생기지 않도록

            $next = $i*13+$j+1;
            if ($Lunar_Month[$next] == 1) $next_is_yun_month = 0;
            else if ($Lunar_Month[$next] == 2) $next_is_yun_month = 0;
            else if ($Lunar_Month[$next] == 3) $next_is_yun_month = 1;
            else $next_is_yun_month = 1;


            if ($ext_total_day <= $m1) break;
            $ext_total_day = $ext_total_day - $m1;
        }

        $lunar_year = $lun_year;
        $lunar_month = $m2;
        $lunar_day = (int)($ext_total_day);
        $is_lunar = $is_yun_month;
        $next_is_lunar =$next_is_yun_month;

        if($lunar_month <10) $lunar_month="0".$lunar_month;
        if($lunar_day <10) $lunar_day="0".$lunar_day;

        $lunar_date = "$lunar_year"."년"." "."$lunar_month"."월"." "."$lunar_day"."일";

    return $lunar_date;
    }
    $Y = date("Y");
    $M = date("m");
    $D = date("d");
    solar_to_lunar($Y, $M, $D);
    echo $lunar_date;

    facebook posting twit

  • Simple Socket Server based on C
  • UNIX에서 LOCALTIME 구하는 방법 & GetTicketCount()
  • how to lock workstation? seems like shutdown
  • Virtusertable
  • 웹서버 및 웹메일 설정 방법
  • PHP에서 메일 함수가 동작하지 않을때
  • 웹페이지 긁어서 타이틀 뿌려주는 소스
  • PHP로 객체지향 프로그래밍 하는 방법
  • 파일 업로드 (file upload) 사이즈 늘리기
  • PHP에서 메일 함수가 동작하지 않을때

     
    php.ini 파일에 보면 sendmail 설정 부분이 있습니다. 그곳에 -i 옵션이 설정되어 있는지 확인해보세요.


    [mail function]
    SMTP                    =       localhost                       ;for win32 only
    ;sendmail_from  =       me@localhost.com        ;for win32 only
    sendmail_path   =       /usr/sbin/sendmail -t -i ;for unix only, may supply arguments as well (default is 'sendmail -t -i') (linux 시스템의 일반적인 sendmail 위치.. 확인해보고 바르게 지정해보세요.)


    facebook posting twit

  • UNIX에서 LOCALTIME 구하는 방법 & GetTicketCount()
  • how to lock workstation? seems like shutdown
  • Virtusertable
  • 웹서버 및 웹메일 설정 방법
  • 음력-양력 변환기
  • 웹페이지 긁어서 타이틀 뿌려주는 소스
  • PHP로 객체지향 프로그래밍 하는 방법
  • 파일 업로드 (file upload) 사이즈 늘리기
  • 어떤 파라메터가 넘어왔는지 알아내는 함수

     
    어떤 변수들이 post 또는 get method로 넘어왔는지 알아낼 수 있는 함수

    //HTTP_POST_VARS 란 인수에서 POST 값들을 이름:값 형식으로 하나씩 추출해 냅니다.

    while(list($Post_Name, $Post_Val)=each($HTTP_POST_VARS))
    {
      echo("$Post_Name: $Post_Val<br> ");
    }


    이 방법을 사용하면 http://m.kurapa.com/?바보=천치 라는 식으로 파라메터를 보낼때

    바보라는 파라메터를 사용했는지 알아 낼 수 있다.


    참고로 GET Method일때는 다음의 방법을 사용하기 바란다.

      while(list($Post_Name, $Post_Val)=each($HTTP_GET_VARS))
      {
        $rss = $Post_Name;
        break;
      }





    facebook posting twit

  • UNIX에서 LOCALTIME 구하는 방법 & GetTicketCount()
  • how to lock workstation? seems like shutdown
  • Virtusertable
  • 웹서버 및 웹메일 설정 방법
  • 음력-양력 변환기
  • 웹페이지 긁어서 타이틀 뿌려주는 소스
  • PHP로 객체지향 프로그래밍 하는 방법
  • 파일 업로드 (file upload) 사이즈 늘리기
  • 뭐 어쩌라는 것은 아니고요

    ?>