<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>yumi-jun.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Mon, 05 Aug 2024 04:17:52 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>yumi-jun.log</title>
            <url>https://velog.velcdn.com/images/yumi-jun/profile/02ced986-1ff2-4f16-b28d-f0aadb159201/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. yumi-jun.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/yumi-jun" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[파이썬 문법_준비단계]]></title>
            <link>https://velog.io/@yumi-jun/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%AC%B8%EB%B2%95%EC%A4%80%EB%B9%84%EB%8B%A8%EA%B3%84</link>
            <guid>https://velog.io/@yumi-jun/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%AC%B8%EB%B2%95%EC%A4%80%EB%B9%84%EB%8B%A8%EA%B3%84</guid>
            <pubDate>Mon, 05 Aug 2024 04:17:52 GMT</pubDate>
            <description><![CDATA[<h2 id="리스트-컴프리헨션">리스트 컴프리헨션</h2>
<p>리스트를 쉽게 다룰수 있는 방법</p>
<pre><code>array =[i for i in range(10)]</code></pre><p>array 리스트에 0~9까지의 값이 들어간다.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</p>
<pre><code>array = [i*i for i in range(1,10)]
print(array)</code></pre><p>[1, 4, 9, 16, 25, 36, 49, 64, 81]</p>
<pre><code>array=[[0]*3 for _ in range(4)]
print(array)</code></pre><p>4개의 행과 3개의 열 의 2차원 배열을 만들고 싶다!</p>
<p>[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]  </p>
<h2 id="입출력">입출력</h2>
<pre><code>import sys
input=sys.stdin.readline()

# 공백이 있는 경우

graph=[list(map(int,input.split())) for _ in range(2)]

#print(graph)

# 공백이 없는 경우
graph=[list(map(int,input.rstrip())) for _ in range(2)]
print(graph)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[자기지도화 지도]]></title>
            <link>https://velog.io/@yumi-jun/%EC%9E%90%EA%B8%B0%EC%A7%80%EB%8F%84%ED%99%94-%EC%A7%80%EB%8F%84</link>
            <guid>https://velog.io/@yumi-jun/%EC%9E%90%EA%B8%B0%EC%A7%80%EB%8F%84%ED%99%94-%EC%A7%80%EB%8F%84</guid>
            <pubDate>Tue, 16 Jul 2024 00:32:29 GMT</pubDate>
            <description><![CDATA[<h2 id="som">SOM</h2>
<p>저차원 격자에 고차원 데이터의 각 개체들이 대응하도록 군집을 도출해내는 기법.</p>
<p>차원 축소와 군집화 동시 수행 기법</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/9d24e560-3c0b-4e43-ab60-56cb2161bddd/image.png" alt=""></p>
<h3 id="과정">과정</h3>
<ol>
<li>3차원의 입력으로 부터 격자 안의 벡터의 초기값을 랜덤으로 설정</li>
<li>새로운 입력 벡터를 제시한다.</li>
<li>입력 데이터와 벡터 값의 BMU : best Matching 거리 값을 찾는다.</li>
<li>격자 벡터를 업데이트한다.</li>
</ol>
<p>2번부터 4번을 반복한 후, 여러개의 BMU 가 생긴다.</p>
<ol>
<li>BMU들 을 중심으로 원 안의 노드들을 Update 한다 (중심점에 가까울수록 가중치가 높아짐..)</li>
<li>원 의 크기를 점진적 축소</li>
</ol>
<p>5번을 반복</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/98b8fbf1-58c8-44ca-9b47-8c38805871ba/image.png" alt=""></p>
<h3 id="som-의-핵심-내용">SOM 의 핵심 내용</h3>
<ol>
<li>SOM 은 입력 세트의 토폴로지를 유지한다.</li>
</ol>
<p>입력 데이터의 고차원 데이터의 구조적 특성을 그래도 유지하면서 2차원으로 표현</p>
<ol>
<li>SOM 은 찾기 힘든 연관성을 찾아낼 수 있다.</li>
<li>SOM 은 자율적으로 Data 를 찾을 수 있다.</li>
<li>역전파가 없다.</li>
</ol>
<h3 id="응용-예시">응용 예시</h3>
<ul>
<li><p>SOM 을 활용한 의료 영상 분석</p>
<p>  입력 데이터를 저차원 맵에 배치하여 유사한 데이터를 가까운 위치에 배치하여, 정상 패턴과 비정상 패턴을 시각적으로 구분할 수 있다.</p>
</li>
</ul>
<h3 id="som을-활용한-의료-영상-분석">SOM을 활용한 의료 영상 분석</h3>
<ul>
<li><strong>논문 제목</strong>: Identifying Regions of Interest in Medical Images Using Self-Organizing Maps</li>
<li><strong>저자</strong>: Wei-Guang Teng, Ping-Lin Chang</li>
<li><strong>출처</strong>: Journal of Medical Systems, 2012</li>
<li><strong>요약</strong>: 이 논문은 SOM을 사용하여 의료 이미지에서 관심 영역을 식별하는 방법을 제안합니다. SOM은 이미지의 각 픽셀이나 섹션의 특징 벡터를 학습하고, 이를 통해 중요한 영역을 자동으로 찾아냅니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[ANN]]></title>
            <link>https://velog.io/@yumi-jun/ANN</link>
            <guid>https://velog.io/@yumi-jun/ANN</guid>
            <pubDate>Tue, 02 Jul 2024 09:40:32 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/yumi-jun/post/e3c14709-dd95-4270-9817-2dc1f1a41f63/image.png" alt=""></p>
<ol>
<li>입력 레이어들의 값을 &quot;은닉층&quot;에서 활성화 함수에 넣어 얻은 출력값</li>
<li>출력값과 실제값을 비교하고 실제 값과 비슷하게 하기 위한, 비용함수를 사용</li>
<li>비용함수에서 얻은 최적의 출력값을 이용해 &#39;역전화&#39; 계산을 사용하셔 가중치 값들을 다시 계산하여, 출력값과 실제값을 비슷하게 맞추는 과정</li>
<li>맞추면서 만들어진 머신러닝 모델 !!</li>
</ol>
<blockquote>
<p>Artificial Neural Network 를 만들어보자!</p>
</blockquote>
<h4 id="기본적인-setting">기본적인 setting</h4>
<pre><code class="language-python">import numpy as np
import pandas as pd
import tensorflow as tf</code></pre>
<h2 id="데이터-전처리-과정">데이터 전처리 과정</h2>
<p>데이터 전처리 과정은, 주어지는 데이터들이 내가 원하는 형식으로 주어지지 않기 때문에 , 내 맞춤형으로 바꿔줘야 한다.
이부분은 pandas 를 공부하면서 더 알아가봐야 할 것 같다.</p>
<pre><code class="language-python">dataset = pd.read_csv(&#39;Churn_Modelling.csv&#39;)
# 이름과 번호를 제외한 데이터
X = dataset.iloc[:, 3:-1].values
#이탈률
y = dataset.iloc[:, -1].values</code></pre>
<p>X 에는, csv 파일에 4번째 행부터 마지막 전까지 값을 가져오고
y 에는, 은행 이탈률 값을 저장해놓았다.</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/cd47d102-4bb2-42a6-9312-30b46ec981e0/image.png" alt="">
<img src="https://velog.velcdn.com/images/yumi-jun/post/967e2a40-d4bb-461d-8c53-4a572daaaf92/image.png" alt=""></p>
<h4 id="가져온-데이터를-이제-변환해보자"><strong>가져온 데이터를 이제 변환해보자!</strong></h4>
<p>성별, 사는 지역 과 같은 데이터는 데이터 모델링에 필요한 데이터의 특성이다.
하지만 문자열 데이터 로 되어있기 때문에 우리가 , 쉽게 데이터 분석에 가져오기가 힘들어진다.</p>
<p>어떻게 하면 될까?</p>
<p>범주형 데이터 (성별, 사는 지역) 데이터를 원-핫 코딩을 해서 데이터 형식을 바꿔보자</p>
<p>먼저 , 성별 데이터
<img src="https://velog.velcdn.com/images/yumi-jun/post/15aa2435-0a2a-415d-9bb8-f07a76843a67/image.png" alt="">
남자와 여자를 0,1 로 라벨 데이터로 변환</p>
<p>그 다음으로, 나라 데이터
<img src="https://velog.velcdn.com/images/yumi-jun/post/a31490ea-c584-4028-9861-42ef0b92ba56/image.png" alt="">
나라 데이터 같은 경우는, 0,1 로 나타내기 어려우니
001 , 101, 111 이진 벡터로 표현하면 된다.</p>
<h3 id="데이터-전처리-과정-중-필요한-단계-1">데이터 전처리 과정 중, 필요한 단계 1</h3>
<p>우리는 출력값과 실제값이 비슷한지 확인해야 한다!
그러기 위해 학습 데이터와 , 테스트해볼 데이터가 필요하다.</p>
<pre><code class="language-python"># 데이터를 무작위로 학습 세트와 테스트 세트로 나눈다.
from sklearn.model_selection import train_test_split
# 학습 데이터는 80, 훈련 데이터는 20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)</code></pre>
<p>데이터를 무작위로 학습세트와 , 테스트 세트로 나눈후,
학습 데이터는 80 %, 훈련 데이터는 20%로 나눈다. 이건 test_size 매개변수를 이용할 것</p>
<h3 id="데이터-전처리-과정-중--필요한-단계-2">데이터 전처리 과정 중 , 필요한 단계 2</h3>
<p>데이터들을 정규화 하여야 한다.
위의 언급한 단계 중, 비용함수를 통해 최적의 y 값을 찾아낼 때, 우리는 경사하강법의 함수를 이용하게 된다.
데이터들을 정규화 해야, 경사하강법의 input 값이 취우쳐지지 않아, 옳바른 결과값을 출력가능한데, 정규화 하지 않으면, 값이 취우쳐지지는 불상사가 생기게 된다.</p>
<p>그러기에 우리는 머신러닝 모델을 만들기전에 
데이터를 &quot;정규화&quot; 하는 과정이 필요로 하게 된다.</p>
<pre><code class="language-python"># 데이터픞 표준화하는 과정
# 데이터의 평균을 0, 표준편차를 1로 
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
# 데이터의 평균과 표준편차를 계산, 학습용데이터에 대해 사용
X_train = sc.fit_transform(X_train)
print(X_train)
# 이미 계산된 평균과 표준편차를 사용해 데이터를 변환
# 테스트 데이터에 대해 사용한다.
X_test = sc.transform(X_test)
print(X_test)</code></pre>
<h2 id="인공-신경망을-만들어보자---구조-정의-단계">인공 신경망을 만들어보자 - 구조 정의 단계</h2>
<pre><code class="language-python">ann = tf.keras.models.Sequential()

# ann.add : 텐서 플로우를 사용하여, 인공 신경망의 레이어를 추가하는 것 
# tf.keras.layers.Dense 밀집 레이어를 의미, 레이어의 뉴런 노드 수, 활성화 함수 relu : ReLu 활성화 함수
# 입력이 0보다 작으면, 0출력, 0보다 크면 입력 값을 그대로 출력
ann.add(tf.keras.layers.Dense(units=9, activation=&#39;relu&#39;))
ann.add(tf.keras.layers.Dense(units=9, activation=&#39;relu&#39;))

# 마지막 출력층 값 -&gt;출력증 값이 이진 변수로 1로 변경
# 만약 출력층 값이, abc 와 같이 이진 변수가 아닐 경우에는 1 이 아닌 3 으로 ,, 
ann.add(tf.keras.layers.Dense(units=1, activation=&#39;sigmoid&#39;))
</code></pre>
<pre><code class="language-python"># 모델이 학습할 때 , 가중치를 조정하는 방법 optimizer , adam 은 최적화 알고리즘 : 학습을 더 빠르고 효율적으로
# loss: 모델이 예측한 값과 실제 값의 차이를 계산, binary_crossentropy : 이진 분류 문제에 적합한 손실 함
ann.compile(optimizer = &#39;adam&#39;, loss = &#39;binary_crossentropy&#39;, metrics = [&#39;accuracy&#39;])</code></pre>
<pre><code class="language-python"># 학습할 입력데이터, 학습용 정답 레이블, 모델이 한 번에 학습할 데이터의 샘플 수 :32 , 32개의 샘플을 한번에 처리
# 에포크 수 : 전체 데이터 셋에 대해 학습을 반복하는 횟
ann.fit(X_train ,y_train, batch_size = 32, epochs = 150)</code></pre>
<pre><code class="language-python"># 예측 메소드의 입력값은 2d 배열이여야 한다.
# sc.transform : 정규화하는 과정 
# 마지막 ann 을 만들때의 함수가 시그노이드 함수 -&gt; 확률 로 값을 출력해
# 0.5 확률보다 아래니까 떠날 확률은 낮다!!!
print(ann.predict(sc.transform([[1, 0, 0, 600, 1, 40, 3, 60000, 2, 1, 1, 50000]])))
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터 분석]]></title>
            <link>https://velog.io/@yumi-jun/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@yumi-jun/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Tue, 18 Jun 2024 10:03:09 GMT</pubDate>
            <description><![CDATA[<h2 id="데이터-분석의-길을-찾아">데이터 분석의 길을 찾아..</h2>
<blockquote>
<p>👆특정 범위의 데이터값을 가져오는 함수
✌ stack() 함수 다시 정리해 </p>
</blockquote>
<p>내가 받을 데이터는 
<img src="https://velog.velcdn.com/images/yumi-jun/post/adf65a14-354a-403b-bbff-737005ccf127/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/5952944c-de6c-4d36-97be-728106564779/image.png" alt=""></p>
<p>컬럼명이 중복되거나, 날짜가 컬럼으로 들어가는 등의 오류가 있다!</p>
<blockquote>
<p>데이터 전처리 순서는 크게</p>
<ol>
<li>Column 을 다시 재 정의 하자 !</li>
<li>Column 값에 지정된 날짜 데이터를 재배치하자!</li>
</ol>
</blockquote>
<hr>
<h4 id="1--column-명을-재정의">1.  Column 명을 재정의</h4>
<pre><code class="language-python">pd.read_excel(&#39;Data05.xlsx&#39;,skiprows=1)</code></pre>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/61fc0560-b154-47d2-ab06-b4af18c3d49b/image.png" alt="">첫번째행을 skip 하여 다음 행이 첫번째 행으로 지정
<img src="https://velog.velcdn.com/images/yumi-jun/post/c0df2967-9f27-44d1-a0aa-c21602aa77b8/image.png" alt=""></p>
<h4 id="-여기서-특정-행-의-데이터를-가져오고-싶을-땐">* 여기서 특정 행 의 데이터를 가져오고 싶을 땐?</h4>
<pre><code class="language-python">df1.iloc[:]</code></pre>
<p>[ : ] <strong>range 값</strong>을 지정해주는 것이다.</p>
<p>iloc[5:10]
5부터 9 까지의 행의 데이터를 가져온다.
<img src="https://velog.velcdn.com/images/yumi-jun/post/ee8e206f-56cc-40f9-811f-26aef645cf51/image.png" alt=""></p>
<p>iloc[행:행 , 열:열 ]
행의 데이터를 지정한 후의 index 값을 지정하면, 특정 열에 해당하는 데이터 만 가져오게 된다.
<img src="https://velog.velcdn.com/images/yumi-jun/post/3934bddf-664a-4df7-96df-a060a0d9c9d8/image.png" alt=""></p>
<hr>
<h4 id="2-👌이젠-날짜-데이터를-재배치-할-것이다">2. 👌이젠, 날짜 데이터를 재배치 할 것이다.</h4>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/c0df2967-9f27-44d1-a0aa-c21602aa77b8/image.png" alt="">
보기와 같이, 판매 값 부터 날짜 데이터가 있는 것을 볼 수 있다.</p>
<pre><code class="language-python">df1.iloc[:20,8:-2]</code></pre>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/35ea33d0-4964-4401-9320-d87a7cdd6e24/image.png" alt="">
판매 데이터 값에서 날짜 데이터 추출까지!</p>
<pre><code class="language-python">df1.iloc[:20,8:-2].T</code></pre>
<h4 id="traspose">Traspose</h4>
<p>T를 이용해 Transpose  를 해주었다. 행과 열을 바꾸는 역할이다.
그러나, 날짜 데이터가 행 Column 에 들어갔을 뿐, 이것을 우리가 원하는 형식의 데이터가 아니다!
<img src="https://velog.velcdn.com/images/yumi-jun/post/44fb3045-ec1d-4b9e-9718-e80041ebdd81/image.png" alt=""></p>
<h4 id="stack-함수">Stack 함수</h4>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/4772eb90-eb94-43db-b650-5c704469d89d/image.png" alt="">
data 를 Column 형태로 쌓아 올렸다... 어떤 형식인걸까?
<img src="https://velog.velcdn.com/images/yumi-jun/post/bd1596d9-b0ba-400c-ad80-5bac7941fe9e/image.png" alt="">
행이 총 20개로 한 행에 데이터가 여러개 쌓인 모습을 볼 수 있다.
우리는 이것을 Stack() 함수를 이용해 Column 형태로 쌓아 올렸다 고 표현한다.</p>
<blockquote>
<p>Stack( ) 함수</p>
</blockquote>
<pre><code class="language-python">pd.DataFrame(df2.stack()).reset_index()</code></pre>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/b0743285-1a3d-4959-8ac1-cc7f6ef5b8f2/image.png" alt="">
필요없는 컬럼명을 drop 하고 SetIndex 를 제품명으로 한 결과. 
<img src="https://velog.velcdn.com/images/yumi-jun/post/2fba9bb2-e991-4340-b786-8f74d11267c4/image.png" alt="">
<img src="https://velog.velcdn.com/images/yumi-jun/post/9e6aa51d-6c3f-4758-a457-9531c88c93db/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[언리얼 새싹 시작기]]></title>
            <link>https://velog.io/@yumi-jun/%EC%96%B8%EB%A6%AC%EC%96%BC-%EC%83%88%EC%8B%B9-%EC%8B%9C%EC%9E%91%EA%B8%B0</link>
            <guid>https://velog.io/@yumi-jun/%EC%96%B8%EB%A6%AC%EC%96%BC-%EC%83%88%EC%8B%B9-%EC%8B%9C%EC%9E%91%EA%B8%B0</guid>
            <pubDate>Wed, 01 May 2024 11:01:42 GMT</pubDate>
            <description><![CDATA[<h2 id="언리얼-npc-제작을-해보자">언리얼 NPC 제작을 해보자</h2>
<h3 id="기본적인-ai-캐릭터-설정">기본적인 AI 캐릭터 설정</h3>
<ul>
<li>기본 셋팅 : 3D 인칭 플랫폼
<img src="https://velog.velcdn.com/images/yumi-jun/post/f3454561-ce42-4b1f-821a-d2c129c94794/image.png" alt=""></li>
</ul>
<ol>
<li>Character 블루프린트와 , ai controller 블루프린트를 생성</li>
</ol>
<p>그리고 나선,
생성한 ai 아바타의 animation 설정하는 것이 <strong>중요</strong>하다!</p>
<p>ai 아바타를 ABP_Manny 로 해주었는데,
AMP_Manny 아바타의 블루프린트에 들어가보면, </p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/e1f52482-8c2c-4570-b7b0-e788e5426dfc/image.png" alt="">
이런 복잡한 설정을 볼 수 있을 것이다.
<img src="https://velog.velcdn.com/images/yumi-jun/post/113c4f55-075f-4e38-9950-6212564a12c3/image.png" alt=""></p>
<p>거기서 Should Move 칸에서, 
&quot;Try Get Pawn Owner&quot; 노드, &quot;Is Player Controlled&quot; 노드, &quot;Select&quot; 노드를 설정해주자!</p>
<p>이것은 spawn 된 아바타에 설정된 애니메이터를 가져와, 애니메이터를 실행해주는 역할을 한다.</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/08a79bd5-5fad-4b2c-8be6-b7d77891f6d6/image.png" alt=""></p>
<ol start="2">
<li>BP_NPC 창에 들어가, AI Controller Class 를 살펴보자</li>
</ol>
<ul>
<li>AIController 은 기본적인 언리얼이 제공하는 ai로, 맞춤형 npc 로 바꿔주야한다. 미리 만들어둔 AI_NPC 를 집어넣는다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/9cc873ba-5431-457b-9664-8878fe7d5fad/image.png" alt=""></p>
<ol start="3">
<li>NavMeshBoundsVolume 을 map 에 맞게 설정한다.
&quot;p&quot; 누르면 생기는 초록색 국경선들은 ai 가 돌아다닐 수 있는 구역을 말한다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/050bb767-70fe-4754-9769-53f260f9c315/image.png" alt="">
4. BP_Npc 에서 ai move to 를 설정해주고, Target Actor 에 &quot;나&quot;( player index 가 0) 을 따라다니게 한다.</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/a3eecf01-26e8-4c69-85fd-62d217cbd444/image.png" alt="">
<img src="https://velog.velcdn.com/images/yumi-jun/post/978e7146-e9df-4d70-a21d-26fb1e1b6081/image.png" alt=""></p>
<p>이곳에서 ai 아바타의 기본적인 속도 등등을 조절한다.</p>
<hr>
<p>언리얼은 생각보다 기능이 정말 다양하고 구성해야 할 것이 많은 플랫폼이다... </p>
<p>노드의 기능이 정확히 어떤 기능을 하고, 어떤 영향을 주는지 잘 파악해야 할 거 같다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[react 클론]]></title>
            <link>https://velog.io/@yumi-jun/react-%ED%81%B4%EB%A1%A0</link>
            <guid>https://velog.io/@yumi-jun/react-%ED%81%B4%EB%A1%A0</guid>
            <pubDate>Thu, 22 Sep 2022 11:21:40 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-typescript">import React from &quot;react&quot;;
import storeItems from &quot;../data/items.json&quot;
import {Col,Row} from &quot;react-bootstrap&quot;
export function Store(){

    return (
        &lt;&gt;
        &lt;h1&gt;Store&lt;/h1&gt;
        &lt;Row md={2} cs={1} lg={3} className=&quot;g-3&quot;&gt;
            {storeItems.map(item =&gt;(
                &lt;Col&gt;
                {JSON.stringify(item)}
                &lt;/Col&gt;
            ))}

        &lt;/Row&gt;
        &lt;/&gt;
    )
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[도시는 무엇으로 사는가]]></title>
            <link>https://velog.io/@yumi-jun/%EB%8F%84%EC%8B%9C%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9C%BC%EB%A1%9C-%EC%82%AC%EB%8A%94%EA%B0%80</link>
            <guid>https://velog.io/@yumi-jun/%EB%8F%84%EC%8B%9C%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9C%BC%EB%A1%9C-%EC%82%AC%EB%8A%94%EA%B0%80</guid>
            <pubDate>Sat, 17 Sep 2022 06:20:41 GMT</pubDate>
            <description><![CDATA[<p>건출물과 도시를 바라보는 자신만의 시각을 가졌으면 하는 바람으로 </p>
<h3 id="우리가-걷고-싶은-거리">우리가 걷고 싶은 거리</h3>
<h4 id="1-이벤트-밀도">1. 이벤트 밀도</h4>
<p>높은 이벤트 밀도의 거리는 보행자에게 권력을 이양한다. 거리는 걷는다는 것은 보행자 입장에서 그의 세상을 구성한다는 것이다.
우리는 매일 눈을 뜨고, 일어나고, 먹고, 걷고, 이야기하고, 일하고, 쉬면서 자신의 삶을 만들어 나간다. 매순간 결정하는 각각의 행위들은 하나의 이벤트가 되어서 그 사람의 삶 혹은 세상을 결정한다.이러한 결정이 모여서 기억 속에서 그 사람의 &#39;그날의 세상&#39;이 구성되어지는 것이다. 그러한 이유로 사람들은 수동적으로 이끌려서 가는 단순한 오락보다는 자신이 선택해서 만들어 나가는 내러티브적인 오락을 선호한다.
이러한 이벤트 밀도는 그 거리에서 보행자가 얼마나 다양한 체험과 삶의 주도권을 제공할 수 있는 가를 보여주는 척도가 된다.
이벤트 밀도가 높은 거리는 우연성이 넘치는 도시를 만들어 낸다. 사람들이 걸으면서 더 많은 선택권을 갖는 거리가 더 걷고 싶은 거리가 되는 것이다.</p>
<h4 id="2-공간의-속도">2. 공간의 속도</h4>
<p>우리의 공간은 기본값으로서 3차원으로 비어있다. 객체를 인지함으로써 공간감이 생기고, 사람과 자동차와 같은 움직이는 객체가 들어가게 되면 공간은 비로소 쓰임새를 가지며 완성된다. 이처럼 도로와 건물 같은 물리적인 조건 이외에 거리에서 움직이는 개체도 거리의 성격을 규정하는 요인이 된다. 
공간은 어떠한 행위자로 채워지느냐에 따라서 그 공간의 느낌과 성격이 달라진다. 그리고 이 변화의 요소는 모두 움직이는 것들이다.
거리의 속도가 사람의 걷는 속도인 시속 4킬로미터와 비슷한 값을 가질수록 걷고 싶은 거리가 된다.</p>
<h3 id="감정-시장">감정 시장</h3>
<p>예술은 &#39;인간의 감정을 일으키는 무엇&#39;이라고 정의할 수 있다. 마음 속이 잔잔한 호수처럼 조용하다가도 어떤 노래를 듣거나 소설을 읽고 마음속에 새로운 감정이 솟아난다. 
그러면서 우리는 살아 있다는 것과 자신의 인간됨을 깨닫게 되는 것 같다. 배불리 먹고 잘 잤다고 인간다워지는 것은 아니다. 가슴 속에 무엇이 됐든 감정이 솟아날 때 비로소 인간됨을 느낀다. 
현대 도시이 건축에서는, 기능적으로 작동하는 도시를 만들기 위해서 빠른 자동차를 위한 길과 넓은 집들을 추구했지만 정작 감정을 불러일으키고 감성을 깨우는 공간을 놓쳐온 것이다.
계절에 어울리는 한 곡의 노래가 우리의 삶의 의미를 깨우쳐 주는 것 같이 감성을 울리는 건축이 필요하다.</p>
<h3 id="한강">한강</h3>
<p>비어있는 공간 &#39;한강&#39;은  폭이 넓고 큰 다리가 많은 것으로 인식된다. 한강은 정신없는 서울의 일상에서 벗어나 비움의 공간으로 잘 이용되고 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JSX에서 동적 데이터 할당]]></title>
            <link>https://velog.io/@yumi-jun/JSX%EC%97%90%EC%84%9C-%EB%8F%99%EC%A0%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%95%A0%EB%8B%B9</link>
            <guid>https://velog.io/@yumi-jun/JSX%EC%97%90%EC%84%9C-%EB%8F%99%EC%A0%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%95%A0%EB%8B%B9</guid>
            <pubDate>Wed, 14 Sep 2022 09:15:32 GMT</pubDate>
            <description><![CDATA[<p>이전 배운 jsx 파일 접근할때 정적으로 컴포넌트를 다룰 수 있음
요번에는 동적으로 컴포넌트를 다뤄볼 것임</p>
<p>즉 , html파일을 다루는 것이 아니라 어디서 데이터를 받아와 작성하게 할 것임</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/27c1f5ed-6e5c-436a-bc9f-aed5567a6bd1/image.png" alt="">
이렇게 객체를 선언해주면서 데이터 값을 받아올 수 있음</p>
<h2 id="컴포넌트-재사용-방법">컴포넌트 재사용 방법</h2>
<ol>
<li><img src="https://velog.velcdn.com/images/yumi-jun/post/7ed24af8-bba1-4e53-b9b4-fb34963c4bf5/image.png" alt="">
expense라는 변수안에 구조체 형식으로 선언해 준다음,
<img src="https://velog.velcdn.com/images/yumi-jun/post/732bbe5c-5614-4167-8b6c-a92a10a5007a/image.png" alt="">
이렇게 expense[].~  형식으로 선언하여 접근할 수 있음</li>
</ol>
<p>2.
매개변수 사용
선언해줄 js 함수에 매개변수를 넣어준다.
<img src="https://velog.velcdn.com/images/yumi-jun/post/75f22144-e15e-4810-bafd-62ed41fee5e3/image.png" alt="">
ExpenseItem 값에 title, amount, date 값을 넣어주었는데
<img src="https://velog.velcdn.com/images/yumi-jun/post/f1ade3c4-b7f2-4e10-a20c-5f853b2b9758/image.png" alt="">
이렇게 선언하면 매개변수로 받아온 props를 통해 위의 ExpenseItem에 접근하여 사용할 수 있음</p>
<h3 id="날짜-출력-방법">날짜 출력 방법</h3>
<p>항상 string을 출력할 때 조심해야하는 것 ! 꼭 변환 생각하기</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/3bb9943c-2c29-43f3-8da1-0431a7660cf6/image.png" alt="">
이렇게 props로 데이터를 접근한 후 -&gt; date라는 변수값을 가져와 -&gt; string으로 변환 -&gt; 옵션으로 원하는 형태로 가져올 수 있음</p>
<h2 id="컴포넌트의-개념----다시-정리하기-">컴포넌트의 개념 -- 다시 정리하기 ..</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[리액트 기본 구성 요소]]></title>
            <link>https://velog.io/@yumi-jun/%EB%A6%AC%EC%95%A1%ED%8A%B8-%EA%B8%B0%EB%B3%B8-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C</link>
            <guid>https://velog.io/@yumi-jun/%EB%A6%AC%EC%95%A1%ED%8A%B8-%EA%B8%B0%EB%B3%B8-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C</guid>
            <pubDate>Wed, 14 Sep 2022 08:23:12 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-javascript">import ReactDOM from &#39;react-dom/client&#39;;

import &#39;./index.css&#39;;
import App from &#39;./App&#39;;

const root= ReactDOM.createRoot(document.getElementById(&#39;root&#39;));
root.render(&lt;App /&gt;;)
</code></pre>
<p>id가 root인 요소를 어디에 배치해야 할지를 설정하기 위해 root 변수 선언.
정규 javascript 코드로 선택한 태그 &#39;root&#39;를,(React 라이브러리로부터 가져온 메서드) createRoot로 가져와, 메인 React 애플리케이션이 렌더링 될 곳에 할당</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/8c661f7a-8dd1-41ac-aace-8b4a05da0610/image.png" alt=""></p>
<p>public 파일에 있는 (거의 건드릴 일이 없다고 함)
index.html에 id가 root 인 곳에 배치하게 됨.
공공연히 쓰이는 템플릿에 react가 주도하는 사용자 인터페이스를 추가한다 생각하면 될 듯
<img src="https://velog.velcdn.com/images/yumi-jun/post/f7a6373f-ffa7-4c80-b24e-8754c5afb90f/image.png" alt=""></p>
<p><App />이라는 확장자 파일을 넣으면 두 파일이 상호작용이 가능함.</p>
<h3 id="사용자-지정-컴포넌트">사용자 지정 컴포넌트</h3>
<p>관련 JS 파일을 요소 안에 할당해줌.
<img src="blob:https://velog.io/226d74e0-a3f4-4589-8276-c2b5616d92fd" alt="업로드중.."></p>
<ul>
<li>더 복잡한 JSX 파일 다루기</li>
<li><blockquote>
<p>return값은 하나의 루트 요소만 다루기 때문에 크게 <div> /<div>요소로 감사는게 나음 .. 이때 format document (vs제공함..) 를 이용하면 쉽게 요소파악이 쉬어진다고 함.</p>
</blockquote>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오픈소스sw 2주차]]></title>
            <link>https://velog.io/@yumi-jun/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4sw-2%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@yumi-jun/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4sw-2%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Wed, 14 Sep 2022 00:20:49 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/yumi-jun/post/ee856864-e621-4515-9f19-82c39efd9198/image.png" alt=""></p>
<p>git bash 를 열면 , pseudo 터미널(가상의)이 만들어짐. -&gt; shell(소프트웨어) 실행
-&gt; shell에 ssh로 git.ajou.ac.kr(ssh.ajousw.kr) 로 접속 -&gt; 입력값에 따라 나오는 결과값이 pseudo 가상터미널에 띄어짐</p>
<p>리눅스 cheet sheet임     <a href="https://www.guru99.com/linux-commands-cheat-sheet.html">링크텍스트</a></p>
<ul>
<li>tty : 내 터미널 정보</li>
</ul>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/1f9f5022-6afb-4bdf-8393-c60946cd52e1/image.png" alt="">
이때 또 다른 터미널을 실행하면 pty1(pseudo terminal ~) 이 찍히게 됨. 즉 &#39;n&#39;개의 창의 터미널은 pty&#39;n&#39;임</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/0594a574-056b-48eb-833b-a74a69e82b74/image.png" alt="">
이전 수업에서 가르쳐주신 터미널의 종류(standard out, standard error) 중 standard error로 output이 나오게 됨.</p>
<p>리눅스 시스템은  &#39;tree&#39; 구조로 이루어짐, 윈도우 운영체제는 &#39;forest&#39; 구조로 이루어짐</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[나라는 식물을 키워보기로 했다]]></title>
            <link>https://velog.io/@yumi-jun/%EB%82%98%EB%9D%BC%EB%8A%94-%EC%8B%9D%EB%AC%BC%EC%9D%84-%ED%82%A4%EC%9B%8C%EB%B3%B4%EA%B8%B0%EB%A1%9C-%ED%96%88%EB%8B%A4</link>
            <guid>https://velog.io/@yumi-jun/%EB%82%98%EB%9D%BC%EB%8A%94-%EC%8B%9D%EB%AC%BC%EC%9D%84-%ED%82%A4%EC%9B%8C%EB%B3%B4%EA%B8%B0%EB%A1%9C-%ED%96%88%EB%8B%A4</guid>
            <pubDate>Thu, 01 Sep 2022 11:28:33 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/yumi-jun/post/d7cb971b-72ef-4ebf-9162-5406b165001e/image.png" alt=""></p>
<h1 id="화병-같은-사람">화병 같은 사람</h1>
<p>꽃이 되려는 사람은 많다.
아름답고 싶고, 향기롭고 싶고, 주목받고 싶은
꽃은 아름다워도 홀로 꽃이다.</p>
<p>그렇다면 나는 화병 같은 사람이 되어보자. 
꽃 같은 사람들을 한 아름 품는 사람.
너는 이런 점이 어여쁘고,
너는 이런 점이 향기롭고,
너는 이런 점이 싱그럽다 알아보는 사람.
다른 사람 안에서 예쁜 꽃 같은 면들을 발견하는 사람.</p>
<p>화병에 온갖 예쁜 꽃을 모아 꽂듯이,
화병 같은 사람에게 꽃 같은 사람들이 모인다.</p>
<p>화병에는 향기가 없지만
그래서 늘 싱그러운 향기가 난다.</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/d6f3a64e-c697-46bf-888b-ea4a67c43ce6/image.png" alt=""></p>
<h1 id="내-몸을-사랑하지-않고서는-나를-온전히-사랑할-수-없다">내 몸을 사랑하지 않고서는 나를 온전히 사랑할 수 없다.</h1>
<p>아무리 나를 꾸미고, 칭찬해주고, 
내가 좋아하는 일을 하더라도,
내 몸을 사랑하지 않는다면 나에 대한 온전한 사랑이 될 수 없다.</p>
<p>나의 겉을 꾸며도 나의 속을 신경 쓰지 않는다면, 
마음을 바로 잡아도 구부정한 자세를 바로 잡지 않는다면,
마음 맞는 사람을 만나도 몸에 맞는 음식을 만나지 않는다면,
좋아하는 일에 모든 에너지를 쏟느라 나를 챙기기를 잊는다면,
에너지는 쉽게 사라지고,
감정 기복은 심해지고,
어느 순간, 허무함이 찾아올 수도 있다.</p>
<p>가볍지만 챙겨 먹는 아침은,
틈틈이 마시고 먹는 물과 과일은,
일주일에 몇 번 달리기나 자전거 타기와 규칙적인 운동은,
스마트폰 없이 아무것도 하지 않아도 되는 무념무상 잠깐의 휴식은,
내 몸, 그래서 내 마음에 주는 고마운 선물이다.</p>
<p>어려운 일을 해내고 나면 내가 갖고 싶었던 선물을 스스로에게 주듯
매일의 작은 어려움을 지나야 하는 나이기에,
어떠한 기념일이 아니어도 내 몸에게 줄 작은 선물을 챙기자.</p>
<p>내 몸을 사랑하기를 잊지 말자. 
그것이 나를 더 오래도록,
또한 온전히 사랑할 수 있는 방법이므로.</p>
<ul>
<li>내 몸을 사랑하기 위핸 생활 속 가드닝
내 몸을 사랑하기 위해 하고 있는 , 계획하고 있는 셀프가드닝 기록해두기</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[인스타그램에는 절망이 없다. - 정지우]]></title>
            <link>https://velog.io/@yumi-jun/%EC%9D%B8%EC%8A%A4%ED%83%80%EA%B7%B8%EB%9E%A8%EC%97%90%EB%8A%94-%EC%A0%88%EB%A7%9D%EC%9D%B4-%EC%97%86%EB%8B%A4.-%EC%A0%95%EC%A7%80%EC%9A%B0</link>
            <guid>https://velog.io/@yumi-jun/%EC%9D%B8%EC%8A%A4%ED%83%80%EA%B7%B8%EB%9E%A8%EC%97%90%EB%8A%94-%EC%A0%88%EB%A7%9D%EC%9D%B4-%EC%97%86%EB%8B%A4.-%EC%A0%95%EC%A7%80%EC%9A%B0</guid>
            <pubDate>Sun, 14 Aug 2022 13:50:51 GMT</pubDate>
            <description><![CDATA[<p>우리를 가장 깊은 우울로 떨어뜨리는 때는 언제일까 . 그것은 내 삶에 어떠한 화려한 이미지도 없는데, 가까운 친구들의 소셜 미디어나 프로필 사진 등 온갖 화려한 이미지들로 치장되어 있는 걸 볼 때 일 것이다. 제주도, 일본, 동남아, 유럽의 풍경 그리고 이태원, 연남동, 청담동 따위의 핫한 카페 그리고 한 끼에 몇 만원 쯤 하는 음식 사진 같은 것을 볼 때 급속도로 우울한 마음이 들고, 스스로도 어서 그러한 ‘이미지’에 속하길 바라게 되는 것이다.
그래서 우리 세대의 감각에는 그러한 ‘환각적인’ 이미지에 제 때 도달해야만 안심이 된다. 그러한 이미지에서는 너무 멀어지지 않아야만 박탈감을 방어할 수 있고, 제대로 살고 있다는 감정을 느낄 수 있다. 타인이 속해 있는 화려한 현재의 이미지, 특히 소비 위에 눌러앉은 그 현란한 행복이야말로 우리에게 무엇보다 견딜 수 없는 소외감을 선사한다.</p>
<p>이상과 현실 사이에서 방황하다가 천천히 현실을 깨달아가는 이야기란 온갖 문학의 반복되는 청춘의 서사이다. 하지만 그 동일성에서 말하고 싶은 증언이 있다. 우리는 유혹에 취약한 세대로 자라나, 모든 걸 선택할 수 있다고 믿는 환상을 주입 받았고, 앞으로도 결코 그러한 유혹 혹은 환상에서 완전히 자유롭지 못한 채로, 그러나 실현 가능성은 점점 적어지는 치열하고도 열악한 현실 속에서 살아가리라는 점이다. 
우리는 소비자로 자랐다. 꿈은 선택할 수 있는 것이라 배웠다. 모든 선택 가능한 것들이 마치 손에 닿을 것처럼 가깝다고 믿었다. 우리의 꿈은 드높다. 화려한 소비에 대한 열망, 멋진 삶에 ㄷ한 이미지는 결코 우리 안에서 떠나가지 않은 채로 평생 따라다닐 것이다. 우리는 자기만의 삶을 찾기 위해 평생 고투할 것이다. </p>
<p>‘현실들이 우리를 몰아세울 것이고, 그럼에도 우리는 해안절벽 끝에서 꿈꾸는 사람처럼 저 화려함을 꿈꿀 것이다. 그리고 절벽에서 하나둘 떨어져가는 동안, 누군가는 다시 조심스레 현실을 챙기며 엉금엉금 지상으로 기어나갈 것이다. 하지만 그동안에도 여전히 우리는 꿈을 꾸고 있을 것이다.’</p>
<p>한마리 불나방이 되어 날아간 곳들에서 내가 본것은 삶은 아니었다. 서로의 선의에 기대어 살아가는 사람들의 기억도 아니었다.
도리어 그 모든 곳은 삶을 몰아내고, 박멸하고, 표백해 만든 어떤 ‘깨끗한’ 공간이었다. 사람을 기분 좋게 하는 깨끗한 이미지들로 이루어진 세계, 한나절의 커피 값을 지불하면 얻을 수 있는 세계였다. 사람들이 머문 곳이 아닌, 잠시 왔다 떠나는 그 무수한 소비의 거리들이 하찮게 느껴졌다. 돈을 지불하고 서비스를 받으면서 우리는 삶을 사는 대신 삶을 소비한다. 
자본은 누군가의 삶의 공간이었더 닉존의 거리들로 쓸어내며, 그 위에서 소비의 잔치를 벌인다. 오래된 거리가 뜨는 거리가 되면 사람들은 또 하나의 깨끗한 거리가 생겼음에 즐거워 하며 찾아가 사진을 찍고 자신의 행복을 자랑한다. 분명 세상은 더 개발되고 깨끗해지고 정돈되고 ㅣㅇㅆ는데 정작 삶이 있어야 할 공간은 사라지고 있다. 
되돌아보는 삶에서 종종 마주하는 기억들에서, 자주 내가 삶에서 무언가를 놓치고 있다는 생각을 하곤 했다. 무엇이 내 삶을 내 삶이게 하고 나를 나이게 하는지 이해하고 싶을 때가 있다.</p>
<p>늘 바라는게 있었다면 삶을 정확하게 사는 것이었다. 그러기 위해서는 삶을 정확하게 보는 데서 출발해야 한다는 생각이 든다. 삶의 많은 순간들이 무엇을 보는지 모른채, 무엇을 위하는지도 모른 채 흘러간다. 나는 내가 사는 거리를, 또한 내가 살게 될 거리를 보다 정확하게 응시하며 나아가고 싶다. </p>
<p>삶의 정답이라는 것도 그리 어려운게 아닐 수 있다.
우리는 그저 끊어지지 않고 이어지는 강물 같은 선의를 서로에게 보낼 수 없어서 그토록 단순한 삶을 살 수 없어서 인생에 복잡한 논리를 만들어내는 것일지도 모른다. 행복의 조건은 나아가 들어갈수록 많아진다. 땅바닥을 지나가는 개미 행렬이나 마음대로 그림을 그릴 수 있는 도화지 한장, 슈펴마켓에서 파는 아이스크림 하나면 행복할 수 있었던 어린 시절을 뒤로하고, 온갖 부가적인 결핍들이 더해진다. 내가 속한 공간이 불만스럽고, 소비하지 못한 것이 아쉽고, 미디어의 화려한 이미지들이 우리를 괴롭힌다. 우리의 삶은 무언가를 이루어가고 쌓아가는 과정 같지만, 실은 더 많은 결핍을 만들어내는 과정이다. 그 결핍의 홍수에서 누가 더 자신을 가까스로 유지하는 가 하는 경쟁이다.
정신없이 삶을 살아가다보면 가장 중요한 것을 놓치고 있다는 느낌이 들곤한다. 결국 내가 원하는 게 무엇인지, 무엇을 얻으려 이렇게 발버둥 치는지 의아할 때가 있다. 사실 모든 사람이 원하는 것은 지금 여기에 온전히 존재하는 일일 것이다. 그럴 때 필요한 것은 그저 지금 나 자신에 대한, 그리고 곁에 있는 사람에 대한 선의 그 자체가 아닐까 싶다. 
삶에서 남는 것은 그저 사랑하는 이와 산책을 나섰다 돌아와 수박을 잘라 먹던 저녁 정도가 아닌가 싶다. 우리에게도 나에게도 우리의 삶이 그런 소소한 것들로 채워지길 바란다.
서로에게 보내는 선의로 뒤엉켜 그 속에서 기억들을 쌓는, 그리하여 삶의 기억이 외고, 거리의 역사가 되는 동네가 이 땅에서 자리 잡길 바란다. 우리가 그런 공동체를 만들어갈 수 있기를 원한다.<img src="https://velog.velcdn.com/images/yumi-jun/post/6c15651d-201d-471b-9f60-5afb840ac121/image.jpeg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[모각소 _ 0810]]></title>
            <link>https://velog.io/@yumi-jun/%EB%AA%A8%EA%B0%81%EC%86%8C-0810</link>
            <guid>https://velog.io/@yumi-jun/%EB%AA%A8%EA%B0%81%EC%86%8C-0810</guid>
            <pubDate>Wed, 10 Aug 2022 04:55:13 GMT</pubDate>
            <description><![CDATA[<p>여번 시간에는 랩실 유니티 개발을 하였다.</p>
<pre><code class="language-c#">using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class ConveyBeltManager : MonoBehaviour
{
    public float speed;
    public Rigidbody rigidbody;
   // public GameObject CUBE;
    private bool stop = false;
    public List&lt;GameObject&gt; list;
    private int i=0;
    public GameObject CurrentModel;
    public int Limit_Num=5;

    private bool first = true;
    private Vector3 MugPos = new Vector3(0, 0.51f, -1.849f);
    private Vector3 IllusionPos = new Vector3(0, 0.508f, -1.64f);
    private Vector3 GuitarPos = new Vector3(0, 0.792f, -1.849f);
    private Vector3 Circle2x2Pos = new Vector3(-0.605f, 0.474f, -1.729f);
    private Vector3 Cube4xPos = new Vector3(0, 0.597f, -1.849f);
    private Vector3 DogPos = new Vector3(0, 0.8f, -1.849f);


    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.W))
        {
            Debug.Log(&quot;W!&quot;);
            CheckButton();
        }
        if(Input.GetKeyDown(KeyCode.S))
        {
            Debug.Log(&quot;S!&quot;);
            PassButton();
        }
    }

    void FixedUpdate()
    {

        if(!stop)
        {
            rigidbody.position -= transform.forward * speed * Time.deltaTime;
            rigidbody.MovePosition (rigidbody.position + transform.forward * speed * Time.deltaTime);
        }
        StopPosition();
    }

    void StopPosition()
    {
        if(CurrentModel.transform.position.z&gt;=0 &amp;&amp; first)
        {
            stop = true;
            first = false;
            Debug.Log(CurrentModel.transform.eulerAngles);
            Debug.Log(CurrentModel.transform.rotation);
        }
    }

    void CheckButton()
    {
        Debug.Log(&quot;local Euler: &quot; + CurrentModel.transform.localEulerAngles);
        Debug.Log(&quot;Euler: &quot; + CurrentModel.transform.eulerAngles);
        Debug.Log(&quot;Quaternion: &quot; + CurrentModel.transform.rotation);

        Debug.Log(CurrentModel.name);
        //Mug
        if(CurrentModel.name == &quot;Mug&quot; &amp;&amp; Mathf.Round(CurrentModel.transform.eulerAngles.y) == 90)
        {
            //맞춤 0
            Debug.Log(&quot;TRUE&quot;);
            if(i&lt;Limit_Num)
            {
            i++;
            CurrentModel = Instantiate(list[i],InstantiatePos(list[i]), Quaternion.identity);
            stop = false;
            first = true;
            }
            else if(i==Limit_Num)
            {
                stop = false;
            }
        }

        //Guitar
        else if(CurrentModel.name == &quot;Guitar&quot; &amp;&amp; Mathf.Round(CurrentModel.transform.localEulerAngles.z) == 45)
        {
            //맞춤 0
            Debug.Log(&quot;TRUE&quot;);
            if(i&lt;Limit_Num)
            {
            i++;
            CurrentModel = Instantiate(list[i],InstantiatePos(list[i]), Quaternion.identity);
            stop = false;
            first = true;
            }
            else if(i==Limit_Num)
            {
                stop = false;
            }
        }

        //Dog
        else if(CurrentModel.name == &quot;Dog&quot; &amp;&amp; Mathf.Round(CurrentModel.transform.localEulerAngles.z) == 45)
        {
            //맞춤 0
            Debug.Log(&quot;TRUE&quot;);
            if(i&lt;Limit_Num)
            {
            i++;
            CurrentModel = Instantiate(list[i],InstantiatePos(list[i]), Quaternion.identity);
            stop = false;
            first = true;
            }
            else if(i==Limit_Num)
            {
                stop = false;
            }
        }

        //4xCube    
        else if(CurrentModel.name == &quot;4xCube&quot; &amp;&amp; Mathf.Round(CurrentModel.transform.localEulerAngles.z) == 45)
        {
            //맞춤 0
            Debug.Log(&quot;TRUE&quot;);
            if(i&lt;Limit_Num)
            {
            i++;
            CurrentModel = Instantiate(list[i],InstantiatePos(list[i]), Quaternion.identity);
            CurrentModel.name = list[i].name;
            stop = false;
            first = true;
            }
            else if(i==Limit_Num)
            {
                stop = false;
            }
        }
        else{
            Debug.Log(&quot;FALSE&quot;);
            return;
        }
    }


    void PassButton()
    {
        if(CurrentModel.name == &quot;Illusion(Clone)&quot; || CurrentModel.name == &quot;Circle2x2&quot;)
        {
            //맞춤 0
            Debug.Log(&quot;TRUE&quot;);
            if(i&lt;Limit_Num)
            {
            i++;
            CurrentModel = Instantiate(list[i],InstantiatePos(list[i]), Quaternion.identity);
            CurrentModel.name = list[i].name;
            stop = false;
            first = true;
            }
        }
        else{
            Debug.Log(&quot;FALSE&quot;);
            return;
        }
    }    

    Vector3 InstantiatePos(GameObject nextOne )
    {
        if(nextOne.name == &quot;Mug&quot;)
            return MugPos;
        else if (nextOne.name == &quot;Illusion&quot;)
            return IllusionPos;
        else if (nextOne.name == &quot;Guitar&quot;)
            return GuitarPos;
        else if (nextOne.name == &quot;Circle2x2&quot;)
            return Circle2x2Pos;        
        else if (nextOne.name == &quot;4xCube&quot;)
            return Cube4xPos;
        else if (nextOne.name == &quot;Dog&quot;)
            return DogPos;
        else 
            return new Vector3(0,0,0);
    }
}
</code></pre>
<p>코드를 보면 알 수 있듯이 개연성이 없다 ..ㅎ...
리스트를 짜서 깔끔한 코드를 완성하고 싶었으나 그러하지 못했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[모각소_0802]]></title>
            <link>https://velog.io/@yumi-jun/%EB%AA%A8%EA%B0%81%EC%86%8C0802</link>
            <guid>https://velog.io/@yumi-jun/%EB%AA%A8%EA%B0%81%EC%86%8C0802</guid>
            <pubDate>Wed, 03 Aug 2022 03:40:33 GMT</pubDate>
            <description><![CDATA[<p>연구실 프로젝트를 진행하였다.</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/9d565c6f-4fcb-4e18-8104-d94567d701e4/image.png" alt="">
-&gt; 버튼을 누르면 관련 퍼센트 숫자만큼 올라가게 진행</p>
<p>Script : Vector요소 값을 이용하여 차근차근 올라가게
조건문을 통해 크기 조절
<img src="https://velog.velcdn.com/images/yumi-jun/post/e9977981-fec0-404f-9cb3-8bfefb86cbdd/image.png" alt="">
-&gt; Scene 이동</p>
<p>추가적으로 백준 알고리즘 문제를 풀 것이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[모각소-0726]]></title>
            <link>https://velog.io/@yumi-jun/%EB%AA%A8%EA%B0%81%EC%86%8C-0726</link>
            <guid>https://velog.io/@yumi-jun/%EB%AA%A8%EA%B0%81%EC%86%8C-0726</guid>
            <pubDate>Tue, 26 Jul 2022 09:03:41 GMT</pubDate>
            <description><![CDATA[<p>2577번 문제 
처음엔 result를 문자열로 접근하여 풀려고 하였는데
나머지로 접근하는게 더 현명함</p>
<pre><code class="language-c">#define _CRT_SECURE_NO_WARNINGS  
#include &lt;stdio.h&gt;
#include &lt;string&gt;
using namespace std;

int main() {
    int A[3];
    int result=1;
    int num = 1;
    int arr[10] = { 0, };
    for (int i = 0; i &lt; 3; i++) 
    {
        scanf_s(&quot;%d&quot;, &amp;A[i]);
        result *= A[i];
    }
    //printf(&quot;%d&quot;, result);
    while (result &gt; 0)
    {
        num = result % 10;// 
        arr[num]++;

        result = result / 10;
    }

    for (int i = 0; i &lt; 10; i++)
    {
        printf(&quot;%d\n&quot;, arr[i]);
    }

    return 0;
}

</code></pre>
<p>3052번 나머지
서로 다른 숫자 저장 부분
count[v % 42]++;
를 할수있음을 명시하자</p>
<pre><code class="language-c">#include &lt;iostream&gt;

using namespace std;

int main(int argc, const char* argv[]) {

    /*
      0으로 초기화를 해주어야 한다.
      bool 배열을 활용 할 경우 bool count[42] = {false} 이런식으로
      초기화 해줄 수 있다.
     */
    int count[42] = {};

    int v;
    for (int i = 0; i &lt; 10; i++) {
        cin &gt;&gt; v;
        // count 는 나머지를 저장하는 배열로 0~9까지
        count[v % 42]++;
    }

    int result = 0;
    /*
      배열을 순회하면서 적어도 한 번 이상 나온 경우에는
      result 값을 증가시킨다. (서로 다른 수를 세기 위함)
     */
    for (int v : count) {
        if (v &gt; 0) {
            result++;
        }
    }
    cout &lt;&lt; result;

    return 0;


}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flutter _ 기본 앱 다뤄보기]]></title>
            <link>https://velog.io/@yumi-jun/Flutter-%EA%B8%B0%EB%B3%B8-%EC%95%B1-%EB%8B%A4%EB%A4%84%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@yumi-jun/Flutter-%EA%B8%B0%EB%B3%B8-%EC%95%B1-%EB%8B%A4%EB%A4%84%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Sat, 16 Jul 2022 06:23:19 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-kotlin">class MyApp extends StatelessWidget</code></pre>
<pre><code class="language-kotlin">class HelloPage extends StatefulWidget</code></pre>
<p>플러터는 기본적으로 StatelessWidget, StatefulWidget 두가지로 구성되어있다.</p>
<p>이름으로 알 수 있듯이 StatefulWidget은 역동성을 부여함으로 우리가 앞으로 많이 사용하게 될 아이이다.</p>
<pre><code class="language-kotlin">class HelloPage extends StatefulWidget {
  final String title;

  HelloPage(this.title);

 //어떻게 바뀔지 _HelloPageState()로 반영
  @override
  State&lt;HelloPage&gt; createState() =&gt; _HelloPageState();
}
//바뀌는 부분 반영 class
class _HelloPageState extends State&lt;HelloPage&gt; {
  String _message=&#39;Hello World&#39;; // _ is private
  int _counter=0;
  @override
  Widget build(BuildContext context) {
    return Scaffold( floatingActionButton: FloatingActionButton(
          child:Icon(Icons.add),
          //버튼을 눌렀을 때, _changeMessage()함수가 실행
          onPressed:()=&gt;_changeMessage),
        appBar:AppBar(
          title:Text(widget.title),
        ),
        body:Center(
          child:Column(
            mainAxisAlignment: MainAxisAlignment.center,//가운데로 배치되게 정렬 위치
            children: &lt;Widget&gt;[
              Text(_message,style:TextStyle(fontSize: 30)),
              Text(&#39;$_counter&#39;,style:TextStyle(fontSize: 30)),
            ] )
        )) ;
  }</code></pre>
<p><a href="https://flutterstudio.app">https://flutterstudio.app</a>
에 가면 기본적인 레이아웃 구성에 대해서 알아볼 수 있다고 한다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flutter _ 배우는 이유]]></title>
            <link>https://velog.io/@yumi-jun/Flutter-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%9D%B4%EC%9C%A0</link>
            <guid>https://velog.io/@yumi-jun/Flutter-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%9D%B4%EC%9C%A0</guid>
            <pubDate>Sat, 16 Jul 2022 05:55:37 GMT</pubDate>
            <description><![CDATA[<p>작년 2학년 때 안드로이드 앱개발 도전해보고 ios까지도 해보고 싶다는 생각에 무지성으로 개발 동아리에 들어가서 학기 중에 제대로 챙기지도 못하고 어영부영 뛰쳐나온 나로써....
플러터는 나에겐 장벽의 언어처럼 느껴진다.</p>
<p>하지만 요즘 사귄 동기 중 &#39;갓&#39; 이라고 불리우는 친구의 적극 권유로 다시 한번 도전하게 된다.
지금은 학기 중이 아니니, 시간적 여유도 많아 다시 도전해본다.</p>
<h2 id="flutter란">Flutter란?</h2>
<p>간단하게 모바일 앱을 개발하는 플랫폼으로
구글에서 개발했으며 dart언어를 기반으로 하나의 프로그래밍 코드로 ios, android, 웹으로 앱을 만들고 서비스를 할 수 있다.</p>
<h3 id="flutter를-배워야-하는-이유는">Flutter를 배워야 하는 이유는?</h3>
<p>렌더링 엔진을 가지고 있어, desk app, 웹 까지도 확장성을 늘리고 있는 추세이며, 하나의 서비스를 다양한 채널로 배포하고 싶어하는 서비스 제공자의 요구사항이 맞아 떨어져 지금보다 더 확산 될 수 있다고 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[7월 12일 모각소]]></title>
            <link>https://velog.io/@yumi-jun/7%EC%9B%94-12%EC%9D%BC-%EB%AA%A8%EA%B0%81%EC%86%8C</link>
            <guid>https://velog.io/@yumi-jun/7%EC%9B%94-12%EC%9D%BC-%EB%AA%A8%EA%B0%81%EC%86%8C</guid>
            <pubDate>Wed, 13 Jul 2022 04:26:15 GMT</pubDate>
            <description><![CDATA[<p>현재 진행상황: 코드업 기초 100문제를 풀고
이제 백준 단계별 문제 풀이에 들어갔다.
코드업과 다르게 백준은 어디서 프로그램이 오류가 나고 실행이 나지 않는지 알려주지 않기 때문에 까다로운 점이 많다.</p>
<p>배열부분과 문자열 에서의 빈칸 다루기에서도 막혔었는데 이는 쉽게 &#39; &#39;공백을 세면 된다는 것을 알게 되었다.</p>
<p>그리고 모각소 모임 친구 중 한명이 플러터 관련 강의를 추천해줘 이도 같이 병행하기로 했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[7월 5일 모각소 기록]]></title>
            <link>https://velog.io/@yumi-jun/7%EC%9B%94-5%EC%9D%BC-%EB%AA%A8%EA%B0%81%EC%86%8C-%EA%B8%B0%EB%A1%9D</link>
            <guid>https://velog.io/@yumi-jun/7%EC%9B%94-5%EC%9D%BC-%EB%AA%A8%EA%B0%81%EC%86%8C-%EA%B8%B0%EB%A1%9D</guid>
            <pubDate>Wed, 13 Jul 2022 04:23:22 GMT</pubDate>
            <description><![CDATA[<p>7월 5일 화요일에
모각소 친구들과 모여 스터디 진행</p>
<p>나의 진행 상황
:
코드업 기초 100문제 중 50문제까지 풀이 완성
기초문제라 입출력, 변수 선언, 조건문 선언 등 간단한 것이라
금방금방 해냈다.</p>
<p>다음주까지 해야할 것:
코드업 기초 100문제 100문항 끝내기</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[애인이 있는 시간]]></title>
            <link>https://velog.io/@yumi-jun/%EC%95%A0%EC%9D%B8%EC%9D%B4-%EC%9E%88%EB%8A%94-%EC%8B%9C%EA%B0%84</link>
            <guid>https://velog.io/@yumi-jun/%EC%95%A0%EC%9D%B8%EC%9D%B4-%EC%9E%88%EB%8A%94-%EC%8B%9C%EA%B0%84</guid>
            <pubDate>Thu, 07 Jul 2022 06:25:57 GMT</pubDate>
            <description><![CDATA[<h1 id="청춘은-주저-없이-가는-거야">청춘은 주저 없이 가는 거야</h1>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/6e6c55cd-f131-4b53-a051-5ba07b8170ea/image.png" alt="">
사무엘 울만의 &lt;청춘&gt;
청춘이란 인생의 어떤 한 시기가 아니라, 어떤 마음가짐을 뜻 한다.
청춘이란 장밋빛 볼, 붉은 입술 그리고 유연한 무릎을 뜻하는 것이 아니라, 강인한 의지, 풍부한 상상력, 불파는 열정이다.
청춘이란 인생의 깊은 샘에서 솟아나는 신선한 정신이다.
청춘이란 두려움을 물리치는 용기와 안이함을 뿌리치는 모험심을 의미한다.
때로는 스무 살의 청년보다 예순 살의 노인이 더 청춘일 수 있다. 
나이를 먹는다고 누구나 늙는 것은 아니다.
이상을 잃어버릴 때 비로소 늙은 것이다
세원은 피부를 주름지게 하지만, 열정을 상실할 때 영혼이 주름진다.</p>
<p><img src="https://velog.velcdn.com/images/yumi-jun/post/239ecbf1-7533-4bf5-9825-04dbbd4b0603/image.png" alt=""></p>
<h1 id="삶의-무게를-가볍게-하는-지혜">삶의 무게를 가볍게 하는 지혜</h1>
<p>인생의 배에 당신에게 꼭 필요한 것만 간안하게 실어둡시다. 될 수 있으면 당신의 배를 가볍게 만듭시다. 아주 편안한 가정과 간단한 오락, 한두 명의 소중한 친구들, 당신이 사랑하는 사람과 당신을 사랑해주는 사람, 한 마리의 고양이와 강아지, 그리고 한두 개 정도의 담배 파이프, 넉넉한 음식과 옷, 그리고 갈증은 위험하므로 아주 충분하고도 남을 만큼의 물을 갖추어</p>
<p>나의 청춘은?
난 시기상 청춘을 펼치기 딱 적절한 그런 나이야.
근데 난 지금 청춘일까?
환경을 탓하기는 싫지만, 환경이 나의 태도를 만들듯이 20대가 된 이후로 난 이 시가 정의하는 청춘은 아닌 듯하다.</p>
<p>지금 3학년인 내게 가장 두려운 부분은 단연컨데 취업이다.
나는 지금 3학년이니깐, 나는 지금 취준생이니깐 이런 마음을 곱씹으며 포기하는 것이 없다고 하면 거짓말이다.
지금 내 나이 또럐 친구들도 마찬가지이다.</p>
<p>낭만도 없는 이 현실에 살아가는 우리들이 참 안타까운 마음이다.</p>
<p>난 무언가에 대해 도전을 해본 적이 있을까? 앞뒤 생각하지 않고 거침없이 날아본적이 있을까? 무언가에 미쳐 몰두해 본 적이 있을까?
이에 대한 답변은 당연컨대 없다이다.</p>
<p>위에 처럼 환경, 사회를 탓하지만, 이런 나도 어리석다.</p>
<p>청춘, 너는 어떻게 즐길꺼니?</p>
]]></description>
        </item>
    </channel>
</rss>