<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>yeonseong.log</title>
        <link>https://velog.io/</link>
        <description>선한 의도가 선한 결과를 만드는 시스템을 만드는게 꿈입니다.</description>
        <lastBuildDate>Sun, 20 Mar 2022 14:27:09 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>yeonseong.log</title>
            <url>https://images.velog.io/images/yeonseong_lee/profile/af7f7770-4281-4e1d-b54d-d07676a5b3c8/1623057494111.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. yeonseong.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/yeonseong_lee" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[논문] 데이터 베이스 특성에 따른 효율적인 데이터 마이닝 알고리즘]]></title>
            <link>https://velog.io/@yeonseong_lee/%EB%85%BC%EB%AC%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B9%EC%84%B1%EC%97%90-%EB%94%B0%EB%A5%B8-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%88%EC%9D%B4%EB%8B%9D-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@yeonseong_lee/%EB%85%BC%EB%AC%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B9%EC%84%B1%EC%97%90-%EB%94%B0%EB%A5%B8-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%88%EC%9D%B4%EB%8B%9D-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Sun, 20 Mar 2022 14:27:09 GMT</pubDate>
            <description><![CDATA[<h2 id="tltr">TLTR</h2>
<ul>
<li>트랜잭션들의 길이가 짧거나 데이터베이스를 이루는 항목들의 수가 비교적 적은 트랜잭션 데이터 베이스에서</li>
<li>해쉬 기법을 사용하여 스캔하면서 트랜잭션에서 발생 가능한 부분집합을 해쉬 테이블에 저장해서</li>
<li>최소 지지도에 영향을 받지 않고 기존 알고리즘보다 빈발항목 집합을 효율적으로 발견할 수 있는 연관 규칙 탐사 알고리즘 제안</li>
</ul>
<h2 id="기존의-연관-규칙-탐사">기존의 연관 규칙 탐사</h2>
<p> 트랜잭션에 나타나는 항목의 발생 빈보수가 최소 지지도(Minumum Support) 보다 큰 빈발 항목 집합(Large frequent item sets)을 찾는 방법</p>
<p> 기존 연관 규칙 탐사 알고리즘은 빈발 항목 집합의 후보 항목집합을 만들고 찾아냄. 기존 알고리즘 개선 연구는 후보 항목 집합 줄이기와 데이터베이스 크기 줄이는 방향으로 진행되옴.</p>
<p> 기존 방식이 시간을 줄이기는 하지만, 후보 집합 줄이기와 데이터베이스 크기를 줄이는데에 시간을 들여야하는 단점 존재.</p>
<p> 기존 알고리즘은 트랜잭션의 길이가  길고 후보 항복의 수가 많은 대용량 데이터 베이스에서 수행되는 경우를 가정. </p>
<h2 id="본-연구의-핵심-아이디어-및-차별점">본 연구의 핵심 아이디어 및 차별점</h2>
<p> 하지만 트랜잭션은 다양한 형태로 이뤄짐
 트랜잭션이 짧은 데이터에 대해서 더 효율적인 연관 규칙 탐색 알고리즘이 가능</p>
<blockquote>
<p><strong>데이터베이스 특성에 맞춰</strong> 효율적인 알고리즘이 가능하다.</p>
</blockquote>
<p> <img src="https://images.velog.io/images/yeonseong_lee/post/5a965f1e-8591-4544-a048-9744b49b0002/image.png" alt=""></p>
<h2 id="몰랐던-것">몰랐던 것</h2>
<p> <a href="https://ko.wikipedia.org/wiki/%ED%8D%BC%EC%A7%80_%EB%85%BC%EB%A6%AC">퍼지논리</a></p>
<ul>
<li>퍼지이론과 확률론의 차이 : 확률은 결과가 명확하게 떨어지는 것들을 다루고 퍼지이론은 결과가 불명확한것을 다룸, 예를 들어 주사위를 던져서 나오는 눈의 수와 같은 결과가 확실한건 확률론의 영역이고, 예쁜 사람의 집합은 퍼지 이론의 영역임.</li>
</ul>
<p><a href="https://www.youtube.com/watch?v=yE8oCPmKX0I">불확실성 추론(Reasoning with Uncertainty)</a></p>
<h2 id="출처">출처</h2>
<p>  데이터 베이스 특성에 따른 효율적인 데이터 마이닝 알고리즘, (박지현, 고찬)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[유닉스 커멘드 라인]]></title>
            <link>https://velog.io/@yeonseong_lee/%EC%9C%A0%EB%8B%89%EC%8A%A4-%EC%BB%A4%EB%A9%98%EB%93%9C-%EB%9D%BC%EC%9D%B8</link>
            <guid>https://velog.io/@yeonseong_lee/%EC%9C%A0%EB%8B%89%EC%8A%A4-%EC%BB%A4%EB%A9%98%EB%93%9C-%EB%9D%BC%EC%9D%B8</guid>
            <pubDate>Fri, 10 Dec 2021 13:31:21 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/yeonseong_lee/post/9c02195c-ce00-4a48-84d9-f544d4c0c753/image.png" alt=""></p>
<h1 id="유닉스unix">유닉스(Unix)</h1>
<p> 1970년 초반에 개발된 운영 체제 
 -&gt; 개발자들이 소프트웨어를 개발하고 실행할 수 있는 편리한 플랫폼 제공 목적으로 개발됨 
 -&gt; 편리하게 수정해서 다른 컴퓨터에 적용 가능 
 -&gt; 유닉스기반 다양한 운영 체제 탄생</p>
<blockquote>
<p>유닉스 기반으로 파생된 운영체제 <a href="https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%89%EC%8A%A4_%EA%B3%84%EC%97%B4"><img src="https://images.velog.io/images/yeonseong_lee/post/653d49cb-ff2f-44db-83a7-93aa7b6e4fe3/image.png" alt=""> </a></p>
</blockquote>
<h1 id="커멘드">커멘드</h1>
<p><code>date</code> 쓰면 날짜 출력,     <code>cal</code> 을 쓰면 달력 출력</p>
<p><code>man date</code> 처럼 앞에 <code>man</code>을 붙여주면 공식 문서를 확인 할 수 있다. </p>
<h2 id="메뉴얼에서-커멘드-화면-움직이기">메뉴얼에서 커멘드 화면 움직이기</h2>
<p>메뉴얼 페이지 나가기 : Q
 위아래로 이동 : 위와래 방향키
 페이지 단위 내려가기 : space or f
 페이지 단위 올리기 : b</p>
<h2 id="기타-꿀팁">기타 꿀팁</h2>
<p>  <code>clear</code>로 화면 깨끗하게 할 수 있음.
   Tab 키로 자동완성</p>
<h2 id="커서-이동">커서 이동</h2>
<p>  줄 맨 앞으로 : ctrl + A
  줄 맨 뒤로 : ctrl + E
  단어 단위 이동 : alt + 왼쪽 오른쪽 방향키
  실행 취소 : ctrl+ C</p>
<h2 id="파일관리">파일관리</h2>
<h3 id="print-working-directory">print working directory</h3>
<p>  <code>pwd</code> 현재 작업중인 디렉토리(working directory)을 표시해줌.</p>
<h3 id="change-directory">change directory</h3>
<p> <code>cd 원하는 경로</code><br> <code>cd</code> 홈으로 이동 
 <code>cd -</code> 전으로 이동</p>
<h3 id="상대경로">상대경로</h3>
<p>  :    현재 디렉토리 . 으로 표시 
  : 상위 디렉토리 .. 으로 표시</p>
<h3 id="list">list</h3>
<p>  <code>ls</code> 자식 디렉토리에 있는 요소들 보여줌</p>
<p>  <code>ls -a</code>  숨겨진 디렉토리안 요소들 보여줌</p>
<p>  <code>ls -l</code> 더 많은 정보와 함께 보여줌</p>
<h3 id="디렉토리와-파일-만들기">디렉토리와 파일 만들기</h3>
<pre><code>  `mkdir 경로` : 디렉토리 만들기
`touch 경로` : 파일 만들기, 
원래 touch 명령어는 파일을 말그대로 터치해서 최종 접근 시간을 업데이트해주는데 쓰임
파일이 없으면 파일을 만들어줌.</code></pre><p>   <a href="https://www.morenice.kr/25">Vim 사용법</a></p>
<p>   텍스트 입력: 입력 모드(i) → 텍스트 입력</p>
<p>텍스트 한 줄 복사: 일반 모드 → 복사하고 싶은 줄에 커서 위치 → yy
텍스트 한 줄 잘라내기: 일반 모드 → 잘라내고 싶은 줄에 커서 위치 → dd
특정 영역 복사: 비주얼 모드(V는 줄 단위, v는 글자 단위) → 복사하고 싶은 영역 커서로 설정 → y
특정 영역 잘라내기: 비주얼 모드(V는 줄 단위, v는 글자 단위) → 잘라내고 싶은 영역 커서로 설정 → d
텍스트 붙여넣기: 일반 모드 → 붙여넣고 싶은 위치에 커서 위치 → p
파일 저장: 명령 모드(:) → w + enter
파일 저장 + vim 종료: 명령 모드(:) → wq + enter
vim 종료 (내용 저장되지 않음): 명령 모드(:) → q! + enter</p>
<h3 id="디렉토리와-파일-이동--이름-변경하기">디렉토리와 파일 이동 &amp; 이름 변경하기</h3>
<p>  <code>mv 작업할_대상_경로 이동할_목적지_or_변경할_이름</code></p>
<h3 id="디렉로리와-파일-복사-붙여넣기">디렉로리와 파일 복사 붙여넣기</h3>
<p>  <code>cp 복사할_대상의_경로 복사할_위치</code></p>
<h3 id="디렉로리와-파일-삭제하기">디렉로리와 파일 삭제하기</h3>
<p>  <code>rm 지우고싶은_파일_또는_경로</code>
   디렉토리 삭제할 때는 -r옵션을 주어야 함.</p>
<h2 id="외부-프로그램-설치">외부 프로그램 설치</h2>
<pre><code>우분투 : apt
macOS : homebrew</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[expo] react-native-dropdown-picker]]></title>
            <link>https://velog.io/@yeonseong_lee/expo-react-native-dropdown-picker</link>
            <guid>https://velog.io/@yeonseong_lee/expo-react-native-dropdown-picker</guid>
            <pubDate>Thu, 09 Dec 2021 17:08:09 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/yeonseong_lee/post/e7645bdf-b340-4e0f-bc83-5efab290fd86/image.png" alt=""></p>
<pre><code class="language-javascript">import * as React from &quot;react&quot;;
import { Text, View, StyleSheet } from &quot;react-native&quot;;
import Constants from &quot;expo-constants&quot;;

// You can import from local files
import DropDownPicker from &quot;react-native-dropdown-picker&quot;;

export default function App() {
  return (
    &lt;View style={styles.container}&gt;
      &lt;Text style={styles.paragraph}&gt;React native dropdown picker&lt;/Text&gt;
      &lt;DropDownPicker
        items={[
          { label: &quot;English&quot;, value: &quot;en&quot; },
          { label: &quot;Deutsch&quot;, value: &quot;de&quot; },
          { label: &quot;French&quot;, value: &quot;fr&quot; },
        ]}
        defaultIndex={0}
        containerStyle={{ height: 40 }}
        onChangeItem={(item) =&gt; console.log(item.label, item.value)}
      /&gt;
    &lt;/View&gt;
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: &quot;center&quot;,
    paddingTop: Constants.statusBarHeight,
    backgroundColor: &quot;#ecf0f1&quot;,
    padding: 8,
  },
  paragraph: {
    margin: 24,
    fontSize: 18,
    fontWeight: &quot;bold&quot;,
    textAlign: &quot;center&quot;,
  },
});
</code></pre>
<h1 id="문제상황">문제상황</h1>
<p>dropdown-pick 에서 사진처럼 값을 선택할 수 가 없음.
<img src="https://images.velog.io/images/yeonseong_lee/post/05d2ae90-faca-4de6-8c50-188ab8f72623/image.png" alt=""></p>
<h1 id="문제해결">문제해결</h1>
<pre><code class="language-javascript">&quot;dependencies&quot;: {
    &quot;react-native-dropdown-picker&quot;: &quot;2.2.1&quot;,
  }
</code></pre>
<p>을 명시해주고 npm install 후 재실행 시키면 해결됨.</p>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/ed018d23-6363-49dd-958f-af00cf182cdb/image.png" alt=""></p>
<h1 id="리뷰">리뷰</h1>
<p> expo는 아직 라이브러리가 안정적이진 않는거 같다. 프로젝트 진행하면서 라이브러리 버전 문제로 고생하고 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[(관형사) + (동물이름) 으로 랜덤 닉네임 만들기]]></title>
            <link>https://velog.io/@yeonseong_lee/%EA%B4%80%ED%98%95%EC%82%AC-%EB%8F%99%EB%AC%BC%EC%9D%B4%EB%A6%84-%EC%9C%BC%EB%A1%9C-%EB%9E%9C%EB%8D%A4-%EB%8B%89%EB%84%A4%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@yeonseong_lee/%EA%B4%80%ED%98%95%EC%82%AC-%EB%8F%99%EB%AC%BC%EC%9D%B4%EB%A6%84-%EC%9C%BC%EB%A1%9C-%EB%9E%9C%EB%8D%A4-%EB%8B%89%EB%84%A4%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Thu, 18 Nov 2021 16:44:56 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">목표</h1>
<p> (관형사) + (동물이름) 랜덤하게 으로 닉네임을 설정해주고 싶다.</p>
<h1 id="환경">환경</h1>
<p> react-native</p>
<h1 id="구현">구현</h1>
<p>아래와 같이 json 형식의 데이터를 만들어 준다.</p>
<pre><code class="language-json">//파일 이름은 NickNameData.json
{
 &quot;determiners&quot; : [
    &quot;예쁜&quot;,
    &quot;화난&quot;,
    &quot;귀여운&quot;,
    &quot;배고픈&quot;,
    &quot;철학적인&quot;,
    &quot;현학적인&quot;,
    &quot;슬픈&quot;,
    &quot;푸른&quot;,
    &quot;비싼&quot;,
    &quot;밝은&quot;
  ],

 &quot;animals&quot; : [
    &quot;호랑이&quot;,
    &quot;비버&quot;,
    &quot;강아지&quot;,
    &quot;부엉이&quot;,
    &quot;여우&quot;,
    &quot;치타&quot;,
    &quot;문어&quot;,
    &quot;고양이&quot;,
    &quot;미어캣&quot;,
    &quot;다람쥐&quot;
  ]
}
</code></pre>
<pre><code class="language-javascript">import React from &quot;react&quot;;
import { Text, View,} from &quot;react-native&quot;;
import NickNameData from &quot;./NickNameData.json&quot;;

export default function RandomNickName() {
  return (
    &lt;View&gt;
          &lt;Text&gt;
            {NickNameData.determiners[
              Math.floor(Math.random() * NickNameData.determiners.length)
            ] +
              &quot; &quot; +
              NickNameData.animals[
                Math.floor(Math.random() * NickNameData.animals.length)
              ]}
          &lt;/Text&gt;
      &lt;/View&gt;
      );
}</code></pre>
<h1 id="결과">결과</h1>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/bbbde8b1-51f0-428e-a926-6a96f2863650/Screen_Recording_20211119-013130_Expo%20Go_1_1.gif" alt=""></p>
<p>(위 코드에서는 style 속성이 없어서 본 결과와 같이 나오지는 않는다.!)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[투자 피치 정리]]></title>
            <link>https://velog.io/@yeonseong_lee/%ED%88%AC%EC%9E%90-%ED%94%BC%EC%B9%98-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@yeonseong_lee/%ED%88%AC%EC%9E%90-%ED%94%BC%EC%B9%98-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 17 Nov 2021 19:26:46 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>한 줄 요약 : 내 사업이 이렇게 매력적이다! </p>
</blockquote>
<h1 id="설득하기">설득하기</h1>
<p> 투자자가 본 피치를 들으면서 A라고 생각 할 수 있도록 빌드업. 
 사람은 주입된 지식보다 자기가 생각한 지식을 더 가치있게 여김.</p>
<p> 듣고 싶은 말은 하지않고 상대방이 그런 말을 하게 해야 함.</p>
<h1 id="시장-증명">시장 증명</h1>
<p>  글로벌로 갈 수 있어요. 시장은 이렇기 때문이에요. 보다는 
  우리는 이렇게 증명했어요. 라고 말하기 (ex. 대회, 사례)</p>
<h1 id="주관에-대한-답">주관에 대한 답</h1>
<p>   사람들이 그 제품에 왜 돈을 내고 참여해요?, 인기 증명
   -&gt; 
   결과로 증명, (가장 매력적인 사례 제시)</p>
<h1 id="팀의-차별화된-역량">팀의 차별화된 역량</h1>
<p>   다른 팀과 차별화된 역량이 있다면 강조. 뻔한 시장에 대한 이야기하기보단 그 시장에서 잘 할 수 있음을 어필.</p>
<h1 id="사업이-되는-이유에-대해-말-할-것">사업이 되는 이유에 대해 말 할 것.</h1>
<p>   시장과 사업에 대해 확실히 이해 할 것.</p>
<h2 id="사업의-원동력본질이-무엇인가">사업의 원동력(본질)이 무엇인가?</h2>
<p>   문제해결을 하고 싶은 것인가, 봉사를 하고 싶은 것인가. 본질과 사업이 연결이 잘 되어야 함.</p>
<h1 id="and-so-what">and so what?</h1>
<p>   다음 단계를 생각할 것!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[오버라이딩 vs  오버로딩]]></title>
            <link>https://velog.io/@yeonseong_lee/%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9-vs-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9</link>
            <guid>https://velog.io/@yeonseong_lee/%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9-vs-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9</guid>
            <pubDate>Sat, 06 Nov 2021 15:03:36 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/yeonseong_lee/post/6a407aac-3ad1-4b81-a35d-c179c57e44de/image.png" alt=""></p>
<h1 id="오버라이딩-overriding">오버라이딩 overriding</h1>
<p> 상위 클래스의 동일한 메소드를 하위 클래스에서 다시 정의, 부모에게서 가져온 함수를 덮어씌운다고 생각하면 된다.</p>
<h2 id="오버라이딩의-목적">오버라이딩의 목적</h2>
<p> 상위 클래스에서 정의한 메소드를 조금만 수정하거나 완전히 새로운 것으로 쓰고 싶을 때 씀</p>
<h2 id="조건">조건</h2>
<p>   메소드의 반환 값, 메소드 이름, 매개변수가 같아야 함.
   부모의 메소드가 final, private가 붙어있으면 오버라이딩 불가.
   부모의 메소드가 자식의 메소드보다 공개적이어야 함.</p>
<h1 id="오버로딩-oveloding">오버로딩 oveloding</h1>
<p>  클래스 내부에서 인자가 다르지만 이름이 같은 메소드를 정의해주는 것. </p>
<h2 id="오버로딩-목적">오버로딩 목적</h2>
<p>   같은 이름의 메소드를 여러개 정의하고 싶을 때 사용</p>
<h2 id="예시">예시</h2>
<pre><code class="language-java">  public class addFunction{

       public int add(int a, int b){
         return a + b
     }

     public int add(int a, int b, int c){
         return a + b + c
     }


  }</code></pre>
<h2 id="주의사항">주의사항</h2>
<p>  반환값은 다를 수 있다.
  인자는 같을 수 없다.
  정적 메소드는 클래스 내부 변수에 접근 불가
  정적 메소드 내부에서 this, super 불가</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Expo 세팅]]></title>
            <link>https://velog.io/@yeonseong_lee/Expo-%EC%84%B8%ED%8C%85</link>
            <guid>https://velog.io/@yeonseong_lee/Expo-%EC%84%B8%ED%8C%85</guid>
            <pubDate>Thu, 04 Nov 2021 18:03:51 GMT</pubDate>
            <description><![CDATA[<h1 id="시작하며">시작하며</h1>
<p> 개발팀에 새로운 팀원이 합류하여 하나의 프로젝트를 같이 해보며 합을 맞춰보기로 했다. 뭘할까 하다가 기숙사에서 치킨을 시켜먹고 싶지만 혼자 먹기는 많아서 서러웠던 기억이 떠올랐고 그래서 기숙사생들이 같이 배달을 시켜먹을 사람을 구하는 앱을 만들어보기로 했다. 
 (겸사겸사 모바일 프로그래밍도 배울겸)</p>
<h1 id="개발환경">개발환경</h1>
<p> react-native로 개발하기로 했고 백은 아직 결정하지 못했다. <a href="https://expo.dev/">expo</a>라는 멋진 프로젝트를 이용하기로 했다. </p>
<p> +
  Window기준</p>
<h2 id="환경-세팅">환경 세팅</h2>
<pre><code class="language-javascript">npm install --global expo-cli

expo init projectName</code></pre>
<p>npm과 expo 차이 : 
 expo <del>~ 하면 npm ~</del>을 실행시켜주는데 설치되어있는 expo버전에 맞는 버전을 설치해준다.</p>
<p>window에서 CategoryInfo : 보안 오류: (:) [], PSSecurityException 가 발생한다면,</p>
<p>window powershell을 관리자 모드로 실행시킨 뒤에 </p>
<pre><code>Set-ExecutionPolicy -ExecutionPolicy Unrestricted </code></pre><p>을 실행시키고 A를 누르면 된다.</p>
<h3 id="깨알-팁">깨알 팁</h3>
<p> <code>expo init projectName</code> 을 하면 코드가 실행되고 있는 하위폴더로 projectName 이라는 이름의 폴더가 생긴다. 필자는 만들고 싶은 폴더를 visual studio code로 열고 터미널 창에서 <code>expo init projectName</code> 명령어를 실행시킨다. </p>
<h3 id="expo-login">expo login</h3>
<p>  <a href="https://expo.dev/signup">expo 회원가입</a>은 홈페이지에서 하고, 작업환경에서 로그인해준다.</p>
<p>  <code>expo login</code> 을 터미널창에 입력하면 가입한 메일과 비번을 입력하라고 나온다. 입력하라는대로 입력하면 된다. </p>
<h3 id="expo-앱-깔기">expo 앱 깔기</h3>
<p> 안드로이드는 Expo, iOS는 Expo Go를 설치하고 로그인해준다.</p>
<h3 id="실행">실행</h3>
<p>  <code>npm start</code>를 실행시키면 끝!</p>
<p>   QR코드를 찍거나, 자신의 프로젝트를 클릭해서 들어가면 스마트폰사에서 돌아가는 모습을 확인 할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[페이징 처리]]></title>
            <link>https://velog.io/@yeonseong_lee/%ED%8E%98%EC%9D%B4%EC%A7%95-%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@yeonseong_lee/%ED%8E%98%EC%9D%B4%EC%A7%95-%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Mon, 01 Nov 2021 14:55:03 GMT</pubDate>
            <description><![CDATA[<h2 id="문제상황">문제상황</h2>
<hr>
<p>다음처럼 총 게시물의 개수와 페이지인덱스를 알경우 페이징 처리해주는 프로그램을 짜고 싶다.
<img src="https://images.velog.io/images/yeonseong_lee/post/cfb4ae17-6efd-4348-a0ee-b8b13cd3eebe/image.png" alt=""></p>
<h3 id="테스트-코드">테스트 코드</h3>
<pre><code class="language-java">public class PagerTest {
    public static void main(String[] args){

        long totalCount = 139;
        long pageIndex = 12;

        Pager pager = new Pager(totalCount);
        System.out.println(pager.html(pageIndex));
    }
}</code></pre>
<hr>
<p>아래와 같이 구현했다. </p>
<h3 id="구현-코드">구현 코드</h3>
<pre><code class="language-java">public class Pager {
    long totalCount;
    long pageIndex;

    Pager(long count){
        totalCount = count;
    }

    public void setPageIndex(long pageIndex) {
        this.pageIndex = pageIndex;
    }

    public String aTagGenerator(String var){
        return &quot;&lt;a href=&#39;#&#39;&gt;&quot; + var +&quot;&lt;/a&gt; \n&quot;;
    }

    public String aTagGenerator(long var){
        return &quot;&lt;a href=&#39;#&#39;&gt;&quot; + var +&quot;&lt;/a&gt; \n&quot;;
    }

    public String aTagFocusGenerator(long var){
        return &quot;&lt;a href=&#39;#&#39; class = &#39;on&#39;&gt;&quot; + var +&quot;&lt;/a&gt; \n&quot;;
    }

    public int maxPageCalculator(long totalCount){
        return (int) Math.ceil(totalCount/10);
    }

    public String middleATag(){
        String result = &quot;&quot;;

        int initialNumber = (int) Math.floor(pageIndex/10)*10 + 1;

        for(int i = initialNumber; i &lt; initialNumber + 10; i++){ // 10개씩 출력
            if(i == pageIndex){
                result += aTagFocusGenerator(i);

            } else {
                result += aTagGenerator(i);
            }

            if(i &gt; maxPageCalculator(totalCount)){ // 최대 페이지를 넘어가면 멈춤
                break;
            }
        };

        return result;
    }

    public String format(){
        return aTagGenerator(&quot;[처음]&quot;) +
                aTagGenerator(&quot;[이전]&quot;) +
                middleATag() +
                aTagGenerator(&quot;[다음]&quot;) +
                aTagGenerator(&quot;[마지막]&quot;);
    }

    public String html(long index){
       setPageIndex(index);
       return format();
    }
}
</code></pre>
<h2 id="리뷰">리뷰</h2>
<p> aTagGenerator, aTagfocusGenerator 부분에 링크를 매개변수로 받아서 넣어주면 더 좋을 듯 하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[문제 해결 전략]]></title>
            <link>https://velog.io/@yeonseong_lee/%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0-%EC%A0%84%EB%9E%B5</link>
            <guid>https://velog.io/@yeonseong_lee/%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0-%EC%A0%84%EB%9E%B5</guid>
            <pubDate>Thu, 21 Oct 2021 15:56:25 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p><strong>비슷한 문제를 풀어본 적이 있던가?</strong></p>
</li>
<li><p><strong>단순한 방법에서 시작할 수 있을까?</strong></p>
</li>
<li><p><strong>내가 푸는 과정을 수식화할 수 있을까?</strong></p>
</li>
<li><p><strong>문제를 단순화할 수 없을까?</strong></p>
</li>
<li><p><strong>그림으로 그려볼 수 있을까?</strong></p>
</li>
<li><p><strong>수식으로 표현할 수 있을까?</strong></p>
</li>
<li><p><strong>문제를 분해할 수 있을까?</strong></p>
</li>
<li><p><strong>뒤에서부터 생각해서 문제를 풀 수 있을까?</strong></p>
</li>
<li><p><strong>순서를 강제할 수 있을까?</strong></p>
</li>
</ul>
<blockquote>
<p> 프로그래밍 대회에서 배우는 알고리즘 문제해결 전략(구종만) 참고</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[React 구글 로그인 API 승인받기]]></title>
            <link>https://velog.io/@yeonseong_lee/React-%EA%B5%AC%EA%B8%80-%EB%A1%9C%EA%B7%B8%EC%9D%B8-API-%EC%8A%B9%EC%9D%B8%EB%B0%9B%EA%B8%B0</link>
            <guid>https://velog.io/@yeonseong_lee/React-%EA%B5%AC%EA%B8%80-%EB%A1%9C%EA%B7%B8%EC%9D%B8-API-%EC%8A%B9%EC%9D%B8%EB%B0%9B%EA%B8%B0</guid>
            <pubDate>Thu, 21 Oct 2021 09:06:57 GMT</pubDate>
            <description><![CDATA[<h1 id="oauth에-대해서">OAuth에 대해서</h1>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/b6239955-f410-42a8-804f-4906a6b72a9e/image.png" alt="벨로그 로그인화면"></p>
<p> 벨로그 로그인 화면이다. 깃허브, 구글, 페이스북 아이디로 로그인 할 수 있게 되있다. 이런걸 OAuth인증이라고 한다. </p>
<p> OAuth인증을 통해서 사용자가 새로 가입을 안해도 된다는 장점과 아이디와 비번을 사이트에서 저장 안해도 된다는 보안상의 이점이 있다. (대부분의 사용자가 사이트마다 아이디와 비번이 유사하다.)</p>
<blockquote>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/17fdd3f8-7284-4ef8-9269-356dcb695010/image.png" alt=""><a href="https://opentutorials.org/course/2473/16571">생활코딩, OAuth설명</a></p>
</blockquote>
<h1 id="사이트에서-oauth적용하기">사이트에서 OAuth적용하기</h1>
<p> 상기한 것과 같은 이점이 있는 소설 로그인을 개발중인 사이트에 적용하고 싶다.</p>
<h2 id="구글-clientid-발급받기">구글 clientId 발급받기</h2>
<p> <a href="https://console.cloud.google.com/apis/dashboard?hl=ko">구글 클라우드 플랫폼</a></p>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/08864528-cf27-46ee-bb45-cea19c69e998/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/39e1ee67-a573-4839-b2ff-5b773b13db00/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/cc862138-a80c-4ee7-af41-577673bb173c/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/4a37bb7d-6ce5-4d87-b586-3f120202099d/image.png" alt=""></p>
<p> 개발환경에서는 URI에 <a href="http://localhost:3000">http://localhost:3000</a> 을 입력하면 된다.</p>
<p> 만들기를 누르면 Client ID가 발급된다. 밑에 코드에서 client ID를 붙여넣으면 된다.</p>
<h2 id="코드">코드</h2>
<p> &#39;<a href="https://www.npmjs.com/package/react-google-login">react-google-login</a>&#39;이라는 라이브러리를 이용하겠다. 다음과 같이 작성하면 된다. 
 (물론 당연히 npm install react-google-login 을 통해 라이브러리를 먼저 설치해줘야 한다.) </p>
<pre><code class="language-javascript">import React from &#39;react&#39;;
import { GoogleLogin } from &#39;react-google-login&#39;;


function LoginGoogle(props) {

  const clientId =
    &quot;Your client ID&quot;;

  async function onSuccess(res) {
    const profile = res.getBasicProfile();
    const userdata = {
      email: profile.getEmail(),
      image: profile.getImageUrl(),
      name: profile.getName(),
    }; 
    // 로그인 성공 후 실행하기 원하는 코드 작성.

  }

  const onFailure = (res) =&gt; {
    alert(&quot;구글 로그인에 실패하였습니다&quot;);
    console.log(&quot;err&quot;, res);
  };

  return (
      &lt;GoogleLogin
        className=&quot;google-button&quot;
        clientId={clientId}
        buttonText=&quot;Login with Google&quot; // 버튼에 뜨는 텍스트
        onSuccess={onSuccess}
        onFailure={onFailure}
        cookiePolicy={&quot;single_host_origin&quot;}
      /&gt;
    &lt;/div&gt;
  );
}

export default withRouter(LoginGoogle);
</code></pre>
<h2 id="-구글-로그인시-유튜브-채널-아이디-받아오기">+ 구글 로그인시 유튜브 채널 아이디 받아오기</h2>
<pre><code class="language-javascript">import React from &#39;react&#39;;
import { GoogleLogin } from &#39;react-google-login&#39;;


function LoginGoogle(props) {

  const clientId =
    &quot;Your client ID&quot;;

  const SCOPE = &quot;https://www.googleapis.com/auth/youtube.readonly&quot;;

  async function onSuccess(res) {
    const profile = res.getBasicProfile();
    const userdata = {
      email: profile.getEmail(),
      image: profile.getImageUrl(),
      name: profile.getName(),
      channelId: channelId,
    }; 
    // 로그인 성공 후 실행하기 원하는 코드 작성.

  }

  const onFailure = (res) =&gt; {
    alert(&quot;구글 로그인에 실패하였습니다&quot;);
    console.log(&quot;err&quot;, res);
  };

  return (
      &lt;GoogleLogin
        className=&quot;google-button&quot;
        clientId={clientId}
        buttonText=&quot;Login with Google&quot; // 버튼에 뜨는 텍스트
        onSuccess={onSuccess}
        onFailure={onFailure}
        cookiePolicy={&quot;single_host_origin&quot;}
     scope={SCOPE}
      /&gt;
    &lt;/div&gt;
  );
}

export default withRouter(LoginGoogle);
</code></pre>
<p> 위와 같이 SCOPE에 유튜브 채널에 읽기권한을 추가해주면 된다.</p>
<blockquote>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/ff49cf8c-9bac-4994-ac3e-3f8d820e2ea0/image.png" alt="">
<a href="https://developers.google.com/youtube/reporting/guides/authorization?hl=ko">유튜브 API 설명</a></p>
</blockquote>
<h1 id="구글-로그인-api-승인받기">구글 로그인 API 승인받기</h1>
<p> 처음에 client ID를 만들면 허용된 사용자만 구글 로그인을 사용할 수 있다. 모든 구글 유저가 로그인 할 수 있게 하려면 프로덕션 단계로 올려야한다. </p>
<p> 프로덕션 모드로 승인받기 위해 지켜야 할 것들을 정리해둔다. </p>
<blockquote>
<p> <img src="https://images.velog.io/images/yeonseong_lee/post/a98b6b2e-1477-48e1-a256-5237c47d3f15/image.png" alt=""> 
본인처럼 구글과 6번씩 메일을 주고 받지 말라고 쓰는 글..ㅋㅋㅋ</p>
</blockquote>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/1ae9e59a-a541-4ec4-a7c3-922849601f52/image.png" alt=""></p>
<p>URI는 사이트 주소 하나만 쓸 것. 
 -개발환경인 <a href="http://localhost:3000">http://localhost:3000</a> 를 그대로 쓴채로 제출하고 승인거절을 받았다..</p>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/94435b4b-2617-411e-aca8-1db9d26127b2/image.png" alt="">
 앱 로고를 사이트와 일관성있게 첨부할 것.
  -아이콘에 사이트 아이콘이 아닌 회사 로고를 첨부했다가 거절받았다.</p>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/572db5d1-2302-4b7b-b2e5-ca9595fa9ef6/image.png" alt=""></p>
<p> 개인정보처리방침과 서비스 약관을 같은 도메인상에서 접속할 수 있게 할 것.</p>
<ul>
<li>노션을 이용해서 개인정보처리방침과 서비스 약관을 작성했다가 승인 거절 받았다.</li>
</ul>
<p><a href="https://search.google.com">구글 서치 콘솔</a>에서 도메인 소유권을 확인 할 것.</p>
<p><a href="https://www.moinnet.com/ko/digital-marketing/google-search-console-add-property/">도메인 등록법</a></p>
<blockquote>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/7d7540d5-7b9a-46d7-8052-54d1b6360b44/image.png" alt="">
하라는 대로 열심히 하면 이런 승인메일을 보내준다.</p>
</blockquote>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/d3796faf-15cd-4e2f-aa59-56c7f375e685/image.png" alt=""></p>
<h1 id="참고하면-좋은-글">참고하면 좋은 글</h1>
<p><a href="https://d2.naver.com/helloworld/24942">OAuth</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Complex Analysis] 복소수 대수,기하적 성질]]></title>
            <link>https://velog.io/@yeonseong_lee/Complex-Analysis-%EB%B3%B5%EC%86%8C%EC%88%98-%EB%8C%80%EC%88%98%EA%B8%B0%ED%95%98%EC%A0%81-%EC%84%B1%EC%A7%88</link>
            <guid>https://velog.io/@yeonseong_lee/Complex-Analysis-%EB%B3%B5%EC%86%8C%EC%88%98-%EB%8C%80%EC%88%98%EA%B8%B0%ED%95%98%EC%A0%81-%EC%84%B1%EC%A7%88</guid>
            <pubDate>Sun, 17 Oct 2021 18:14:09 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/yeonseong_lee/post/4ef9bcb3-48cb-404d-be6b-0f6dd436651d/image.png" alt=""></p>
<h1 id="complex-field">Complex field</h1>
<p>$x^2 + 1 = 0$ 의 해는 실수영역에서 찾을 수 없다. 그래서 우리는 이 해를 $$i= \sqrt{-1}$$ imaginary unit이라고 부르기로 했어요. 그게 수학적 약속이여가지고..</p>
<p> $$z = a + ib, (a,b \in R  )$$ 이런식으로 나타내고 복소수(complex number)라고 한다.</p>
<p>$a$는 실수영역을 나타내고 $b$는 허수영역을 나타낸다.</p>
<h1 id="rectangular-representation">Rectangular representation</h1>
<p>$
z= x + yi
$</p>
<p> complex plane에서 실수축과 허수축을 나타낼 수 있다.</p>
<p> $x = Re \space z$, $y = Im \space z$ 이고, 실수영역과 허수영역이라고 부른다.</p>
<p> $\overline{z} =x =yi$ $z$의 켤레복소수(conjugate)라고 한다.</p>
<p> $|z|= \sqrt{x^2 + y^2}$ 이라고 정의한다.</p>
<h2 id="기억할만한-성질">기억할만한 성질</h2>
<p> $a,b$가 0이 아닐때,</p>
<p> $$
 z^{-1} = \frac{1}{z} = \frac{\overline{z}}{z\overline{z}} = \frac{\overline{z}}{|z|^2} = \frac{a-ib}{a^2+b^2}
 $$</p>
<h1 id="polar-representation">Polar representation</h1>
<p>  $a,b$가 0이 아닐때, 다음과 같이 나타낼 수 도 있다.</p>
<p> $$
 z = r(\cos{\theta} + i\sin{\theta})
 $$</p>
<p> $arg \space z = {all \space arguments \space of \space z}$</p>
<h2 id="기억할만한-성질-1">기억할만한 성질</h2>
<p>$z_k = r_k(\cos{\theta_k} + i\sin{\theta_k})$ for $k = 1,2, ... ,n$, then</p>
<p>$$
z_1z_2...z_n = r_1r_2...r_n[\cos{(\theta_1 + \theta_2 + ... + \theta_n)} + i\sin{(\theta_1 + \theta_2 + ... + \theta_n)}]
$$</p>
<p><a href="https://en.wikipedia.org/wiki/De_Moivre%27s_formula">DeMoivre&#39;s Theorem</a></p>
<p>$$
 (\cos{\theta} + i\sin{\theta})^n = \cos{n\theta} + i\sin{n\theta}
$$</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[벨로그 썸네일 수정법]]></title>
            <link>https://velog.io/@yeonseong_lee/Velog-%EC%8D%B8%EB%84%A4%EC%9D%BC-%EC%88%98%EC%A0%95%EB%B2%95</link>
            <guid>https://velog.io/@yeonseong_lee/Velog-%EC%8D%B8%EB%84%A4%EC%9D%BC-%EC%88%98%EC%A0%95%EB%B2%95</guid>
            <pubDate>Sun, 17 Oct 2021 14:33:39 GMT</pubDate>
            <description><![CDATA[<p>제목밑에 보이는 수정버튼을 누른다.</p>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/d93a98ab-a360-4bf4-b3c6-eb3e7436e697/image.png" alt="">
수정하기를 누른다.</p>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/86ea1674-b090-4eca-867d-cbdac6eb54e0/image.png" alt="">
재업로드를 눌러서 원하는 파일로 썸네일을 설정한다.</p>
<p>끝!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JAVA HTML 파일 만들기]]></title>
            <link>https://velog.io/@yeonseong_lee/JAVA-HTML-%ED%8C%8C%EC%9D%BC-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@yeonseong_lee/JAVA-HTML-%ED%8C%8C%EC%9D%BC-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Sun, 17 Oct 2021 14:08:24 GMT</pubDate>
            <description><![CDATA[<h2 id="자바로-html-파일-만들기">자바로 HTML 파일 만들기</h2>
<h3 id="코드">코드</h3>
<pre><code class="language-java">import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class html_generator {
    public static void main(String[] args){
        try{
            File file = new File(&quot;index.html&quot;);
            BufferedWriter writer = new BufferedWriter(new FileWriter(file));
            writer.write(&quot;&lt;h2&gt;html의 제목&lt;/h2&gt;&quot;);
            writer.write(&quot;&lt;div&gt; 추가하고 싶은 내용들 ~~ &lt;/div&gt;&quot;);
            //변수추가하기

            String a = &quot;추가할 변수&quot;;

            writer.write(&quot;~~~&quot; + a + &quot;~~~&quot;);

            writer.close();

        } catch(IOException e){
            e.printStackTrace();
        }




    }

}</code></pre>
<h3 id="결과">결과</h3>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/a09c8894-379e-41be-a339-b5019fc963c9/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/yeonseong_lee/post/da0a87e4-3c63-4ccd-8d22-5ce97516ab60/image.png" alt=""></p>
<p>개발자도구(F12)를 이용하여 살펴보면 우리가 write한 내용들이 잘 들어가 있음을 확인 할 수 있다.</p>
<h2 id="참고하면-좋은-글">참고하면 좋은 글</h2>
<p><a href="https://jhnyang.tistory.com/92">버퍼를 이용한 입출력</a> </p>
]]></description>
        </item>
    </channel>
</rss>