<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>messy-snail.log</title>
        <link>https://velog.io/</link>
        <description>놀면 뭐하니 정리해</description>
        <lastBuildDate>Mon, 30 Jun 2025 08:54:40 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>messy-snail.log</title>
            <url>https://images.velog.io/images/messy-snail/profile/2a5d665c-40e3-46c8-8f54-51cae70e23b3/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. messy-snail.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/messy-snail" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[WSL에서 USB 장치 인식하기]]></title>
            <link>https://velog.io/@messy-snail/WSL%EC%97%90%EC%84%9C-USB-%EC%9E%A5%EC%B9%98-%EC%9D%B8%EC%8B%9D%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@messy-snail/WSL%EC%97%90%EC%84%9C-USB-%EC%9E%A5%EC%B9%98-%EC%9D%B8%EC%8B%9D%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 30 Jun 2025 08:54:40 GMT</pubDate>
            <description><![CDATA[<h1 id="usbipd-win-설치">usbipd-win 설치</h1>
<pre><code class="language-bash"># In Windows PowerShell (Administrator):
# Install usbipd-win
winget install dorssel.usbipd-win

# List all USB devices
usbipd list

usbipd bind --busid &lt;BUS_ID&gt;
usbipd attach --busid &lt;BUS_ID&gt; --wsl

# eg. usbipd bind --busid 1-9 </code></pre>
<h1 id="wslubuntu에서-확인">WSL(Ubuntu)에서 확인</h1>
<pre><code class="language-bash"># In WSL Terminal:
# Verify the device is visible
lsusb</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Stable Baseline 3 MPS Error]]></title>
            <link>https://velog.io/@messy-snail/Stable-Baseline-3-MPS-Error</link>
            <guid>https://velog.io/@messy-snail/Stable-Baseline-3-MPS-Error</guid>
            <pubDate>Thu, 04 Jul 2024 02:01:57 GMT</pubDate>
            <description><![CDATA[<h3 id="mps에서-float-64-아직-미지원">MPS에서 float 64 아직 미지원</h3>
<ul>
<li>device를 <code>mps</code>로 주면 에러 발생<h3 id="에러-내용">에러 내용</h3>
<pre><code class="language-bash">TypeError: Cannot convert a MPS Tensor to float64 dtype as the MPS framework doesn&#39;t support float64. Please use float32 instead.</code></pre>
</li>
</ul>
<p>발생하는 원인은 현재 MPS에서는 float 32만 지원함. 따라서 mps일  floast 32로 변환해주면 됨
obs_as_tesnsor 함수에서 msp일 때 아래 줄 추가하면 됨</p>
<p><code>site-packates/stable_baseline3/common/utils.py &gt; obs_as_tensor</code></p>
<pre><code class="language-python">if device.type == &#39;mps&#39;:
    obs = obs.astype(&#39;float32&#39;) if isinstance(obs, np.ndarray) else obs.float()</code></pre>
<h3 id="최종본">최종본</h3>
<pre><code class="language-python">def obs_as_tensor(obs: Union[np.ndarray, Dict[str, np.ndarray]], device: th.device) -&gt; Union[th.Tensor, TensorDict]:
&quot;&quot;&quot;
Moves the observation to the given device.
:param obs:
:param device: PyTorch device
:return: PyTorch tensor of the observation on a desired device.
&quot;&quot;&quot;
if device.type == &#39;mps&#39;:
    obs = obs.astype(&#39;float32&#39;) if isinstance(obs, np.ndarray) else obs.float()
if isinstance(obs, np.ndarray):
    return th.as_tensor(obs, device=device)
elif isinstance(obs, dict):
    return {key: th.as_tensor(_obs, device=device) for (key, _obs) in obs.items()}
else:
    raise Exception(f&quot;Unrecognized type of observation {type(obs)}&quot;)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mac 사파리 폰트 깨짐(명조, 궁서로 보임)]]></title>
            <link>https://velog.io/@messy-snail/Mac-%EC%82%AC%ED%8C%8C%EB%A6%AC-%ED%8F%B0%ED%8A%B8-%EA%B9%A8%EC%A7%90%EB%AA%85%EC%A1%B0-%EA%B6%81%EC%84%9C%EB%A1%9C-%EB%B3%B4%EC%9E%84</link>
            <guid>https://velog.io/@messy-snail/Mac-%EC%82%AC%ED%8C%8C%EB%A6%AC-%ED%8F%B0%ED%8A%B8-%EA%B9%A8%EC%A7%90%EB%AA%85%EC%A1%B0-%EA%B6%81%EC%84%9C%EB%A1%9C-%EB%B3%B4%EC%9E%84</guid>
            <pubDate>Wed, 29 May 2024 11:20:33 GMT</pubDate>
            <description><![CDATA[<p>기본적으로 맥에는 명조, 굴림, 궁서 등 윈도우에서 사용하는 폰트가 없음.
웹에서 저런 폰트로 설정한 경우에는 폰트가 시스템 서체로 자동으로 대체되서 보임(시스템 서체 바꾸는건 모르겠음)
그래서 사파리에서 아래에 있는 css를 적용하면 됨.</p>
<pre><code class="language-css">@font-face {    
    font-family: &quot;Malgun Gothic&quot;;
    src: local(&quot;Apple SD Gothic Neo Regular&quot;);
}

@font-face {    
    font-family: &quot;맑은 고딕&quot;;
    src: local(&quot;Apple SD Gothic Neo Regular&quot;);
}

@font-face {
    font-family: &quot;Dotum&quot;;
    src: local(&quot;Apple SD Gothic Neo Regular&quot;);
}

@font-face {
    font-family: &quot;DotumChe&quot;;
    src: local(&quot;Apple SD Gothic Neo Regular&quot;);
}

@font-face {
    font-family: &quot;돋움&quot;;
    src: local(&quot;Apple SD Gothic Neo Regular&quot;);
}

@font-face {
    font-family: &quot;돋움체&quot;;
    src: local(&quot;Apple SD Gothic Neo Regular&quot;);
}

@font-face {
    font-family: &quot;Gulim&quot;;
    src: local(&quot;Apple SD Gothic Neo Regular&quot;);
}

@font-face {
    font-family: &quot;GulimChe&quot;;
    src: local(&quot;Apple SD Gothic Neo Regular&quot;);
}

@font-face {
    font-family: &quot;굴림&quot;;
    src: local(&quot;Apple SD Gothic Neo Regular&quot;);
}

@font-face {
    font-family: &quot;굴림체&quot;;
    src: local(&quot;Apple SD Gothic Neo Regular&quot;);
}
</code></pre>
<p>이걸 사파리에 적용하면됨.
cmd + ,
고급에서 스타일 시트에서 저장한 css를 적용하면 됨.</p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/e09b26dc-59db-4dab-b509-2c8a835788c9/image.png" alt="사파리 옵션"></p>
<hr>

<h3 id="테스트-문장">테스트 문장</h3>
<p style="font-family: '굴림', Gulim;">이 문장은 굴림체로 표시됩니다.</p>
<p style="font-family: '돋움', Dotum;">이 문장은 돋움체 표시됩니다.</p>
<p style="font-family: '맑은 고딕', Malgun Gothic;">이 문장은 맑은 고딕체로 표시됩니다.</p>

<hr>
적용 전

<p><img src="https://velog.velcdn.com/images/messy-snail/post/1fd0333a-7489-4de1-be55-9f313716dc45/image.png" alt=""></p>
<p>적용 후</p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/642c9cc2-3a31-4bd7-8bf5-576604e27e4e/image.png" alt=""></p>
<h3 id="끝으로">끝으로</h3>
<p>만약에 내가 더 원하는 폰트가 있다면 위 css에 추가하면 됨.
바탕과 궁서를 넣지 않은 이유는, 맥에서 바꿔주는 시스템 서체로 보는게 더 원본 폰트와 비슷한 느낌이라서 추가하지 않음.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Gym 환경에서 Mujoco solver_iter error 해결법]]></title>
            <link>https://velog.io/@messy-snail/Gym-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-Mujoco-solveriter-error-%ED%95%B4%EA%B2%B0%EB%B2%95</link>
            <guid>https://velog.io/@messy-snail/Gym-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-Mujoco-solveriter-error-%ED%95%B4%EA%B2%B0%EB%B2%95</guid>
            <pubDate>Tue, 21 May 2024 15:09:00 GMT</pubDate>
            <description><![CDATA[<p>참고
<a href="https://github.com/Farama-Foundation/Gymnasium/pull/746">https://github.com/Farama-Foundation/Gymnasium/pull/746</a></p>
<p>아래와 같이 에러가 발생함.</p>
<pre><code class="language-bash">AttributeError: &#39;mujoco._structs.MjData&#39; object has no attribute &#39;solver_iter&#39;. Did you mean: &#39;solver_niter&#39;?</code></pre>
<p>python버전/site-packages/gym/envs/mujoco/mujoco_rendering.py 파일 수정 필요</p>
<p><code>def _create_overlay(self):</code> 함수, 472라인 쯤(Solver iterations를 키워드로 찾으면 됨)</p>
<pre><code class="language-python"># 기존 코드
        self.add_overlay(
            bottomleft, &quot;Solver iterations&quot;, str(self.data.solver_iter + 1)
        )

#변경 코드
from packaging import version

if version.parse(mujoco.__version__) &gt;= version.parse(&quot;3.0.0&quot;):
    self.add_overlay(bottomleft, &quot;Solver iterations&quot;, str(self.data.solver_niter[0] + 1)
    )

else:
    self.add_overlay(bottomleft, &quot;Solver iterations&quot;, str(self.data.solver_iter + 1)
    )
</code></pre>
<p>버전이 바뀌면서 변수명이 바뀐거 같음. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mac Mujoco OpenGL Error]]></title>
            <link>https://velog.io/@messy-snail/Mac-Mujoco-OpenGL-Error</link>
            <guid>https://velog.io/@messy-snail/Mac-Mujoco-OpenGL-Error</guid>
            <pubDate>Mon, 13 May 2024 05:20:36 GMT</pubDate>
            <description><![CDATA[<p>최신 버전에서는 발생하지 않음.
구버전(2.3.7)에서 발생하는 에러</p>
<h3 id="opengl경로를-찾지-못함">OpenGL경로를 찾지 못함.</h3>
<p><code>from dm_control import mujoco</code></p>
<pre><code class="language-batch">예외가 발생했습니다. OSError
dlopen(/System/Library/OpenGL.framework/OpenGL, 0x0006): tried: &#39;/System/Library/OpenGL.framework/OpenGL&#39; (no such file), &#39;/System/Volumes/Preboot/Cryptexes/OS/System/Library/OpenGL.framework/OpenGL&#39; (no such file), &#39;/System/Library/OpenGL.framework/OpenGL&#39; (no such file, not in dyld cache)</code></pre>
<p>opt&gt;homebrew&gt;lib&gt;python버전&gt;site-packages&gt;mujodo&gt;cgl&gt;cgl.py
<code>eg. opt&gt;homebrew&gt;lib&gt;python3.12&gt;site-packages&gt;mujodo&gt;cgl&gt;cgl.py</code></p>
<h3 id="cglpy-열어서-경로-변경">cgl.py 열어서 경로 변경</h3>
<pre><code class="language-python">#기존
#_CGL = ctypes.CDLL(&#39;/System/Library/OpenGL.framework/OpenGL&#39;)
#아래처럼 경로 변경
_CGL = ctypes.CDLL(&#39;/System/Library/Frameworks/OpenGL.framework/OpenGL&#39;)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Docker를 이용한 ROS2 설치]]></title>
            <link>https://velog.io/@messy-snail/Docker%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-ROS2-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@messy-snail/Docker%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-ROS2-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Sat, 30 Mar 2024 18:33:14 GMT</pubDate>
            <description><![CDATA[<p>Windows, Mac, Ubuntu 모두 적용 가능. 단, Ubuntu의 경우 Docker Desktop 설치가 필요없음.</p>
<h2 id="1-docker-desktop-설치">1. <a href="https://www.docker.com/products/docker-desktop/">Docker Desktop 설치</a></h2>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/2896c495-0ded-453d-b79f-81f7ce743fa9/image.png" alt=""></p>
<p>개인, 소규모 기업(직원 수 250명 미만이며 연 매출 1천만 달러 미만)은 무료. 이외 조건은 라이센스 정책 참고.</p>
<h2 id="2-이미지-다운로드">2. 이미지 다운로드</h2>
<p>24년 3월 기준 LTS ROS2 humble 사용.
지원되는 LTS는 <a href="https://www.ros.org/blog/getting-started/">여기서</a> 확인
humble 자리에 원하는 distro 명을 넣으면 됨.</p>
<pre><code class="language-bash">docker pull osrf/ros:humble-desktop-full</code></pre>
<h2 id="3-도커-실행">3. 도커 실행</h2>
<ul>
<li>컨테이너_이름: 내가 원하는 컨테이너 이름 넣으면 됨</li>
<li>-it 옵션은 터미널 명령어 사용하기 위한 옵션(interaction)</li>
<li>--privileged: 주요 자원 접근 옵션</li>
<li>--env=&quot;DISPLAY=host.docker.internal:0&quot;: GUI 출력</li>
<li>-v [호스트_경로]:[컨테이너_경로] : 공유하려는 패스</li>
<li>-w [시작_경로]: 컨테이너 진입 시 시작하는 경로</li>
</ul>
<pre><code class="language-bash">docker run --name [컨테이너_이름] -it --privileged --env=&quot;DISPLAY=host.docker.internal:0&quot; –v [호스트_경로]:[컨테이너_경로] -w [시작_경로] osrf/ros:humble-desktop-full</code></pre>
<p>예를 들면 아래와 같이 작성 가능</p>
<pre><code class="language-bash">docker run --name ros-humble -it --privileged --env=&quot;DISPLAY=host.docker.internal:0&quot; -v C:\Test:/root/ros_ws/ -w /root/ros_ws/ osrf/ros:humble-desktop-full</code></pre>
<h2 id="4-환경-설정-및-ros-기능-확인">4. 환경 설정 및 ROS 기능 확인</h2>
<p>아래 명령어를 통해 환경 설정.
<code>source /opt/ros/humble/setup.bash</code> 라는 명령어가 터미널 실행될 때마다 자동으로 실행되게 해줌.</p>
<pre><code>echo &quot;source /opt/ros/humble/setup.bash&quot; &gt;&gt; /root/.bashrc

# 새 터미널 열고, 아래 명령어로 추가 bash창(터미널 창) 띄움
docker exec -it [컨테이너_이름] /bin/bash

# 아래 명령어 입력
ros2 run demo_nodes_cpp talker

# 새 터미널 열고, 아래 명령어로 추가 bash창(터미널 창) 띄움
docker exec -it [컨테이너_이름] /bin/bash

# 아래 명령어 입력
ros2 run demo_nodes_cpp listener</code></pre><p>정상적으로 수행되면, 아래와 같은 메시지를 볼 수 있음
<strong>talker</strong></p>
<pre><code>[INFO] [1711821616.655960025] [talker]: Publishing: &#39;Hello World: 1&#39;
[INFO] [1711821617.655979865] [talker]: Publishing: &#39;Hello World: 2&#39;
[INFO] [1711821618.655987506] [talker]: Publishing: &#39;Hello World: 3&#39;
[INFO] [1711821619.655994046] [talker]: Publishing: &#39;Hello World: 4&#39;
...</code></pre><p><strong>listener</strong></p>
<pre><code>[INFO] [1711821701.656355273] [listener]: I heard: [Hello World: 86]
[INFO] [1711821702.656500972] [listener]: I heard: [Hello World: 87]
[INFO] [1711821703.656330265] [listener]: I heard: [Hello World: 88]
[INFO] [1711821704.657049576] [listener]: I heard: [Hello World: 89]
[INFO] [1711821705.656365558] [listener]: I heard: [Hello World: 90]
...</code></pre><h2 id="번외-1-x-server-설정">번외 1. X Server 설정</h2>
<p><code>rqt_graph</code>, <code>rviz2</code> 같이 디스플레이 기능이 필요한 경우 설정이 필요함.</p>
<p><strong>Windows</strong></p>
<ul>
<li>Xming을 설치해도 되는데, rviz를 쓸거면 <strong>VcXsrv</strong>를 설치
<a href="https://sourceforge.net/projects/vcxsrv/">VcXsrv 설치</a></li>
</ul>
<p>XLaunch로 실행.(옵션은 그냥 디폴트로 해도 잘됨.)</p>
<pre><code>rviz2</code></pre><p><img src="https://velog.velcdn.com/images/messy-snail/post/136882f5-2c53-4d3a-afe3-d588effd4546/image.png" alt=""></p>
<p><strong>Mac</strong></p>
<ul>
<li>참고로 애플 실리콘 계열에서 xquartz를 설치해도 rviz는 실행이 안되는 것 같음.(OpenGL이슈)<pre><code>brew install --cask xquartz</code></pre><img src="https://velog.velcdn.com/images/messy-snail/post/b95cb47b-6dfa-45bd-8cdb-cec1c217e0af/image.png" alt=""></li>
</ul>
<h2 id="번외2-vs-code로-접속하기">번외2. VS Code로 접속하기</h2>
<p>VS Code를 설치하고 아래의 extension들을 설치
Remote Explorer랑 Remote Development만 설치해도됨.
<img src="https://velog.velcdn.com/images/messy-snail/post/1a5df5b4-30d9-4889-8671-3466791f8ff4/image.png" alt=""></p>
<p>Remote Explorer(원격 탐색기)에서 Dev Container(개발 컨테이너)로 옵션을 바꾸면, 현재 컨테이너 목록들이 도시.
화살표 버튼을 누르면 접속되는 것을 확인할 수 있음.
<img src="https://velog.velcdn.com/images/messy-snail/post/661ae9a1-c40c-41f6-8243-f974c130270a/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Visual Studio Resharper 기능 정리]]></title>
            <link>https://velog.io/@messy-snail/Visual-Studio-Resharper-%EA%B8%B0%EB%8A%A5-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@messy-snail/Visual-Studio-Resharper-%EA%B8%B0%EB%8A%A5-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Fri, 16 Dec 2022 06:25:28 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>💖 기본 단축키
컨텍스트 액션, 빠른 수정, 네임스페이스 가져오기: Alt + Enter
구문 완성: Ctrl+Shift+Enter
매개변수 정보: Ctrl+Shift+Space</p>
</blockquote>
<blockquote>
<p>💫 고급 단축키
줄 또는 선택 항목 복제: Ctrl+D
코드 재배열: Ctrl+Shift+Alt+방향키
빠른 문서: Ctrl+Shift+F1
선택 확장: Ctrl+Alt+오른쪽 방향키
선택 축소: Ctrl+Alt+왼쪽 방향키
멤버 바로 선택(선택 확장 개념): Ctrl+Shfit+[
클립보드 기록 붙여넣기: Ctrl+Shift+V</p>
</blockquote>
<hr>
<p><a href="#%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%95%A1%EC%85%98">컨텍스트 액션</a>
<a href="#%EA%B5%AC%EB%AC%B8-%EC%99%84%EC%84%B1">구문 완성</a>
<a href="#%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98-%EC%A0%95%EB%B3%B4">매개변수 정보</a>
<a href="#%EC%A4%84-%EB%98%90%EB%8A%94-%EC%84%A0%ED%83%9D-%ED%95%AD%EB%AA%A9-%EB%B3%B5%EC%A0%9C">줄 또는 선택 항목 복제</a>
<a href="#%EC%BD%94%EB%93%9C-%EC%9E%AC%EB%B0%B0%EC%97%B4">코드 재배열</a>
<a href="#%EB%B9%A0%EB%A5%B8-%EB%AC%B8%EC%84%9C">빠른 문서</a>
<a href="#%EC%84%A0%ED%83%9D-%ED%99%95%EC%9E%A5/%EC%B6%95%EC%86%8C">선택 확장/축소</a>
<a href="#%ED%81%B4%EB%A6%BD%EB%B3%B4%EB%93%9C-%EA%B8%B0%EB%A1%9D-%EB%B6%99%EC%97%AC%EB%84%A3%EA%B8%B0">클립보드 기록 붙여 넣기</a>
<a href="#Reference">Reference</a></p>
<hr>
<h4 id="컨텍스트-액션">컨텍스트 액션</h4>
<p>캐럿 아래에 있는 코드에 변경을 빠르게 적용 가능
foreach &lt;-&gt;for 같은 걸 바로 변환 가능
<code>Alt+Enter</code></p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/98dd5073-8676-4d44-9db8-8e7213e21e75/image.gif" alt=""></p>
<h4 id="구문-완성">구문 완성</h4>
<p>구문 요소(괄호, 세미 콜론 등)을 자동으로 삽입하고, 캐럿을 자동으로 이동 시켜줌
<code>Ctrl+Shift+Enter</code></p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/34d6e917-d6d6-4107-9864-7cf9044046b0/image.gif" alt=""></p>
<h4 id="매개변수-정보">매개변수 정보</h4>
<p>메서드 호출 시 시그니처, 매개변수 및 관려 문서가 툴팁으로 표시됨
<code>Ctrl+Shift+스페이스</code>
<img src="https://velog.velcdn.com/images/messy-snail/post/f2a02287-5faf-4c5f-9e7a-1fb7b39d968e/image.jpeg" alt=""></p>
<h4 id="줄-또는-선택-항목-복제">줄 또는 선택 항목 복제</h4>
<p>줄 또는 선택 항목을 빠르게 복제
<code>Ctrl+D</code></p>
<h4 id="코드-재배열">코드 재배열</h4>
<p>코드 요소의 순서를 빠르게 변경할 수 있음. 줄을 내리거나 올리거나 또는 비교 항목을 서로 바꾸거나
<code>Ctrl+Shift+Alt+방향키</code></p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/55d2db90-8912-4b27-9b77-e4edc7b3d91c/image.gif" alt=""></p>
<h4 id="빠른-문서">빠른 문서</h4>
<p>특정 클래스, 메서드/함수 또는 기타 심볼에 대한 문서를 팝업으로 확인 가능
<code>Ctrl+Shift+F1</code>
<img src="https://velog.velcdn.com/images/messy-snail/post/7d14e5ae-db11-4a99-84eb-e87386486c95/image.png" alt=""></p>
<h4 id="선택-확장축소">선택 확장/축소</h4>
<p>코드 블록을 확장하거나 축소하는 기능</p>
<p>선택 확장: <code>Ctrl+Alt+오른쪽 방향키</code>
선택 축소: <code>Ctrl+Alt+왼쪽 방향키</code>
멤버 바로 선택: <code>Ctrl+Shift+[</code></p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/62c4a4d4-6a12-404a-9d72-9f248263238f/image.gif" alt=""></p>
<h4 id="클립보드-기록-붙여넣기">클립보드 기록 붙여넣기</h4>
<p>Visual Studio 시작하고 나서 부터 기록된 클립보드를 확인함
<code>Ctrl+Shift+V</code></p>
<p>윈도우에서 비슷한 기능으로 <code>윈도우키+V</code>가 있으며, 앞선 기능은 Visual Studio 상에서 복사한 항목이 뜨고, 윈도우 기능은 윈도우에서 복사한 모든 클립보드가 보여진다는 차이가 있음</p>
<hr>
<h4 id="reference">Reference</h4>
<p><a href="https://www.jetbrains.com/ko-kr/resharper/features/coding_assistance.html">https://www.jetbrains.com/ko-kr/resharper/features/coding_assistance.html</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[🕷️ Visual Studio 중단점 사용법]]></title>
            <link>https://velog.io/@messy-snail/Visual-Studio-%EC%A4%91%EB%8B%A8%EC%A0%90-%EC%82%AC%EC%9A%A9%EB%B2%95</link>
            <guid>https://velog.io/@messy-snail/Visual-Studio-%EC%A4%91%EB%8B%A8%EC%A0%90-%EC%82%AC%EC%9A%A9%EB%B2%95</guid>
            <pubDate>Thu, 15 Dec 2022 16:16:20 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>💖기본 단축키
F9: 중단점 설정/삭제
F10: 프로시저 단위 실행, 해당 줄의 다음 줄 실행 
F11: 한 단계씩 실행, 함수를 만나면 함수 안으로 들어감
Shift+F11: 프로시저 나가기, 함수 밖으로 나가서 실행</p>
</blockquote>
<blockquote>
<p>💫 고급 단축키
Ctrl+F9: 중단점 해제
Ctrl+Shift+F9: 모든 중단점 삭제
Alt+F9: 중단점 창 띄우기
Ctrl+F10: 커서까지 실행
Ctrl+K, B: 함수 중단점
Shift+Alt+F9, T: 임시 중단점</p>
</blockquote>
<hr>
<p><a href="#%ED%95%A8%EC%88%98-%EC%A4%91%EB%8B%A8%EC%A0%90%EA%B9%8C%EC%A7%80-%EC%8B%A4%ED%96%89">함수 중단점까지 실행</a>
<a href="#%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A4%91%EB%8B%A8%EC%A0%90-%EC%84%A4%EC%A0%95">데이터 중단점 설정</a>
<a href="#%EC%A2%85%EC%86%8D-%EC%A4%91%EB%8B%A8%EC%A0%90-%EC%84%A4%EC%A0%95">종속 중단점 설정</a>
<a href="#%EC%9E%84%EC%8B%9C-%EC%A4%91%EB%8B%A8%EC%A0%90-%EB%98%90%EB%8A%94-%ED%86%B5%ED%95%A9-%EC%A4%91%EB%8B%A8%EC%A0%90-%EC%84%A4%EC%A0%95">임시 중단점 또는 통합 중단점 설정</a>
<a href="#%EC%A4%91%EB%8B%A8%EC%A0%90-%EB%A0%88%EC%9D%B4%EB%B8%94">중단점 레이블</a>
<a href="#%EC%A4%91%EB%8B%A8%EC%A0%90-%EB%82%B4%EB%B3%B4%EB%82%B4%EA%B8%B0">중단점 내보내기</a>
<a href="#%EC%A4%91%EB%8B%A8%EC%A0%90-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0">중단점 가져오기</a>
<a href="#%ED%98%B8%EC%B6%9C-%EC%8A%A4%ED%83%9D-%EC%B0%BD%EC%97%90%EC%84%9C-%EC%A4%91%EB%8B%A8%EC%A0%90-%EC%84%A4%EC%A0%95">호출 스택 창에서 중단점 설정</a>
<a href="Reference">Reference</a></p>
<hr>
<h3 id="함수-중단점까지-실행">함수 중단점까지 실행</h3>
<p>함수 이름으로 중단하는 방법
디버그 -&gt; 새 중단점 -&gt; 함수 중단점
또는 <strong>Ctrl+K, B</strong></p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/96ef7271-150f-4467-b683-4eadc9e26f76/image.png" alt=""></p>
<h3 id="데이터-중단점-설정">데이터 중단점 설정</h3>
<p><strong>.NET Core 3.x 또는 .NET 5+</strong>
특정 개체의 속성이 변경될 때 실행을 중단
자동, 조사식 또는 지역 창에서 속성을 마우스 오른쪽 클릭, 값이 변경되면 중단 선택
<img src="https://velog.velcdn.com/images/messy-snail/post/95bccfe3-595c-4c2d-8c91-72ac4dafa1fe/image.png" alt=""></p>
<p><strong>.NET Core의 데이터 중단점은 다음에 대해 작동하지 않습니다.</strong></p>
<p><span style='background-color:#FF0F0F'> 도구 설명, 지역, 자동 또는 조사식 창에서 확장할 수 없는 속성<br>정적 변수<br>DebuggerTypeProxy 특성이 있는 클래스<br>구조체 내의 필드 </span></p>
<h3 id="종속-중단점-설정">종속 중단점 설정</h3>
<p>종속 중단점(Dependent Breakpoint)은 다른 중단점이 먼저 적중된 경우에만 실행을 중단
선택조건에서 다음 중단점이 적중된 경우에만 사용을 선택</p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/a4c142b7-9812-455f-a89b-457e14d34331/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/16b830c4-5132-445e-8398-da2e8726fee0/image.png" alt=""></p>
<h3 id="임시-중단점-또는-통합-중단점-설정">임시 중단점 또는 통합 중단점 설정</h3>
<p><strong>VS 버전에 따라 명칭 확인 필요</strong></p>
<p>임시 중단점(Temporary Breakpoint)을 사용하면 코드를 한 번만 중단
애플리케이션을 한 번만 일시 중지하고 적중된 <strong>중단점을 바로 제거</strong>합니다.</p>
<p>아이콘에 시계 모양있는 것이 특징
코드 줄 옆의 맨 왼쪽 여백을 마우스 오른쪽 단추로 클릭하고 임시 중단점 삽입을 선택
또는 <strong>Shift+Alt+F9, T</strong>를 사용하여 원하는 줄에 임시 중단점을 설정
<img src="https://velog.velcdn.com/images/messy-snail/post/41a15fc8-204a-462f-9e53-2f570409ea3f/image.png" alt=""></p>
<p>또는 이미 설정된 중단점이라면, 조건에서 적중되면 중단점 제거를 체크
<img src="https://velog.velcdn.com/images/messy-snail/post/a5ed70ef-2585-43f1-aa26-1604eb28398c/image.png" alt=""></p>
<h3 id="중단점-레이블">중단점 레이블</h3>
<p>오른쪽 단추로 클릭한 다음 레이블 편집
검색기능 활용할 수 있음
<img src="https://velog.velcdn.com/images/messy-snail/post/5a1c4cb7-5141-4e0e-ba02-8bb183d5e37e/image.png" alt=""></p>
<h3 id="중단점-내보내기">중단점 내보내기</h3>
<h4 id="1-단일중단점-내보내기">1. 단일중단점 내보내기</h4>
<p>마우스 오른쪽 버튼 -&gt; 선택한 항목 내보내기
<img src="https://velog.velcdn.com/images/messy-snail/post/9a2b1194-46bb-4ca8-912c-d152e0c944cd/image.png" alt=""></p>
<h4 id="2-여러-중단점-내보내기">2. 여러 중단점 내보내기</h4>
<p>원하는 중단점을 체크하고 내보내거나, 검색조건과 일치하는 모든 중단점 내보내기
<img src="https://velog.velcdn.com/images/messy-snail/post/7ad93d7b-bd9a-4120-b379-26a6e0b54451/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/d97fe850-3390-4a7c-8850-63ff1e5dc497/image.png" alt=""></p>
<h4 id="3-모든-중단점-내보내기">3. 모든 중단점 내보내기</h4>
<p>검색 창을 공백으로 두고, 검색 조ㅓㄴ과 일지하는 모든 중단점 내보내기
<img src="https://velog.velcdn.com/images/messy-snail/post/0d5eaa2b-fcb0-4f6d-931d-79fb05e91ceb/image.png" alt=""></p>
<h3 id="중단점-가져오기">중단점 가져오기</h3>
<p>중단점 창에서 <strong>파일에서 중단점 가져오기</strong> 아이콘을 선택하고 중단점 XML 파일을 선택</p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/6e9417cb-bd2a-4a8e-8359-eaccb9d6ecb4/image.png" alt=""></p>
<h3 id="호출-스택과-중단점-설정">호출 스택과 중단점 설정</h3>
<p>호출 함수가 반환하는 명령 또는 줄에서 중단하려면 <strong>호출 스택</strong> 창에서 중단점을 설정</p>
<p><strong>호출 스택 창 열기</strong>
디버그하는 동안에 열 수 있음. 디버그 중 <strong>디버그 -&gt; 창 -&gt; 호출 스택</strong>을 선택
또는 <strong>Ctrl+Alt+C</strong>
<img src="https://velog.velcdn.com/images/messy-snail/post/427bf569-b48c-4573-95b2-4909dc6c1710/image.png" alt=""></p>
<p><strong>호출 스택에서 중단점 설정</strong>
호출 스택 창에서 호출 함수를 마우스 오른쪽 단추로 클릭하고 <strong>중단점 -&gt; 중단점 삽입</strong>을 선택
또는 <strong>F9</strong>
호출 스택의 왼쪽 여백에서 함수 호출 이름 옆에 중단점 기호가 표시</p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/cad5a56e-23d7-4f45-98d4-f768913f13fb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/messy-snail/post/2c3b6cb6-621a-496a-8b1a-49b8e49ff080/image.png" alt=""></p>
<hr>
<h3 id="reference">Reference</h3>
<p>디버그 중단점: <a href="https://learn.microsoft.com/ko-kr/visualstudio/debugger/using-breakpoints?view=vs-2022#BKMK_Set_a_breakpoint_from_debugger_windows">https://learn.microsoft.com/ko-kr/visualstudio/debugger/using-breakpoints?view=vs-2022#BKMK_Set_a_breakpoint_from_debugger_windows</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[OpenCV] 논리 연산 정리(bitwise_and, bitwise_or)]]></title>
            <link>https://velog.io/@messy-snail/%EB%85%BC%EB%A6%AC-%EC%97%B0%EC%82%B0-%EC%A0%95%EB%A6%ACbitwiseand-bitwiseor</link>
            <guid>https://velog.io/@messy-snail/%EB%85%BC%EB%A6%AC-%EC%97%B0%EC%82%B0-%EC%A0%95%EB%A6%ACbitwiseand-bitwiseor</guid>
            <pubDate>Sat, 14 Aug 2021 07:13:14 GMT</pubDate>
            <description><![CDATA[<p>아래와 같은 이미지(input1, input2)가 주어졌을 때 and, or 논리 연산 결과를 생각해볼 수 있다.</p>
<p><em>input1</em>
<img src="https://images.velog.io/images/messy-snail/post/1af66d81-c37c-4b3a-b097-8916b9375af7/image.png" alt="Image1"> </p>
<p><em>input2</em>
<img src="https://images.velog.io/images/messy-snail/post/2ec735f0-752e-4d4f-9460-c03de241a527/image.png" alt="Image2"></p>
<hr />
150과 80을 binary로 나타내면 다음과 같다.

<p>150<sub>(10)</sub> =  1001 0110<sub>(2)</sub><br>80<sub>(10)</sub> =  0101 0000<sub>(2)</sub></p>
<p>and, or 연산을 하면 다음과 같다</p>
<p>(1001 0110) &amp; (0101 0000) = 0001 0000<sub>(2)</sub> = 16<sub>(10)</sub>
(1001 0110) | (0101 0000) = 1101 0110<sub>(2)</sub> = 214<sub>(10)</sub></p>
<p>이처럼 각 픽셀에 대해 연산을 수행하면, and, or 연산 결과 이미지를 얻을 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[OpenCV] Mac 내장 카메라 접근하기]]></title>
            <link>https://velog.io/@messy-snail/OpenCV-Mac-%EB%82%B4%EC%9E%A5-%EC%B9%B4%EB%A9%94%EB%9D%BC-%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@messy-snail/OpenCV-Mac-%EB%82%B4%EC%9E%A5-%EC%B9%B4%EB%A9%94%EB%9D%BC-%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 30 May 2021 10:59:53 GMT</pubDate>
            <description><![CDATA[<p>OpenCV 커뮤니티에서 Mac 내장 카메라에서 접근이 안된다는 질문글을 보고 내용을 정리한다. <a href="https://cafe.naver.com/opencv/56093">https://cafe.naver.com/opencv/56093</a></p>
<p>방법은 간단하다. 
<strong>시스템 환경설정 - 보안 및 개인정보 보호 - 카메라</strong> 에서 접근이 허용되어있으면 된다. 체크되어 있으면 접근이 허용된 것이다.
<img src="https://images.velog.io/images/messy-snail/post/12749c17-1178-4a2d-9dbd-1dee58723487/image.png" alt=""></p>
<p>다음과 같이 코드를 작성하면 접근을 허용할지 묻는 팝업이 뜬다.</p>
<pre><code class="language-python">import cv2

cap = cv2.VideoCapture(-1)

if not cap.isOpened():
    print(&#39;fail&#39;)</code></pre>
<p><img src="https://images.velog.io/images/messy-snail/post/185c2af0-8f6c-4f51-aeb5-f6da1c34a24e/image.png" alt=""></p>
<p>이걸 허용하고, 코드를 다음과 같이 작성하여 실행하면 정상적으로 카메라에 접근이 되는 것을 확인할 수 있다.</p>
<pre><code class="language-python">import sys
import cv2

cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print(&#39;fail&#39;)

while True:
    _, frame = cap.read()
    cv2.imshow(&#39;test&#39;, frame)
    key = cv2.waitKey(60)
    if key == 27:
        break</code></pre>
]]></description>
        </item>
    </channel>
</rss>