<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ljkoy26-desktop.log</title>
        <link>https://velog.io/</link>
        <description>MFC, C++, DBMS, Oracle, DB2</description>
        <lastBuildDate>Sun, 14 Jul 2024 04:21:58 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ljkoy26-desktop.log</title>
            <url>https://images.velog.io/images/ljkoy26-desktop/profile/a4495677-3f08-4200-a73a-dbf161c56799/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ljkoy26-desktop.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ljkoy26-desktop" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Android] 프로젝트의 보기 방식 변경 ]]></title>
            <link>https://velog.io/@ljkoy26-desktop/Android-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%9D%98-%EB%B3%B4%EA%B8%B0-%EB%B0%A9%EC%8B%9D-%EB%B3%80%EA%B2%BD</link>
            <guid>https://velog.io/@ljkoy26-desktop/Android-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%9D%98-%EB%B3%B4%EA%B8%B0-%EB%B0%A9%EC%8B%9D-%EB%B3%80%EA%B2%BD</guid>
            <pubDate>Sun, 14 Jul 2024 04:21:58 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/a6825e22-4ac4-4ee3-afb7-506865daac9d/image.png" alt=""></p>
<p>project4_2 하단 부분을 클릭하여 하단 드롭다운 리스트로 프로젝트 보기방식을 변경할수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Android] android Studio Run 실행시 발생할수 있는 오류]]></title>
            <link>https://velog.io/@ljkoy26-desktop/Android-android-Studio-Run-%EC%8B%A4%ED%96%89%EC%8B%9C-%EB%B0%9C%EC%83%9D%ED%95%A0%EC%88%98-%EC%9E%88%EB%8A%94-%EC%98%A4%EB%A5%98</link>
            <guid>https://velog.io/@ljkoy26-desktop/Android-android-Studio-Run-%EC%8B%A4%ED%96%89%EC%8B%9C-%EB%B0%9C%EC%83%9D%ED%95%A0%EC%88%98-%EC%9E%88%EB%8A%94-%EC%98%A4%EB%A5%98</guid>
            <pubDate>Sun, 14 Jul 2024 04:19:37 GMT</pubDate>
            <description><![CDATA[<p>안드로이드 프로젝트를 오랜만에 새로 생성하였는데 아래와 같은 오류메세지가 나타났습니다.
( android Studio Run 실행시 발생할수 있는 오류 )</p>
<blockquote>
<p>ERROR: Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared in library [androidx.appcompat:appcompat:1.7.0] C:\Users\ljkoy.gradle\caches\transforms-2\files-2.1\acb72404d42d87032f5f042c37578178\appcompat-1.7.0\AndroidManifest.xml as the library might be using APIs not available in 16
    Suggestion: use a compatible library with a minSdk of at most 16,
        or increase this project&#39;s minSdk version to at least 21,
        or use tools:overrideLibrary=&quot;androidx.appcompat&quot; to force usage (may lead to runtime failures)]</p>
</blockquote>
<pre><code>    오류: 매니페스트 병합 실패: use-sdk:minSdkVersion 16은 라이브러리 [androidx.appcompat:appcompat:1.7.0] C:\Users\ljkoy\.gradle\caches\transforms-2\files-에 선언된 버전 21보다 작을 수 없습니다. 2.1\acb72404d42d87032f5f042c37578178\appcompat-1.7.0\AndroidManifest.xml(라이브러리는 16에서 사용할 수 없는 API를 사용 중일 수 있음)</code></pre><p>  제안: minSdk가 최대 16인 호환 라이브러리를 사용하세요.
  또는 이 프로젝트의 minSdk 버전을 21 이상으로 늘리세요.
  또는 tools:overrideLibrary=&quot;androidx.appcompat&quot;를 사용하여 강제 사용(런타임 오류가 발생할 수 있음)</p>
<p>build.gradle의 버전을 확인 하였으나, 이전에 생성한 프로젝트와 다른점이 없었습니다.</p>
<p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/c448331c-87ff-45ec-a509-bcde0c3ce5c3/image.png" alt=""></p>
<p>*<em>android studio를 종료후 재실행하니 문제가 수정되었으며, 간헐적으로 발생하는 오류로 확인됩니다.
( 추후 정말 다른원인으로 발생된다면 포스팅을 수정할 예정입니다. ) 
*</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C++] c++ 11 enum class의 이점이 뭐야?]]></title>
            <link>https://velog.io/@ljkoy26-desktop/C-c-11-enum-class%EC%9D%98-%EC%9D%B4%EC%A0%90%EC%9D%B4-%EB%AD%90%EC%95%BC</link>
            <guid>https://velog.io/@ljkoy26-desktop/C-c-11-enum-class%EC%9D%98-%EC%9D%B4%EC%A0%90%EC%9D%B4-%EB%AD%90%EC%95%BC</guid>
            <pubDate>Sun, 30 Jun 2024 14:48:02 GMT</pubDate>
            <description><![CDATA[<h2 id="c-enum-class의-이점이-뭐야">c++ enum class의 이점이 뭐야?</h2>
<p>C++의 enum class(scoped enumeration)에는 여러 가지 이점이 있습니다. 
기존의 열거형(enum)에 비해 더 안전하고, 명확하며, 타입 안정성을 제공하는 기능입니다. 
주요 이점은 다음과 같습니다:</p>
<blockquote>
<ol>
<li>스코프 제공 (Scoped Enums)</li>
</ol>
</blockquote>
<p>기존의 enum은 네임스페이스를 더럽힐 수 있습니다. 
즉, 열거형의 요소들이 전역 범위로 노출되어 다른 이름과 충돌할 수 있습니다. 반면, enum class는 스코프를 제공하여 이러한 문제를 방지합니다.</p>
<pre><code>enum Color { Red, Green, Blue }; // 전역 범위로 노출
enum class Color { Red, Green, Blue }; // Color 범위로 제한</code></pre><p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/17985962-b920-4971-98ab-9e26be65bd3d/image.png" alt=""></p>
<p>위의 예에서 enum class는 Color::Red, Color::Green, Color::Blue처럼 사용되며, 전역 네임스페이스를 오염시키지 않습니다.</p>
<blockquote>
<ol start="2">
<li>타입 안전성 (Type Safety)</li>
</ol>
</blockquote>
<p>기존의 enum은 암시적으로 정수형으로 변환될 수 있어 의도치 않은 버그를 유발할 수 있습니다. 
반면, enum class는 명시적 형변환이 필요하므로 타입 안전성을 제공합니다.</p>
<p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/ed39d147-5fa2-474e-9f84-45fa3cfcb6e4/image.png" alt=""></p>
<p>위 같은 코드는 Red라는 enum 요소가 Color , TrafficLight에 중복으로 선언되어 있으므로 
컴파일시 오류가 발생합니다. 
위와 같은 소스코드는 프로젝트가 규모가 점점 커지면서, enum 요소 종류가 많아질수록 빈번하게 발생하는 오류입니다. </p>
<h4 id="아래와-같은-방법을-사용할수도-있습니다-그러나-매번-요소마다-전위-명칭을-추가하는것은-바람직하지-않으며-변수-명칭-생성에도-비효율적입니다">아래와 같은 방법을 사용할수도 있습니다. 그러나 매번 요소마다 전위 명칭을 추가하는것은 바람직하지 않으며 변수 명칭 생성에도 비효율적입니다.</h4>
<p>&#39;</p>
<p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/6483bf8b-a9ae-47de-9de7-ec0782702866/image.png" alt=""></p>
<h4 id="-namespace를-사용하여-범위를-묶기도-합니다-그러나-namespace는-enum을-묶기에만-사용하는-키워드는-아니기에-키워드가-가져다-주는-의미를-깊게-생각해보는것이-좋습니다">* namespace를 사용하여 범위를 묶기도 합니다. 그러나 namespace는 enum을 묶기에만 사용하는 키워드는 아니기에, 키워드가 가져다 주는 의미를 깊게 생각해보는것이 좋습니다.</h4>
<h3 id="-키워드의-스코프를-생각한-측면에서-키워드가-본래-만들어진-이유를-생각하는것이-바람직합니다-">( 키워드의 스코프를 생각한 측면에서 키워드가 본래 만들어진 이유를 생각하는것이 바람직합니다. )</h3>
<p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/0e3c4721-0183-4e60-896e-6bd8110d0cec/image.png" alt=""></p>
<p>가장 바람직한 enum class 사용 예제입니다.
(enum class는 정적 캐스팅 (static_cast)을 사용하여 명시적 변환이 필요합니다. )</p>
<p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/5ab2e470-cd4a-4fdf-b64a-df90030d6232/image.png" alt=""></p>
<p>이제는 enum 의 요소로 Red, Green을 중복하여 사용하여도, 오류가 발생하지 않습니다.</p>
<blockquote>
<ol start="3">
<li>기본 타입 지정 (Underlying Type Specification)</li>
</ol>
</blockquote>
<p>enum class는 기본적으로 int 타입이지만, 다른 기본 타입도 지정할 수 있습니다. 
이를 통해 메모리 사용량을 줄이거나 특정 요구 사항을 충족할 수 있습니다.
<img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/e6164516-9c1f-451a-8857-c383cf9e6ee2/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[C++ boost Library 설치]]></title>
            <link>https://velog.io/@ljkoy26-desktop/C-boost-Library-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@ljkoy26-desktop/C-boost-Library-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Sun, 09 Jun 2024 12:00:43 GMT</pubDate>
            <description><![CDATA[<ol>
<li>설치 환경<ul>
<li>Windows</li>
<li>Visual Studio 2019 (C++)(vc142)</li>
<li>Boost 1.85.0</li>
</ul>
</li>
</ol>
<ol start="2">
<li><p>설치 방법 
1) 아래 URL로 접속하여 Window 용 zip 파일을 다운받습니다.</p>
<p><a href="https://www.boost.org/">https://www.boost.org/</a></p>
</li>
</ol>
<p>   <img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/bbedd9dd-5f55-44e8-ac83-56841d0c84b7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/1226eebb-608e-45ef-9280-0cec0a61b3c0/image.png" alt=""></p>
<p> 2) boost 설치파일을 C드라이브 경로로 이동하고, 압축을 푼후, bootstrap.bat 파일을 실행합니다.</p>
<p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/70f8ee4e-15f7-4f25-ba08-e26933214595/image.png" alt=""></p>
<p> 3) .bat 실행이 성공적으로 완료되면 b2.exe 파일이 생성됩니다. 해당 파일을 실행해줍니다. 
 ( 해당 파일 실행할 경우, 2~5분가량 소요됩니다. )</p>
<p> 4) boost 설정은 끝났으며 vs 2019 프로젝트에서 include , lib 속성을 설정합니다.</p>
<p> 4-1) C++ -&gt; 일반 - 추가 포함 디렉토리
  <strong>c:\boost_1_85_0</strong> 
  <img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/869d6594-e594-4358-b42d-0adc189574bf/image.png" alt=""></p>
<p> 4-2) 링커 - 일반 - 추가 라이브러리 디렉터리 
 <strong>c:\boost_1_85_0\libs</strong></p>
<p> <img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/3678c214-536d-4649-9300-33aa53d8d860/image.png" alt=""></p>
<p>5) vs 환경에서 테스트 코드를 작성하여 정상 동작하는지 확인합니다.</p>
<p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/06f2fabc-3458-4e5f-b71c-34d5941ab4ac/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/ljkoy26-desktop/post/14bf22d1-7b1a-4202-b260-567b76551823/image.png" alt=""></p>
<p>참고한 블로그 입니다. ( 정리를 잘해주셔서 도움이 많이되었습니다. 감사합니다. ) 
<a href="https://languagestory.tistory.com/110">https://languagestory.tistory.com/110</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MFC] 듀얼 모니터 환경에서 활용가능한 해상도 제한하기]]></title>
            <link>https://velog.io/@ljkoy26-desktop/MFC-%EB%93%80%EC%96%BC-%EB%AA%A8%EB%8B%88%ED%84%B0%EC%9D%98-%ED%95%B4%EC%83%81%EB%8F%84-%EC%95%88%EC%97%90%EC%84%9C-%EC%9E%91%EC%97%85%ED%95%98%EC%9E%90</link>
            <guid>https://velog.io/@ljkoy26-desktop/MFC-%EB%93%80%EC%96%BC-%EB%AA%A8%EB%8B%88%ED%84%B0%EC%9D%98-%ED%95%B4%EC%83%81%EB%8F%84-%EC%95%88%EC%97%90%EC%84%9C-%EC%9E%91%EC%97%85%ED%95%98%EC%9E%90</guid>
            <pubDate>Sun, 02 May 2021 13:52:09 GMT</pubDate>
            <description><![CDATA[<p>*<em>듀얼 모니터 환경에서 값을 벗어나지 않도록 해상도의 제한 값을 설정하는 로직이다. *</em></p>
<pre><code>void C듀얼모니터위치값Dlg::OnBnClickedButtonDisplay()
{
    // 듀얼 모니터 환경에서 허용된 포지션 값 내에서만 객체를 조정할수 있도록 해상도를 제한한다.
    // 연결된 모니터 안에서 가장 낮은 상,좌 좌표값을 가진 부분을 기준으로 
    // 최종길이를 반영하도록 설정한다.

    int nTotalMonitorWidth(GetSystemMetrics(SM_CXVIRTUALSCREEN)); // 모니터의 최종 가로길이(1920*2 = 3840)
    int nTotalMonitorHeight(GetSystemMetrics(SM_CYVIRTUALSCREEN)); // 모니터의 최종 세로길이(1080)

    int nMinLeft, nMinTop;
    int nMonitorCount(GetSystemMetrics(SM_CMONITORS)); // 모니터의 갯수
    DISPLAY_DEVICE stDisplayDevice;
    DEVMODE stDevMode;

    CRect MonitorRect;
    for (int i = 0; i &lt; nMonitorCount; ++i)
    {
        stDisplayDevice.cb = sizeof(DISPLAY_DEVICE); // 초기화
        EnumDisplayDevices(NULL, i, &amp;stDisplayDevice, 0);
        if (EnumDisplaySettings(stDisplayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &amp;stDevMode))
        {
            // 주요 모니터의 기준으로 x,y 좌표값이 (0,0) 으로 초기화 된다.
            // 인식된 모니터의 해상도가 - 값으로 내려가는 경우는,
            // 주 모니터 보다 [좌,상] 측에 위치한다는 증거이다.

            nMinLeft = min(MonitorRect.left, stDevMode.dmPosition.x);
            nMinTop = min(MonitorRect.top, stDevMode.dmPosition.y);
        }
    }
    TRACE(_T(&quot;nTotalMonitorWidth [%d] |  nTotalMonitorHeight [%d] \n&quot;), nTotalMonitorWidth, nTotalMonitorHeight);
    TRACE(_T(&quot;nMinWidth [%d] |  nMinHeight [%d] \n&quot;), nMinLeft, nMinTop);
    TRACE(_T(&quot;가로 허용범위[%d ~ %d]\n&quot;), nMinLeft, nMinLeft + nTotalMonitorWidth);
    TRACE(_T(&quot;세로 허용범위[%d ~ %d]\n&quot;), nMinTop, nMinTop + nTotalMonitorHeight);

    // 다음 필요작업
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Jenkins 홈 디렉토리 변경하는 방법]]></title>
            <link>https://velog.io/@ljkoy26-desktop/Jenkins-%ED%99%88-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC-%EB%B3%80%EA%B2%BD%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@ljkoy26-desktop/Jenkins-%ED%99%88-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC-%EB%B3%80%EA%B2%BD%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Wed, 31 Mar 2021 13:00:48 GMT</pubDate>
            <description><![CDATA[<ol>
<li>Jenkins 의 Jenkins관리 -&gt; 시스템 설정 부분에서 Jenkins_home 디렉토리를 알수 있다.</li>
</ol>
<p><img src="https://images.velog.io/images/ljkoy26-desktop/post/e0feac55-86ad-4002-89d2-e82e544a9c19/image.png" alt=""></p>
<p>기존 디렉토리가 크게 수정을 하지 않았다면 아래의 경로로 잡힐것이다.
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins.jenkins</p>
<ol start="2">
<li>Jenkins가 설치된 루트 폴더로 이동한다.<ul>
<li>32bit 버전의 경우 C:\Program Files( x86)\Jenkins</li>
<li>64bit 버전의 경우 C:\Program Files\Jenkins 에 존재할 것이다.</li>
</ul>
</li>
</ol>
<p><img src="https://images.velog.io/images/ljkoy26-desktop/post/58996ce6-b1fd-47d5-96d7-88e27bac2ac1/image.png" alt=""></p>
<p>이 부분에서 Jenkins.xml 이라는 파일을 열어 JENKINS_HOME 의 값을
원하는 패스로 변경해주면 된다.</p>
<p><img src="https://images.velog.io/images/ljkoy26-desktop/post/c7435416-8b03-420e-b0ce-2128ca07291a/image.png" alt=""></p>
<p>env name=&quot;JENKINS_HOME&quot; value=&quot;<strong>D:\Jenkins</strong>&quot;</p>
<p>위의 볼드 처리 된 부분에 변경될 경로를 입력해준뒤, 기존의 경로에 있는 파일들을
새로 JENKINS_HOME 위치로 이동시켜 준다!</p>
<p>그리고 Jenkins를 재시작 한다.
나는 작업관리자 -&gt; 서비스 -&gt; Jenkins 우측 클릭, 다시 시작 을 눌러 재시작 하였다.</p>
<p><img src="https://images.velog.io/images/ljkoy26-desktop/post/a57e8d8e-2c20-4f7d-bd64-7418fbaebc70/image.png" alt=""></p>
<p>재시작후 해당 홈 디렉토리가 원하는 경로로 바뀌어 있다면 성공한 것이다.!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Oracle 11g 외부에서 접속하기]]></title>
            <link>https://velog.io/@ljkoy26-desktop/Oracle-11g-%EC%99%B8%EB%B6%80%EC%97%90%EC%84%9C-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@ljkoy26-desktop/Oracle-11g-%EC%99%B8%EB%B6%80%EC%97%90%EC%84%9C-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 14 Mar 2021 14:37:28 GMT</pubDate>
            <description><![CDATA[<p>테스트용 노트북에 Oracle 11g 서버를 설치하게 될일이 있었는데</p>
<p>listener.ora
tnsnames.ora 파일의 호스트 부분을 PC명으로 바꿔주면?? 된단다</p>
<ol>
<li><p>PC 이름은 이곳에서 볼수 있다 ( Ctrl + Pause break )
<img src="https://images.velog.io/images/ljkoy26-desktop/post/265681e0-a301-4edb-8e24-9e2f1c954354/image.png" alt=""></p>
</li>
<li><p>listener.ora , tnsnames.ora의 경로는 
C:\app[사용자명]\product\11.2.0\dbhome_1\NETWORK\ADMIN 폴더에 있다!
D:\app\ljkoy\product\11.2.0\dbhome_1\NETWORK\ADMIN 나는 이곳에 있었다.</p>
</li>
</ol>
<p><img src="https://images.velog.io/images/ljkoy26-desktop/post/575371e8-cb42-42fc-9f34-4c2412c646d3/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/ljkoy26-desktop/post/8c27d481-c5a5-40f1-9d81-1e540aaa2a56/image.png" alt=""></p>
<p>빨간색 네모칸 있는 부분의 내용을 내 PC이름으로 바꿔주자!</p>
<p>그리고 접속을 하려는 PC에서 한번 접속해보자!</p>
]]></description>
        </item>
    </channel>
</rss>