<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://yjg30737.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://yjg30737.github.io/" rel="alternate" type="text/html" /><updated>2025-07-16T05:53:03+00:00</updated><id>https://yjg30737.github.io/feed.xml</id><title type="html">YJG’s Think Tank</title><subtitle>GitHub page</subtitle><entry><title type="html">Algolia Indexing(인덱싱) 방법</title><link href="https://yjg30737.github.io/posts/how-to-index-algolia/" rel="alternate" type="text/html" title="Algolia Indexing(인덱싱) 방법" /><published>2022-11-28T15:00:00+00:00</published><updated>2022-11-28T15:00:00+00:00</updated><id>https://yjg30737.github.io/posts/how-to-index-algolia</id><content type="html" xml:base="https://yjg30737.github.io/posts/how-to-index-algolia/"><![CDATA[<p>사실상 개인메모입니다 ㅎ</p>

<p>대상 포스팅을 새로 검색창에서 띄우려면 늘~ 해야하는 것이 바로 인덱싱입니다.</p>

<p>이거 은근 자주 까먹어서 메모해놓으려합니다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ALGOLIA_API_KEY='내 algolia api key' bundle exec jekyll algolia
</code></pre></div></div>

<p>깃배쉬나 뭐 이런데서 쳐줍니다.</p>

<p>ALGOLIA API KEY는 본인 ALGOLIA API 정보 찾아보시면 나올겁니다..</p>

<p>다른 API KEY가 아니라 반드시 ALGOLIA API KEY여야 합니다 !!</p>]]></content><author><name>Jung Gyu Yoon</name></author><category term="posts" /><summary type="html"><![CDATA[사실상 개인메모입니다 ㅎ]]></summary></entry><entry><title type="html">Electron exe 파일 초간단 설치법</title><link href="https://yjg30737.github.io/posts/how-to-install-electron/" rel="alternate" type="text/html" title="Electron exe 파일 초간단 설치법" /><published>2022-11-27T15:00:00+00:00</published><updated>2022-11-27T15:00:00+00:00</updated><id>https://yjg30737.github.io/posts/how-to-install-electron</id><content type="html" xml:base="https://yjg30737.github.io/posts/how-to-install-electron/"><![CDATA[<p>거두절미하고 설명합니다.</p>

<p>빌드를 원하는 폴더 터미널 내에서 다음 명령어들을 실행합니다.</p>

<ol>
  <li>
    <p>npm init –yes
아주 간단한 package.json 파일 하나를 만듭니다.</p>
  </li>
  <li>
    <p>npm install -g electron-builder
electron-builder를 글로벌 형태로 설치합니다. 글로벌 형태로 작성할 시 어디서든 사용할 수 있습니다.</p>
  </li>
  <li>
    <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nl">"scripts"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"start"</span><span class="p">:</span><span class="w"> </span><span class="s2">"electron ."</span><span class="p">,</span><span class="w">
</span><span class="nl">"build:osx"</span><span class="p">:</span><span class="w"> </span><span class="s2">"electron-builder --mac"</span><span class="p">,</span><span class="w">
</span><span class="nl">"build:linux"</span><span class="p">:</span><span class="w"> </span><span class="s2">"npm run build:linux32 &amp;&amp; npm run build:linux64"</span><span class="p">,</span><span class="w">
</span><span class="nl">"build:linux32"</span><span class="p">:</span><span class="w"> </span><span class="s2">"electron-builder --linux --ia32"</span><span class="p">,</span><span class="w">
</span><span class="nl">"build:linux64"</span><span class="p">:</span><span class="w"> </span><span class="s2">"electron-builder --linux --x64"</span><span class="p">,</span><span class="w">
</span><span class="nl">"build:win"</span><span class="p">:</span><span class="w"> </span><span class="s2">"npm run build:win32 &amp;&amp; npm run build:win64"</span><span class="p">,</span><span class="w">
</span><span class="nl">"build:win32"</span><span class="p">:</span><span class="w"> </span><span class="s2">"electron-builder --win portable --ia32"</span><span class="p">,</span><span class="w">
</span><span class="nl">"build:win64"</span><span class="p">:</span><span class="w"> </span><span class="s2">"electron-builder --win portable --x64"</span><span class="w">
</span><span class="p">}</span><span class="err">,</span><span class="w">
</span></code></pre></div>    </div>
  </li>
</ol>

<p>package.json에 위 내용을 붙여넣습니다. 기존에 있던 scripts는 제거하시면 됩니다.
위에 나열된 스크립트 명령어들은 각 운영체제에 맞게 일렉트론 파일을 빌드하도록 해줍니다.</p>

<ol>
  <li>
    <p>npm i electron –save-dev
일렉트론을 개발자 의존성으로 설치합니다. 이렇게 하지 않으면 일렉트론 깔라고 나옵니다.</p>
  </li>
  <li>
    <p>main.js나 index.js를 생성합니다. 이 스크립트가 메인 스크립트가 됩니다. package.json에 “main” 속성의 값을 main.js나 index.js로 변경합니다.</p>
  </li>
  <li>
    <p>메인 스크립트는 비어 있습니다. 따라서 다음과 같이 추가해볼까요? 그냥 복붙하시면 됩니다 :)</p>
  </li>
</ol>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="p">{</span> <span class="nx">app</span><span class="p">,</span> <span class="nx">BrowserWindow</span><span class="p">,</span> <span class="nx">shell</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">electron</span><span class="dl">'</span><span class="p">)</span>

<span class="kd">const</span> <span class="nx">createWindow</span> <span class="o">=</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="kd">const</span> <span class="nx">win</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">BrowserWindow</span><span class="p">({</span>
    <span class="na">width</span><span class="p">:</span> <span class="mi">800</span><span class="p">,</span> <span class="c1">// 가로</span>
    <span class="na">height</span><span class="p">:</span> <span class="mi">600</span><span class="p">,</span> <span class="c1">// 세로</span>
    <span class="na">autoHideMenuBar</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> <span class="c1">// 메뉴바 일단 숨김!!</span>
  <span class="p">})</span>

<span class="c1">// 링크 클릭할시 프로그램 안에서 열리는데</span>
<span class="c1">// 브라우저에서 열려야겠죠.. 기본이라고 생각되어서 여기 놓습니다 !!</span>
  <span class="nx">win</span><span class="p">.</span><span class="nx">webContents</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="dl">'</span><span class="s1">new-window</span><span class="dl">'</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">e</span><span class="p">,</span> <span class="nx">url</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span>
    <span class="nx">shell</span><span class="p">.</span><span class="nx">openExternal</span><span class="p">(</span><span class="nx">url</span><span class="p">);</span>
  <span class="p">});</span>

<span class="c1">// 님이 적는 url이 exe 파일이 됩니다~~ 아래는 제블로그 URL 입니다.</span>
  <span class="nx">win</span><span class="p">.</span><span class="nx">loadURL</span><span class="p">(</span><span class="dl">'</span><span class="s1">https://yjg30737.github.io/</span><span class="dl">'</span><span class="p">)</span> 
  

<span class="p">}</span>

<span class="nx">app</span><span class="p">.</span><span class="nx">whenReady</span><span class="p">().</span><span class="nx">then</span><span class="p">(()</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="nx">createWindow</span><span class="p">()</span>
<span class="p">})</span>
</code></pre></div></div>

<p>안채워주시면 빌드할때 오류납니다😅</p>

<ol>
  <li>빌드 전 테스트는 필수입니다, 따라서</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm start
</code></pre></div></div>
<p>를 입력해줍니다 :)</p>

<ol>
  <li>이제 빌드해줍니다. 윈도 64비트라고 가정합니다.</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm run build:win64
</code></pre></div></div>

<p>쫌 오래 걸릴겁니다. 아닐수도 있고요..?</p>

<ol>
  <li>dist 폴더 안에 win-unpacked 폴더 들어가시면 exe 파일 하나가 보일겁니다.</li>
</ol>

<p><img src="/assets/images/2022-11-28/a.png" alt="example" /></p>

<p>윈도 “기본” 타이틀명은 package.json의 name 값 그대로입니다.</p>

<p>수고수고 👌</p>]]></content><author><name>Jung Gyu Yoon</name></author><category term="posts" /><summary type="html"><![CDATA[거두절미하고 설명합니다.]]></summary></entry><entry><title type="html">How to solve CMake error in Flutter</title><link href="https://yjg30737.github.io/posts/how-to-solve-cmake-error-flutter/" rel="alternate" type="text/html" title="How to solve CMake error in Flutter" /><published>2022-07-02T15:00:00+00:00</published><updated>2022-07-02T15:00:00+00:00</updated><id>https://yjg30737.github.io/posts/how-to-solve-cmake-error-flutter</id><content type="html" xml:base="https://yjg30737.github.io/posts/how-to-solve-cmake-error-flutter/"><![CDATA[<p>Error message generated after Visual Studio upgrade:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>CMake Error: Error: generator : Visual Studio 17 2022
Does not match the generator used previously: Visual Studio 16 2019
Either remove the CMakeCache.txt file and CMakeFiles directory or choose a different binary directory.
Exception: Unable to generate build files
</code></pre></div></div>

<p>So how can we solve this?</p>

<p>In the project path, enter a command like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>flutter clean
flutter run -d windows
</code></pre></div></div>

<p>That’s it!</p>]]></content><author><name>Jung Gyu Yoon</name></author><category term="posts" /><summary type="html"><![CDATA[Error message generated after Visual Studio upgrade:]]></summary></entry><entry><title type="html">How to save Wikipedia document to local text file with Python?</title><link href="https://yjg30737.github.io/posts/python-how-to-get-wikipedia-text/" rel="alternate" type="text/html" title="How to save Wikipedia document to local text file with Python?" /><published>2022-06-30T15:00:00+00:00</published><updated>2022-06-30T15:00:00+00:00</updated><id>https://yjg30737.github.io/posts/python-how-to-get-wikipedia-text</id><content type="html" xml:base="https://yjg30737.github.io/posts/python-how-to-get-wikipedia-text/"><![CDATA[<p>Python is a programming language used in many fields such as web crawling.</p>

<p>Getting the Wikipedia document’s content is also simple in Python.</p>

<p>All you need is the <a href="https://pypi.org/project/bs4/">bs4</a>, <a href="https://pypi.org/project/urllib3/">urllib3</a> and <a href="https://pypi.org/project/certifi/">certifi</a> packages.</p>

<p><strong>bs4</strong> is dummy package of <a href="https://pypi.org/project/beautifulsoup4/">beautifulsoup4</a>. beautifulsoup4 is a library that makes it easy to scrape information from web pages. This package is often used for web crawling.</p>

<p><strong>urllib3</strong> is used for HTTP request. You need “request” if you want to scrape information from web page, and this will handle it.</p>

<p><strong>certifi</strong> is used for validating the trustworthiness of SSL certificate while verifying the identity of TLS hosts. Simply put, you can’t be trusted if you won’t install this.</p>

<p>If the above 3 packages do not exist, you must install them. Here’s how to install it:</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python <span class="nt">-m</span> pip <span class="nb">install </span>certifi

python <span class="nt">-m</span> pip <span class="nb">install </span>urllib3

python <span class="nt">-m</span> pip <span class="nb">install </span>bs4
</code></pre></div></div>

<p>Write the following code.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">certifi</span>
<span class="kn">import</span> <span class="nn">urllib3</span>
<span class="kn">from</span> <span class="nn">bs4</span> <span class="kn">import</span> <span class="n">BeautifulSoup</span>
<span class="kn">import</span> <span class="nn">re</span><span class="p">,</span> <span class="n">os</span>

<span class="k">def</span> <span class="nf">convertWikiToText</span><span class="p">(</span><span class="n">url</span><span class="p">):</span>
    <span class="c1"># check if it is Wikipedia based URL
</span>    <span class="n">m</span> <span class="o">=</span> <span class="n">re</span><span class="p">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s">'\.wikipedia\.org'</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span> 
    <span class="k">if</span> <span class="n">m</span><span class="p">:</span>
        <span class="n">http</span> <span class="o">=</span> <span class="n">urllib3</span><span class="p">.</span><span class="n">PoolManager</span><span class="p">(</span><span class="n">ca_certs</span><span class="o">=</span><span class="n">certifi</span><span class="p">.</span><span class="n">where</span><span class="p">())</span>
        <span class="c1"># request and get the response info
</span>        <span class="n">resp</span> <span class="o">=</span> <span class="n">http</span><span class="p">.</span><span class="n">request</span><span class="p">(</span><span class="s">'GET'</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
        <span class="c1"># decode the response data to make it look better
</span>        <span class="n">resp_data</span> <span class="o">=</span> <span class="n">resp</span><span class="p">.</span><span class="n">data</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="s">'utf-8'</span><span class="p">)</span>
        <span class="c1"># if success (200 means success, 404 means error as you know)
</span>        <span class="k">if</span> <span class="n">resp</span><span class="p">.</span><span class="n">status</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
            <span class="n">soup</span> <span class="o">=</span> <span class="n">BeautifulSoup</span><span class="p">(</span><span class="n">resp_data</span><span class="p">,</span> <span class="n">features</span><span class="o">=</span><span class="s">'lxml'</span><span class="p">)</span>
            <span class="c1"># get the title of document.
</span>            <span class="n">title</span> <span class="o">=</span> <span class="n">soup</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="s">'title'</span><span class="p">).</span><span class="n">text</span><span class="p">.</span><span class="n">split</span><span class="p">(</span><span class="s">' - '</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
            <span class="c1"># Tag that has bodyContent as an id contains all the contents in the document, so find the info of the tag.
</span>            <span class="n">content_tag</span> <span class="o">=</span> <span class="n">soup</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="s">'bodyContent'</span><span class="p">)</span>
            <span class="c1"># get the text of it.
</span>            <span class="n">content</span> <span class="o">=</span> <span class="n">content_tag</span><span class="p">.</span><span class="n">text</span>
            <span class="n">filename</span> <span class="o">=</span> <span class="n">title</span> <span class="o">+</span> <span class="s">'.txt'</span>
            <span class="c1"># create the text file
</span>            <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">'w'</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s">'utf-8'</span><span class="p">)</span>
            <span class="n">f</span><span class="p">.</span><span class="n">write</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
            <span class="n">f</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
            <span class="c1"># start the file right away
</span>            <span class="n">os</span><span class="p">.</span><span class="n">startfile</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="k">raise</span> <span class="nb">Exception</span><span class="p">(</span><span class="s">'This is not the right URL'</span><span class="p">)</span>

<span class="n">convertWikiToText</span><span class="p">(</span><span class="s">'https://en.m.wikipedia.org/wiki/Chocolatey'</span><span class="p">)</span>
</code></pre></div></div>

<p>You will get the wikipedia document as a text file.</p>

<p><img src="/assets/images/python_how_to_get_wikipedia_text/1.png" alt="example" /></p>

<p>If you see more about this, check my GitHub repo “<a href="https://github.com/yjg30737/wiki-offline.git">wiki-offline</a>”.</p>]]></content><author><name>Jung Gyu Yoon</name></author><category term="posts" /><summary type="html"><![CDATA[Python is a programming language used in many fields such as web crawling.]]></summary></entry><entry><title type="html">How to show animated SVG icon in PyQt5</title><link href="https://yjg30737.github.io/posts/pyqt-how-to-show-animated-svg/" rel="alternate" type="text/html" title="How to show animated SVG icon in PyQt5" /><published>2022-06-13T15:00:00+00:00</published><updated>2022-06-13T15:00:00+00:00</updated><id>https://yjg30737.github.io/posts/pyqt-how-to-show-animated-svg</id><content type="html" xml:base="https://yjg30737.github.io/posts/pyqt-how-to-show-animated-svg/"><![CDATA[<p>So, here we are. The second English post.</p>

<p>How to show animated SVG icon? Quite simple.</p>

<p>But before you start it, download the sample <a href="https://loading.io/asset/579298">SVG icon</a> first.</p>

<p>Make directory name ico and move downloaded SVG icon to directory you made.</p>

<p>Then make the Python script like below.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">sys</span>

<span class="kn">from</span> <span class="nn">PyQt5.QtSvg</span> <span class="kn">import</span> <span class="n">QSvgWidget</span>
<span class="kn">from</span> <span class="nn">PyQt5.QtWidgets</span> <span class="kn">import</span> <span class="n">QApplication</span>


<span class="c1"># QSvgWidget is good to use when you want to make SVG-related widget.
</span><span class="k">class</span> <span class="nc">AnimatedSvgExample</span><span class="p">(</span><span class="n">QSvgWidget</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="nb">super</span><span class="p">().</span><span class="n">__init__</span><span class="p">()</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">__initUi</span><span class="p">()</span>

    <span class="k">def</span> <span class="nf">__initUi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="n">r</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">renderer</span><span class="p">()</span>
        <span class="c1"># set FPS of SVG animation.
</span>        <span class="n">r</span><span class="p">.</span><span class="n">setFramesPerSecond</span><span class="p">(</span><span class="mi">60</span><span class="p">)</span> 
        <span class="n">ico_filename</span> <span class="o">=</span> <span class="s">'ico/rolling.svg'</span>
        <span class="c1"># set SVG icon to QSvgWidget.
</span>        <span class="n">r</span><span class="p">.</span><span class="n">load</span><span class="p">(</span><span class="n">ico_filename</span><span class="p">)</span> 


<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">"__main__"</span><span class="p">:</span>
    <span class="n">app</span> <span class="o">=</span> <span class="n">QApplication</span><span class="p">(</span><span class="n">sys</span><span class="p">.</span><span class="n">argv</span><span class="p">)</span>
    <span class="n">r</span> <span class="o">=</span> <span class="n">AnimatedSvgExample</span><span class="p">()</span>
    <span class="n">r</span><span class="p">.</span><span class="n">show</span><span class="p">()</span>
    <span class="n">sys</span><span class="p">.</span><span class="nb">exit</span><span class="p">(</span><span class="n">app</span><span class="p">.</span><span class="n">exec_</span><span class="p">())</span>
</code></pre></div></div>

<p>Copy and run.</p>

<p><img src="/assets/images/pyqt_how_to_show_animated_svg/1.png" alt="example" /></p>

<p>There is <a href="https://github.com/yjg30737/pyqt-animated-svg-example.git">GitHub repository</a> i made as an example.</p>

<p>Well, that’s it.</p>

<p>But i gotta say this method is not perfect.</p>

<p><b>The problem is PyQt or Python whatever only accept the animateTransform.</b></p>

<p>So far i can’t find how to let them properly handle with other animate-related tag.</p>

<p>So bottom line, this method(which is only method in Qt by the way) works to SVG icon which has animateTransform, not animate/animateMotion.</p>

<p>I will find out how to solve that problem, definitely.</p>]]></content><author><name>Jung Gyu Yoon</name></author><category term="posts" /><summary type="html"><![CDATA[So, here we are. The second English post.]]></summary></entry><entry><title type="html">How to show basic window in PyQt5</title><link href="https://yjg30737.github.io/posts/pyqt-basic-window/" rel="alternate" type="text/html" title="How to show basic window in PyQt5" /><published>2022-06-09T15:00:00+00:00</published><updated>2022-06-09T15:00:00+00:00</updated><id>https://yjg30737.github.io/posts/pyqt-basic-window</id><content type="html" xml:base="https://yjg30737.github.io/posts/pyqt-basic-window/"><![CDATA[<p>Finally, first English post.</p>

<p>I will teach you how to show basic window in PyQt5.</p>

<p>This is very basic post as well.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">PyQt5.QtWidgets</span> <span class="kn">import</span> <span class="n">QMainWindow</span><span class="p">,</span> <span class="n">QLabel</span><span class="p">,</span> <span class="n">QApplication</span>


<span class="k">class</span> <span class="nc">MainWindow</span><span class="p">(</span><span class="n">QMainWindow</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="nb">super</span><span class="p">().</span><span class="n">__init__</span><span class="p">()</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">__initUi</span><span class="p">()</span>
        
    <span class="k">def</span> <span class="nf">__initUi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="n">lbl</span> <span class="o">=</span> <span class="n">QLabel</span><span class="p">(</span><span class="s">'Hello World!'</span><span class="p">)</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">setCentralWidget</span><span class="p">(</span><span class="n">lbl</span><span class="p">)</span>
        

<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">"__main__"</span><span class="p">:</span>
    <span class="kn">import</span> <span class="nn">sys</span>

    <span class="n">app</span> <span class="o">=</span> <span class="n">QApplication</span><span class="p">(</span><span class="n">sys</span><span class="p">.</span><span class="n">argv</span><span class="p">)</span>
    <span class="n">w</span> <span class="o">=</span> <span class="n">MainWindow</span><span class="p">()</span>
    <span class="n">w</span><span class="p">.</span><span class="n">show</span><span class="p">()</span>
    <span class="n">app</span><span class="p">.</span><span class="n">exec_</span><span class="p">()</span>
</code></pre></div></div>

<p><img src="/assets/images/pyqt_basic_window/1.png" alt="example" /></p>

<p>Super basic. But QLabel is little off from the center. Align it:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># know the drill, right?
</span><span class="o">//</span><span class="p">..</span>
    <span class="k">def</span> <span class="nf">__initUi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="n">lbl</span> <span class="o">=</span> <span class="n">QLabel</span><span class="p">(</span><span class="s">'Hello World!'</span><span class="p">)</span>
        <span class="n">lbl</span><span class="p">.</span><span class="n">setAlignment</span><span class="p">(</span><span class="n">Qt</span><span class="p">.</span><span class="n">AlignCenter</span><span class="p">)</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">setCentralWidget</span><span class="p">(</span><span class="n">lbl</span><span class="p">)</span>
<span class="o">//</span><span class="p">..</span>
</code></pre></div></div>

<p><img src="/assets/images/pyqt_basic_window/2.png" alt="example" /></p>

<p>So basic, only label? I don’t think this actually is capable of doing something.</p>

<p>At least he needs some friend to hang around with.</p>

<p>How about QTextEdit?</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">PyQt5.QtWidgets</span> <span class="kn">import</span> <span class="n">QMainWindow</span><span class="p">,</span> <span class="n">QLabel</span><span class="p">,</span> <span class="n">QApplication</span><span class="p">,</span> <span class="n">QVBoxLayout</span><span class="p">,</span> <span class="n">QTextEdit</span><span class="p">,</span> <span class="n">QWidget</span>
<span class="kn">from</span> <span class="nn">PyQt5.QtCore</span> <span class="kn">import</span> <span class="n">Qt</span>


<span class="k">class</span> <span class="nc">MainWindow</span><span class="p">(</span><span class="n">QMainWindow</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="nb">super</span><span class="p">().</span><span class="n">__init__</span><span class="p">()</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">__initUi</span><span class="p">()</span>

    <span class="k">def</span> <span class="nf">__initUi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="n">lbl</span> <span class="o">=</span> <span class="n">QLabel</span><span class="p">(</span><span class="s">'Hello Text Editor!'</span><span class="p">)</span>
        <span class="n">lbl</span><span class="p">.</span><span class="n">setAlignment</span><span class="p">(</span><span class="n">Qt</span><span class="p">.</span><span class="n">AlignCenter</span><span class="p">)</span>
        <span class="n">te</span> <span class="o">=</span> <span class="n">QTextEdit</span><span class="p">()</span> <span class="c1"># new friend here!
</span>
        <span class="n">lay</span> <span class="o">=</span> <span class="n">QVBoxLayout</span><span class="p">()</span> <span class="c1"># layout (layout is needed for 2 or more widgets)
</span>        <span class="n">lay</span><span class="p">.</span><span class="n">addWidget</span><span class="p">(</span><span class="n">lbl</span><span class="p">)</span>
        <span class="n">lay</span><span class="p">.</span><span class="n">addWidget</span><span class="p">(</span><span class="n">te</span><span class="p">)</span>

        <span class="n">mainWidget</span> <span class="o">=</span> <span class="n">QWidget</span><span class="p">()</span> <span class="c1"># we need widget to contain the layout
</span>        <span class="n">mainWidget</span><span class="p">.</span><span class="n">setLayout</span><span class="p">(</span><span class="n">lay</span><span class="p">)</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">setCentralWidget</span><span class="p">(</span><span class="n">mainWidget</span><span class="p">)</span>


<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">"__main__"</span><span class="p">:</span>
    <span class="kn">import</span> <span class="nn">sys</span>

    <span class="n">app</span> <span class="o">=</span> <span class="n">QApplication</span><span class="p">(</span><span class="n">sys</span><span class="p">.</span><span class="n">argv</span><span class="p">)</span>
    <span class="n">w</span> <span class="o">=</span> <span class="n">MainWindow</span><span class="p">()</span>
    <span class="n">w</span><span class="p">.</span><span class="n">show</span><span class="p">()</span>
    <span class="n">app</span><span class="p">.</span><span class="n">exec_</span><span class="p">()</span>
</code></pre></div></div>

<p><img src="/assets/images/pyqt_basic_window/3.png" alt="example" /></p>

<p>Basic. What do you expect to my first English post?</p>

<p>This spent so much time than i expected. Just.. Wow.</p>

<p>How can anybody take the time to write down the post far longer than this?</p>]]></content><author><name>Jung Gyu Yoon</name></author><category term="posts" /><summary type="html"><![CDATA[Finally, first English post.]]></summary></entry><entry><title type="html">pip로 requirements.txt를 앳, file… 없이 가지런하게 만드는 방법</title><link href="https://yjg30737.github.io/posts/how-to-make-requirements-txt-out-of-pip/" rel="alternate" type="text/html" title="pip로 requirements.txt를 앳, file… 없이 가지런하게 만드는 방법" /><published>2021-11-30T15:00:00+00:00</published><updated>2021-11-30T15:00:00+00:00</updated><id>https://yjg30737.github.io/posts/how-to-make-requirements-txt-out-of-pip</id><content type="html" xml:base="https://yjg30737.github.io/posts/how-to-make-requirements-txt-out-of-pip/"><![CDATA[<p>pip로 requirements.txt 앳(@), file… 없이 가지런하게 만드는 방법입니다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip freeze &gt; requirements.txt
</code></pre></div></div>
<p>위는 매우 전형적인 방식입니다. 입력하면 아래와 같은 파일이 생깁니다.</p>

<p><img src="https://yjg30737.github.io/assets/images/pip_freeze_1.png" alt="pip_freeze_1" /></p>

<p>그런데 requirements.txt를 열어보시면 위와 같이 ~@~ 처럼 나오는 경우가 있습니다.
보통 “패키지이름==버전이름” 처럼 나와야 하는데 말이죠 ㅜ</p>

<p>보통 깃헙 저장소 소스에서 직접 다운받은 패키지를 저런 식으로 해석하더군요.</p>

<p>file… 같은 경우는 로컬이고 https… 같은 경우는 원격 저장소에서 받은 것입니다.</p>

<p>다시 다운로드할 때(특히 conda 쓰시는 분들)엔 상당히 애를 먹습니다!</p>

<p>파이썬 IDE인 파이참 같은 경우 requirements.txt에 있는 패키지들을 자동으로 인스톨해주지만, ~@~ 형식의 패키지는 인스톨 시 실패합니다.</p>

<p>그렇다면 어떻게 양식을 통일해야 하는가?</p>

<p><code class="language-plaintext highlighter-rouge">pip list --format=freeze &gt; requirements.txt</code></p>

<p>위와 같이 명령어를 작성하면 됩니다.</p>

<p><img src="https://yjg30737.github.io/assets/images/pip_freeze_2.png" alt="pip_freeze_2" /></p>

<p>이렇게 하면 위와 같이 가지런히 나오게 됩니다.</p>

<p>하지만 명심해야할 것. 릴리즈가 되지 않은 패키지(conda를 쓴다면 conda 저장소에 없거나, pip가 검색할 수 없는 패키지이거나)는 여전히 인스톨되지 않을 것입니다.</p>]]></content><author><name>Jung Gyu Yoon</name></author><category term="posts" /><summary type="html"><![CDATA[pip로 requirements.txt 앳(@), file… 없이 가지런하게 만드는 방법입니다.]]></summary></entry><entry><title type="html">파이참(PyCharm) 프로젝트 파일 안보이는 문제, 설정 창 인터프리터 부분의 nothing to show 문제 해결하기</title><link href="https://yjg30737.github.io/posts/how-to-solve-the-nothing-to-show-problem-in-pycharm/" rel="alternate" type="text/html" title="파이참(PyCharm) 프로젝트 파일 안보이는 문제, 설정 창 인터프리터 부분의 nothing to show 문제 해결하기" /><published>2021-11-30T15:00:00+00:00</published><updated>2021-11-30T15:00:00+00:00</updated><id>https://yjg30737.github.io/posts/how-to-solve-the-nothing-to-show-problem-in-pycharm</id><content type="html" xml:base="https://yjg30737.github.io/posts/how-to-solve-the-nothing-to-show-problem-in-pycharm/"><![CDATA[<p>파이참을 사용하다가 가끔씩 난관에 부딪칠 때가 많은데요.</p>

<p>있어야 할 프로젝트 파일 몇몇이 안보이는 일도 다 생깁니다.</p>

<p><img src="https://yjg30737.github.io/assets/images/pycharm_nothing_to_show_2.png" alt="pycharm_nothing_to_show_2" /></p>

<p>위에서 내비게이션 뷰 모드를 Project에서 Project Files로 바꾸었을 때, Project Files에서 나오는 파일들이 Project에서도 나와야 되는데 안 나오죠!</p>

<p>그래서 프로젝트 구조 다시 설정해볼려고 설정 -&gt; 인터프리터 들어가보면 nothing to show라고만 나옵니다.</p>

<p><img src="https://yjg30737.github.io/assets/images/pycharm_nothing_to_show.png" alt="pycharm_nothing_to_show" /></p>

<p>위 사진처럼, Project: … 와 같이 나와야 되는데 말이죠.</p>

<p>프로젝트는 분명히 존재하는데, 프로젝트 내에 있는 파일이 제대로 인식이 안되는 경우가 있다?</p>

<p>구글링해보니 <b>해답은 .idea 폴더를 삭제한 뒤 파이참을 다시 실행시키는 것이 답이라더군요.</b></p>

<p>그렇게 해보니까 다시 됩니다 ㅎㅎ 물론 사라졌던 .idea 폴더도 다시 생기고요.</p>

<p>※ .idea 폴더는 프로젝트 이름, 디렉토리 이름 등 정보를 포함한 xml 파일들이 있는 폴더입니다.</p>]]></content><author><name>Jung Gyu Yoon</name></author><category term="posts" /><summary type="html"><![CDATA[파이참을 사용하다가 가끔씩 난관에 부딪칠 때가 많은데요.]]></summary></entry><entry><title type="html">파이참(PyCharm)에서 디렉토리 이름변경 시 java.io.ioexception 오류 해결방법</title><link href="https://yjg30737.github.io/posts/how-to-fix-java-io-ioexception-in-pycharm/" rel="alternate" type="text/html" title="파이참(PyCharm)에서 디렉토리 이름변경 시 java.io.ioexception 오류 해결방법" /><published>2021-11-29T15:00:00+00:00</published><updated>2021-11-29T15:00:00+00:00</updated><id>https://yjg30737.github.io/posts/how-to-fix-java-io-ioexception-in-pycharm</id><content type="html" xml:base="https://yjg30737.github.io/posts/how-to-fix-java-io-ioexception-in-pycharm/"><![CDATA[<p>파이참에서 디렉토리 이름변경 기능을 사용할 시 java.io.ioexception이 뜰 때가 있죠.</p>

<p>그럴때는 디렉토리에 있는 파일이 현재 사용중이거나 하는 경우입니다.</p>

<p>윈도우에서 폴더 지울때 “폴더 내 파일이 현재 사용중이기 때문에 지울 수 없습니다.” 하는 경우가 있죠. 그것과 비슷한 경우입니다.</p>

<p>관련 파일을 모두 종료하시고 다시 시도하시면 될 것입니다.</p>

<p>그래도 안된다면? 직접 디렉토리 이름을 탐색기에서 바꾸시면 됩니다.</p>]]></content><author><name>Jung Gyu Yoon</name></author><category term="posts" /><summary type="html"><![CDATA[파이참에서 디렉토리 이름변경 기능을 사용할 시 java.io.ioexception이 뜰 때가 있죠.]]></summary></entry><entry><title type="html">jekyll에서 특수기호 raw string으로 인식시키는 방법</title><link href="https://yjg30737.github.io/posts/how-to-input-raw-string-into-jekyll-post/" rel="alternate" type="text/html" title="jekyll에서 특수기호 raw string으로 인식시키는 방법" /><published>2021-11-29T15:00:00+00:00</published><updated>2021-11-29T15:00:00+00:00</updated><id>https://yjg30737.github.io/posts/how-to-input-raw-string-into-jekyll-post</id><content type="html" xml:base="https://yjg30737.github.io/posts/how-to-input-raw-string-into-jekyll-post/"><![CDATA[<p>깃헙 페이지 포스트 내용 중 코드를 쓸 시, 중괄호나 밑줄 두개 같이 jekyll에서 특수기호로 취급되는 낱말은 제대로 입력이 되지 않습니다. 그럴 때는 다음과 같이 하시면 됩니다!</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;% raw %&gt;
(...)
&lt;% endraw %&gt;
</code></pre></div></div>

<p>(…) 안에 코드를 넣으시면 됩니다.</p>]]></content><author><name>Jung Gyu Yoon</name></author><category term="posts" /><summary type="html"><![CDATA[깃헙 페이지 포스트 내용 중 코드를 쓸 시, 중괄호나 밑줄 두개 같이 jekyll에서 특수기호로 취급되는 낱말은 제대로 입력이 되지 않습니다. 그럴 때는 다음과 같이 하시면 됩니다! &lt;% raw %&gt; (...) &lt;% endraw %&gt;]]></summary></entry></feed>