<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sik-kim.log</title>
        <link>https://velog.io/</link>
        <description>개발꿈나무</description>
        <lastBuildDate>Sat, 17 Oct 2020 23:45:04 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>sik-kim.log</title>
            <url>https://images.velog.io/images/sik-kim/profile/877ef909-b373-473e-927d-c1fdb9d901f8/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. sik-kim.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sik-kim" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[jkl]]></title>
            <link>https://velog.io/@sik-kim/jkl</link>
            <guid>https://velog.io/@sik-kim/jkl</guid>
            <pubDate>Sat, 17 Oct 2020 23:45:04 GMT</pubDate>
            <description><![CDATA[<p>파이썬은 초보자부터 전문가까지 사용자층을 보유하고 있다. 동적 타이핑(dynamic typing) 범용 프로그래밍 언어로, 펄 및 루비와 자주 비교된다. 다양한 플랫폼에서 쓸 수 있고, 라이브러리(모듈)가 풍부하여, 대학을 비롯한 여러 교육 기관, 연구 기관 및 산업계에서 이용이 증가하고 있다. 또 파이썬은 순수한 프로그램 언어로서의 기능 외에도 다른 언어로 쓰인 모듈들을 연결하는 풀언어(glue language)로써 자주 이용된다. 실제 파이썬은 많은 상용 응용 프로그램에서 스크립트 언어로 채용되고 있다. 도움말 문서도 정리가 잘 되어 있으며, 유니코드 문자열을 지원해서 다양한 언어의 문자 처리에도 능하다.
홓홓톹</p>
<h4 id="kljklj">kljklj</h4>
<h3 id="kljlkj">kljlkj</h3>
<h2 id="jklj">jklj</h2>
<h1 id="lkjlkj">lkjlkj</h1>
<p>톹홓톹
파이썬은 초보자부터 전문가까지 사용자층을 보유하고 있다. 동적 타이핑(dynamic typing) 범용 프로그래밍 언어로, 펄 및 루비와 자주 비교된다. 다양한 플랫폼에서 쓸 수 있고, 라이브러리(모듈)가 풍부하여, 대학을 비롯한 여러 교육 기관, 연구 기관 및 산업계에서 이용이 증가하고 있다. 또 파이썬은 순수한 프로그램 언어로서의 기능 외에도 다른 언어로 쓰인 모듈들을 연결하는 풀언어(glue language)로써 자주 이용된다. 
실제 파이썬은 많은 상용 응용 프로그램에서 스크립트 언어로 채용되고 있다. </p>
<p>도움말 문서도 정리가 잘 되어 있으며, 유니코드 문자열을 지원해서 다양한 언어의 문자 처리에도 능하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[CLI vs GUI]]></title>
            <link>https://velog.io/@sik-kim/CLI-vs-GUI</link>
            <guid>https://velog.io/@sik-kim/CLI-vs-GUI</guid>
            <pubDate>Fri, 25 Sep 2020 14:04:03 GMT</pubDate>
            <description><![CDATA[<p>CLI(Command Line Interface) : Text Terminal을 통해서 컴퓨터와 상호 작용하는 방식(Terminal)
vs
GUI(Graphic User Interface) : 그래픽을 통한 컴퓨터와의 상호 작용 방식(mouse, finder 등)</p>
<h4 id="기본-cli-입력-방법">기본 CLI 입력 방법</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/1950bce0-ca3c-443d-b5ae-d1820e7417ad/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[python]함수와 return]]></title>
            <link>https://velog.io/@sik-kim/python%ED%95%A8%EC%88%98%EC%99%80-return</link>
            <guid>https://velog.io/@sik-kim/python%ED%95%A8%EC%88%98%EC%99%80-return</guid>
            <pubDate>Thu, 17 Sep 2020 07:34:19 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>함수(function)은 마법상자와 같다. 함수라는 마법상자에 뭔가 넣으면 뭔가 튀어나온다. 
물론 어떤 상자는 뭘 넣지않아도 결과물을 만들어내기도하고 어떤 상자는 죽어라 넣어도 아무것도 만들지 않는다.
우리가 학창시절 배웠던 방정식도 사실 함수였다. 
y = 2x + 1 (x에 숫자를 넣어서 y값을 구한다! 라고 생각할 때 x는 매개변수이고 y는 return 값이다. 매개변수 x에 3이라는 인수를 넣어주면 7이라는 return값이 출력된다.)</p>
</blockquote>
<blockquote>
<p>함수에는 입력값과 결과값이 있을수도 있고 없을수도 있다.
입력값이 없다는건 매개변수(parameter)가 없는 것이고 결과값이 없는건 return이 없다는 것!</p>
</blockquote>
<blockquote>
<p>함수의 여러가지 형태.
    1. 입력값 O 출력값 O
    2. 입력값 O 출력값 X
    3. 입력값 X 출력값 O
    4. 입력값 X 출력값 X
    5. 입력값이 몇 개인지 모를 때
    6. 키워드 파라미터 (딕셔너리 만들기)</p>
</blockquote>
<h3 id="1-입력값-o-출력값-o">1. 입력값 O 출력값 O</h3>
<pre><code class="language-python">a=4
b=3
def vartest(a):  
#함수 설정 위에 상수로 설정해준 a의 4를 함수의 매개변수 a에 넣는 것임! 위에 상수 a와 함수의 a는 다르다는 것!!!
# a는 매개변수(parameter), 매개변수에 대입할 값인 4는 인수(argument)
    a = a+15
    return a  #이 함수의 최종 반환값

print(vartest(a))  # 리턴값 19를 프린트
print(b)  #당연히 상수 b값 3을 프린트</code></pre>
<h3 id="2-입력값-o-출력값-x">2. 입력값 O 출력값 X</h3>
<pre><code class="language-python">def add(a, b) :
    print(a + b)   # 프린트는 콘솔에 출력할 기능일뿐 함수로서 유의미한 결과를 만들어 내지 못한다.

add(1, 2)  # 3을 콘솔에 프린트한다.
result = add(1, 2)  # add(1, 2)가 콘솔에는 3을 프린트 했지만 result로 넣어줄 값은 없다. 함수의 결과값이 없기 때문이다.
print(result)  # none 출력</code></pre>
<h3 id="3-입력값-x-출력값-o">3. 입력값 X 출력값 O</h3>
<pre><code class="language-python">def hello() :   # 매개변수가 없음
    return &quot;hi, nice to meet you&quot;  # 매개변수는 없지만 함수 출력값은 있음

print(hello())  #hi, nice to meet you 프린트</code></pre>
<h3 id="4-입력값-x-출력값-x">4. 입력값 X 출력값 X</h3>
<pre><code class="language-python">def hello()
    print(&quot;hi&quot;)</code></pre>
<h3 id="5-입력값이-몇-개인지-모를-때그때그때-달라요">5. 입력값이 몇 개인지 모를 때(그때그때 달라요~)</h3>
<pre><code class="language-python">
def add_many1(*args):   # 꼭 args 를 안써도 되지만 통상적으로 많이 쓴다. 
    result = 0
    for i in args:
        result = result + i
    return result

print(add_many1(1,2,3,4,5))  # (1,2,3,4,5)를 튜플로 만들어서 (*args)에 대입해줌


def add_many2(choice, *args):  # 입력 str에 따라 함수 계산식 자체가 바뀜
    if choice == &quot;add&quot;:
        result = 0
        for i in args:
            result = result + i
    elif choice == &quot;mul&quot;:
        result = 1
        for i in args :
            result = result * i
    return result

print(add_many2(&quot;mul&quot;, 1,2,3,4))</code></pre>
<h3 id="6-키워드-파라미터-딕셔너리-만들기">6. 키워드 파라미터 (딕셔너리 만들기)</h3>
<pre><code class="language-python">def print_kwargs(**kwargs):
    print(kwargs)

print(print_kwargs(name=&#39;sik&#39;, age=1))
                             출력값 : {&#39;name&#39;: &#39;sik&#39;, &#39;age&#39;: 1}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[html,css] 팝업 만들기]]></title>
            <link>https://velog.io/@sik-kim/htmlcss-%ED%8C%9D%EC%97%85-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@sik-kim/htmlcss-%ED%8C%9D%EC%97%85-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Sun, 13 Sep 2020 14:37:08 GMT</pubDate>
            <description><![CDATA[<h1 id="html-css-이용하여-팝업-만들기">html, css 이용하여 팝업 만들기</h1>
<h2 id="알아야-할-것">알아야 할 것</h2>
<h4 id="1input-label의-역할을-알기">1.input, label의 역할을 알기.</h4>
<h4 id="2-구현되는-순서를-정확하게-알기">2. 구현되는 순서를 정확하게 알기.</h4>
<blockquote>
<p>순서 : label 클릭(checkbox 선택) -&gt; input의 하위 div(팝업) 실행 -&gt; div(팝업) 안의 label 클릭(checkbox 해제) -&gt; div(팝업) 종료</p>
</blockquote>
<blockquote>
<ul>
<li>input 역할 : (일반적으로) 텍스트를 입력하는 함수. (ex. 메시지창)<pre><code>       여기서는 checkbox로 사용함. 하부 코드와 같이 type=&quot;checkbox&quot; 지정해줌.
       즉 하위 div(팝업)을 실행하는 주체는 input이다
  _* checkbox 체크 선택 시 : div 보여짐(display : block)
  * checkbox 체크 해제 시 : div 가려짐(display : none)_</code></pre></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>label 역할 : input의 checkbox 선택/해제를 위해 checkbox 대신 선택되여짐.(checkbox의 분신같은 존재..?) 즉 label이 클릭되면 checkbox가 선택되고 하위 div가 보여지게 됨(물론 체크시 div 보여지는건 css로 display를 설정하니까 되는것임)</li>
</ul>
</blockquote>
<ul>
<li>input의 &quot;id명&quot;와 label의 &quot;for명&quot;을 동일하게 할 것</li>
<li>팝업의 활성화/종료 2가지 명령을 위해서 2개의 label을 사용함.</li>
</ul>
<pre><code class="language-html"> &lt;div class=&quot;book4&quot;&gt;  
    &lt;img src=&quot;images/book4.png&quot; alt=&quot;book&quot;&gt;
  &lt;span class=&quot;book-title title&quot;&gt;자기 앞의 생&lt;/span&gt;
&lt;span class=&quot;book-author author&quot;&gt;에밀 아자르&lt;/span&gt;
&lt;div class=&quot;popup&quot;&gt;
  &lt;input type=&quot;checkbox&quot; id=&quot;info04&quot;&gt;  //input : div의 display를 관장하는 체크박스
  &lt;label for=&quot;info04&quot;&gt;&lt;/label&gt;  //label(1번째)  : checkbox 대신 나를 눌려줘(checkbox는 안보이게 display: none 할꺼니까)
  &lt;div class=&quot;popup__contents&quot;&gt;거꾸로 된 세상, 이건 정말 나의 빌어먹을 인생 중에서 내가 본 가장 멋진 일이었다. 나는 튼튼한 다리로 서 있는 생기 있는 로자 아줌마를 떠올렸다. 나는 좀더 시간을 거슬러올라 아줌마를 아름다운 처녀로 만들었다. 그러자 눈물이 났다. &lt;br&gt; //label 클릭시 checkbox가 선택되게 되고 그럼 div가 보여짐
    &lt;label for=&quot;info04&quot;&gt;CLOSE&lt;/label&gt;  //label(2번째) : div안에 넣어둔 label도 같이 보여지게 됨. 이 2번째 label도 1번째 label과 똑같은 분신같은 존재로 클릭하면 다시 div가 가려지게 됨.
  &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</code></pre>
<pre><code class="language-css">.popup {
  position: absolute;
}
// 위치 잡기위해 사용. 이건 위치에 따라 다르겠지

.popup input {
  display: none;
}
// checkbox 속성 설정 :
못생긴 checkbox 모양은 안보이게 하기(처음부터 끝까지 이 모양은 쭉 안보이는 것)

.popup input + label {
  display: block;
  width: 190px;
  height: 330px;
  position: absolute;
  transform: translateY(-100%);
  cursor: pointer;
}
// 1번째 라벨 속성 설정 :
라벨 형태를 설정함. 여기선 라벨을 보이지 않는 투명한 박스모양로 만들어서 책 img 위에 위치시킴. 그래서 사진의 책을 클릭하게되면 실제로는 label이 선택되며 팝업이 실행됨
(마치 img를 눌려서 팝업이 실행되는 것 같은 효과!)</code></pre>
<h3 id="팝업-실행-전">팝업 실행 전</h3>
<p><img src="https://images.velog.io/images/sik-kim/post/a42c514b-c656-46a5-a040-9220b43cd9a3/image.png" alt=""></p>
<pre><code class="language-css">input[id*=&#39;info&#39;] + label + div {
  display: none;
  width: 190px;
  height: 330px;
  padding: 10px 6px;
  background-color: #dcdde1;
  position: relative;
  transform: translateY(-100%);
  font-size: 15px;
  border: 2px black solid;
}
// input함수 하위 div(팝업내용) 속성 설정 :
위치, 색상, 크기 설정해줌

.popup input:checked + label + div {
  display: block;
}
// checkbox 체크시(사실은 label 선택시) div 속성 설정 : 
div를 보여주게 해주세요!

.popup input + label + div label {
  position: absolute;
  bottom: 6px;
  cursor: pointer;
  background-color: black;
  color: white;
  border-radius: 5px;
  padding: 4px 6px;
  font-weight: 400;
}
// input 하위 div(팝업) 내에 있는 2번째 label 속성 설정 :
위치, 색상, 크기 설정해줌</code></pre>
<h3 id="팝업-실행-후">팝업 실행 후</h3>
<p><img src="https://images.velog.io/images/sik-kim/post/2418cf58-6de5-40b7-a429-8c3281ecec88/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML, CSS] meta를 이용하여 자동으로 사이트 불러오기]]></title>
            <link>https://velog.io/@sik-kim/HTML-CSS-meta%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0</link>
            <guid>https://velog.io/@sik-kim/HTML-CSS-meta%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0</guid>
            <pubDate>Sun, 13 Sep 2020 13:59:14 GMT</pubDate>
            <description><![CDATA[<h3 id="html에서-자동으로-원하는-다른-사이트-넘어가는-방법">html에서 자동으로 원하는 다른 사이트 넘어가는 방법</h3>
<pre><code class="language-html">&lt;META http-equiv=&quot;refresh&quot; content=&quot;3; url=https://sik-kim.github.io/aboutMe/&quot;&gt;</code></pre>
<h4 id="content시간초-url도메인-주소">content=&quot;시간(초); url=도메인 주소&quot;</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[GitHub Desktop 이용한 깃업로드 방법]]></title>
            <link>https://velog.io/@sik-kim/GitHub-Desktop-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EA%B9%83%EC%97%85%EB%A1%9C%EB%93%9C-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@sik-kim/GitHub-Desktop-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EA%B9%83%EC%97%85%EB%A1%9C%EB%93%9C-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Fri, 11 Sep 2020 16:09:41 GMT</pubDate>
            <description><![CDATA[<h4 id="github-desktop을-이용한-깃허브-사용방법입니다">Github Desktop을 이용한 깃허브 사용방법입니다.</h4>
<h4 id="repository-생성--깃허브-업로드--branch-생성--깃허브-url-생성-등">(repository 생성 / 깃허브 업로드 / branch 생성 / 깃허브 url 생성 등)</h4>
<h4 id="처음에-좀-헷갈릴-수-있는데-적응되면-편하게-쓰실거라-생각합니다">처음에 좀 헷갈릴 수 있는데 적응되면 편하게 쓰실거라 생각합니다.</h4>
<h4 id="google에서-github-desktop-검색해서-다운로드하시면-됩니다">google에서 github desktop 검색해서 다운로드하시면 됩니다.</h4>
<h1 id="코딩-시작을-위한-폴더-생성부터-깃허브-업로드">코딩 시작을 위한 폴더 생성부터 깃허브 업로드</h1>
<h4 id="1-repository-생성개발-첫-시작을-위한-폴더-생성">1) Repository 생성(개발 첫 시작을 위한 폴더 생성)</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/105763d2-ccf1-46f6-9f21-04598f50caff/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/sik-kim/post/0a96502d-9c7b-402c-bab1-fe611c9545bc/image.png" alt=""></p>
<h4 id="2-vsc로-열심히-코딩-작성">2) VSC로 열심히 코딩 작성<del>~</del></h4>
<h4 id="3-publish-respository깃허브로-코드가-업로드됨">3) publish Respository(깃허브로 코드가 업로드됨)</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/35a44935-970b-4ea8-b759-8e1af1e8797c/image.png" alt=""></p>
<h4 id="4-github-사이트-올라왔는지-확인">4) github 사이트 올라왔는지 확인</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/bfa00df5-66d2-4206-a4ec-13a974c5c1c9/image.png" alt=""></p>
<h1 id="변경내용-깃허브-업데이트">변경내용 깃허브 업데이트</h1>
<h4 id="1-vsc에서-코드-수정-후-저장하고-깃허브-repository-update코딩-중간중간-업데이트-내용-깃허브로-올려주는-과정">1) vsc에서 코드 수정 후 저장하고 깃허브 repository update(코딩 중간중간 업데이트 내용 깃허브로 올려주는 과정)</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/05bc5938-0bac-4513-ad99-af862ade8559/image.png" alt=""></p>
<h4 id="2-깃허브-사이트-업데이트-확인">2) 깃허브 사이트 업데이트 확인</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/3f692014-2e06-49c4-a69e-bfbfd05828a4/image.png" alt=""></p>
<h1 id="branch-생성-방법깃허브-url-생성">Branch 생성 방법(깃허브 url 생성)</h1>
<h4 id="1-branch-생성이름은-gh-pages로-설정">1) branch 생성(이름은 gh-pages로 설정)</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/4d135af0-584c-4aac-b2a4-ba27f0e5e371/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/sik-kim/post/3e46111a-ebfb-4e64-ba2d-1d9ceddb4467/image.png" alt=""></p>
<h4 id="2-public-branch-누르면-branch도-깃허브에-업데이트되고-url-자동-생성됨">2) public branch 누르면 branch도 깃허브에 업데이트되고 url 자동 생성됨</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/2d804183-2b5f-40f3-b290-40e78f93675f/image.png" alt=""></p>
<h4 id="3-url-주소--https깃허브아이디githubio프로젝트명">3) url 주소 : https://깃허브아이디.github.io/프로젝트명/</h4>
<h4 id="ex-httpssik-kimgithubiotest_page">ex) <a href="https://sik-kim.github.io/test_page/">https://sik-kim.github.io/test_page/</a></h4>
<p><img src="https://images.velog.io/images/sik-kim/post/2b0392d7-c3b5-4bcb-bc91-9086b76118bc/image.png" alt=""></p>
<h1 id="branch-생성-이후-수정하고-업데이트">Branch 생성 이후 수정하고 업데이트</h1>
<h4 id="1-branch를-반드시-master로-설정하고-vsc에서-코드-수정">1) branch를 반드시 master로 설정하고 VSC에서 코드 수정</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/f529839b-b743-41e4-b82a-ccc9a45fad9a/image.png" alt=""></p>
<h4 id="2-master-branch-commit-해줌">2) master branch commit 해줌</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/c7a6b073-8011-4ada-82f3-d60997db3ad5/image.png" alt=""></p>
<h4 id="3-gh-pages로-branch-변경-그럼-master에서-수정했던-hahaha가-안보일것임">3) gh-pages로 branch 변경 (그럼 master에서 수정했던 hahaha가 안보일것임)</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/1db1aa79-a380-49f0-ba0c-59b6d4ce0187/image.png" alt=""></p>
<h4 id="4-메뉴에서-branch---update-from-master-클릭-master의-변경내용을-가져옴">4) 메뉴에서 branch - update from master 클릭 (master의 변경내용을 가져옴)</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/84ffccd0-164d-41db-a6d9-b4d6d5c582ec/image.png" alt=""></p>
<h4 id="5-gh-pages-branch도-commit-해줌깃허브-및-url-업데이트-반영됨">5) gh-pages branch도 commit 해줌(깃허브 및 url 업데이트 반영됨)</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/bbbf2444-daf6-4080-8fd5-a56e19b30384/image.png" alt=""></p>
<h4 id="6-url-접속하면-변경사항-반영된-것-확인변경-반영되기까지-시간-살짝-걸림-그래봐야-1분-안걸림">6) url 접속하면 변경사항 반영된 것 확인(변경 반영되기까지 시간 살짝 걸림. 그래봐야 1분 안걸림)</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/b7b45986-28ff-49ec-91b0-b30ba130fdf7/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[html,css]화면 높이 맞춤]]></title>
            <link>https://velog.io/@sik-kim/htmlcss%ED%99%94%EB%A9%B4-%EB%86%92%EC%9D%B4-%EB%A7%9E%EC%B6%A4</link>
            <guid>https://velog.io/@sik-kim/htmlcss%ED%99%94%EB%A9%B4-%EB%86%92%EC%9D%B4-%EB%A7%9E%EC%B6%A4</guid>
            <pubDate>Fri, 11 Sep 2020 01:47:25 GMT</pubDate>
            <description><![CDATA[<h3 id="1-한줄-가운데-맞춤-line의-height상에서의-가운데-맞춤임">1. 한줄 가운데 맞춤. (line의 height상에서의 가운데 맞춤임)</h3>
<pre><code class="language-html">&lt;body&gt;
    &lt;div class=&quot;div&quot;&gt;
        &lt;div class=&quot;container&quot;&gt;
            &lt;div class=&quot;item&quot;&gt;한줄 작성
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;</code></pre>
<pre><code class="language-css">.div{
    line-height: 200px;
    background-color: coral;
}</code></pre>
<p><img src="https://images.velog.io/images/sik-kim/post/d2a26344-7e58-4a1d-8358-900d630db1be/image.png" alt=""></p>
<h1 id="----------------------------">----------------------------</h1>
<p>height % 지정해서 margin으로 가운데 맞춤.(잘 안쓸듯?)</p>
<pre><code class="language-css"> .items{
     background-color: yellow;
     position: absolute;
     top: 0;
     bottom: 0;
     left: 0;
     right: 0;
     margin: auto;
     height: 20%;
 }</code></pre>
<p> <img src="https://images.velog.io/images/sik-kim/post/a6e29a81-4751-4846-849f-7c132caaa962/image.png" alt=""></p>
<h3 id="2-container-items-화면-가운데-맞춤여러-버전">2. container, items 화면 가운데 맞춤(여러 버전!)</h3>
<pre><code class="language-htmㅣ">&lt;body&gt;
    &lt;div class=&quot;div&quot;&gt;
        &lt;div class=&quot;container&quot;&gt;
            &lt;div class=&quot;item&quot;&gt;한줄 작성&lt;br&gt;한줄 작성&lt;br&gt;한줄 작성
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;</code></pre>
<pre><code class="language-css">.container{
↓ Container는 이동안하고 그대로 있음
background-color: coral;
width: 300px ;
height: 300px;
}


.items{
↓ container안 items div 설정
background-color: yellow;
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
width: 200px;
height: 200px;

display: flex;
justify-content: center;
align-items: center;
}</code></pre>
<p><img src="https://images.velog.io/images/sik-kim/post/5b1114d6-287c-475a-b637-ff2c563e5d38/image.png" alt=""></p>
<h1 id="-----------------------------1">----------------------------</h1>
<pre><code class="language-css">.container{
background-color: coral;
width: 300px ;
height: 300px;
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}


.items{
/* margin-top: -50px; */
background-color: yellow;
width: 200px;
height: 200px;

display: flex;
justify-content: center;
align-items: center;
}</code></pre>
<p><img src="https://images.velog.io/images/sik-kim/post/01ef2966-e934-4aac-b06e-10a25152e81c/image.png" alt=""></p>
<h1 id="-----------------------------2">----------------------------</h1>
<pre><code class="language-css">.container{
background-color: coral;
width: 300px ;
height: 300px;
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}


.items{
/* margin-top: -50px; */
background-color: yellow;
width: 200px;
height: 200px;

position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);

display: flex;
justify-content: center;
align-items: center;
}</code></pre>
<p><img src="https://images.velog.io/images/sik-kim/post/1e893903-8850-4a09-b46c-0fe442ee2ecd/image.png" alt=""></p>
<h1 id="-----------------------------3">----------------------------</h1>
<h3 id="위아래-fixed-잡고-가운데-contents-넣기">위아래 fixed 잡고 가운데 contents 넣기</h3>
<pre><code class="language-html"> &lt;div class=&quot;container&quot;&gt;
        &lt;div class=&quot;topdiv&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;items&quot;&gt;
            &lt;img src=&quot;images/namu.jpg&quot; &gt;
            hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hahahahahahaha&lt;br&gt;hihihihihihihi&lt;br&gt;hehehehehehehe
            &lt;div class=&quot;bottom&quot;&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;</code></pre>
<pre><code class="language-css"> .bottom{
     position: fixed;
     bottom: 0;
     width: 100%;
     height: 300px;
     background-color: grey;
 }
 .topdiv{
    position: fixed;
    top: 0;
    z-index: 999999999999;
    width: 100%;
    height: 300px;
    background-color: blue;
 }

 .items{
     background-color: yellow;
     position: relative;
     display: block;
     top: 50%;
     margin: 300px auto;

 }</code></pre>
<p> <img src="https://images.velog.io/images/sik-kim/post/193d83f8-3ed4-43c0-a572-78eff3f0aa04/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[<p> 태그]]></title>
            <link>https://velog.io/@sik-kim/p-%ED%83%9C%EA%B7%B8</link>
            <guid>https://velog.io/@sik-kim/p-%ED%83%9C%EA%B7%B8</guid>
            <pubDate>Wed, 09 Sep 2020 07:14:28 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-html">&lt;body&gt;
    &lt;p&gt;왼쪽 정렬(기본)&lt;/p&gt;
    &lt;p align=&quot;right&quot;&gt;으른쪽 정렬&lt;/p&gt;
    &lt;p align=&quot;center&quot;&gt;중간 정렬&lt;/p&gt;
    &lt;p align=&quot;justify&quot;&gt;맞춤 정렬&lt;/p&gt;
  &lt;/body&gt;</code></pre>
<p>  <img src="https://images.velog.io/images/sik-kim/post/0c826831-5552-4ece-85a3-94109e73ae85/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[html,css]메뉴바 클릭으로 올리고 내리기]]></title>
            <link>https://velog.io/@sik-kim/htmlcss%EB%A9%94%EB%89%B4%EB%B0%94-%ED%81%B4%EB%A6%AD%EC%9C%BC%EB%A1%9C-%EC%98%AC%EB%A6%AC%EA%B3%A0-%EB%82%B4%EB%A6%AC%EA%B8%B0</link>
            <guid>https://velog.io/@sik-kim/htmlcss%EB%A9%94%EB%89%B4%EB%B0%94-%ED%81%B4%EB%A6%AD%EC%9C%BC%EB%A1%9C-%EC%98%AC%EB%A6%AC%EA%B3%A0-%EB%82%B4%EB%A6%AC%EA%B8%B0</guid>
            <pubDate>Tue, 08 Sep 2020 14:03:59 GMT</pubDate>
            <description><![CDATA[<h2 id="htmlcss만-사용해서-버튼-클릭으로-메뉴창-올리고-내리기">HTML,CSS만 사용해서 버튼 클릭으로 메뉴창 올리고 내리기</h2>
<h3 id="클릭-전">클릭 전</h3>
<p><img src="https://images.velog.io/images/sik-kim/post/85ec8181-65cd-4dfc-8cac-d3f63c5752f7/image.png" alt=""></p>
<h4 id="클릭-후">클릭 후</h4>
<p><img src="https://images.velog.io/images/sik-kim/post/7cd2b8a9-aaa3-4f78-920f-81c3a5607ac4/image.png" alt=""></p>
<pre><code class="language-html">&lt;input type=&quot;checkbox&quot; id=&quot;menuicon&quot;&gt;  //input의 checked시 transition이 동작하는 기능을 활용
      &lt;label for=&quot;menuicon&quot;&gt;  //실제 클릭하게될 label_(
        &lt;span&gt;&lt;/span&gt;  //메뉴바 모양 작대기용
        &lt;span&gt;&lt;/span&gt;  //메뉴바 모양 작대기용
        &lt;span&gt;&lt;/span&gt;  //메뉴바 모양 작대기용
      &lt;/label&gt;</code></pre>
<pre><code class="language-css">.menu {
  background-color: #f6f6f6;
  width: 100%;
  height: 255px;
  margin-top: 0;
  position: fixed;
_  top: -300px;_
  left: 0px;
  z-index: 999;
  transition: 0.5s ease-in-out 0s;
  box-sizing: border-box;
}</code></pre>
<ol>
<li>menu창의 기본 위치를 화면밖으로 설정</li>
</ol>
<pre><code class="language-css">input[id=&quot;menuicon&quot;] {
  display: none;
}</code></pre>
<ol start="2">
<li>input의 checked 기능을 이용하는 것으로 input 박스 자체는 안보이게 설정</li>
</ol>
<pre><code class="language-css">input[id=&quot;menuicon&quot;]** + label {**
  display: block;
  width: 21px;
  height: 21px;
  z-index: 999999;
  position: fixed;
  right: 30px;
  top: 30px;
  cursor: pointer;
}</code></pre>
<pre><code class="language-css">input[id=&quot;menuicon&quot;] + label span {
  display: block;
  position: absolute;
  width: 100%;
  height: 3px;
  border-radius: 30px;
  background-color: #000;
  transition: all 0.4s;
}</code></pre>
<ol start="3">
<li>span으로 bar 모양 만들기</li>
</ol>
<pre><code class="language-css">input[id=&quot;menuicon&quot;] + label span:nth-child(1) {
  top: 0;
}

input[id=&quot;menuicon&quot;] + label span:nth-child(2) {
  top: 50%;
  transform: translateY(-50%);
}

input[id=&quot;menuicon&quot;] + label span:nth-child(3) {
  bottom: 0;
}

input[id=&quot;menuicon&quot;]:checked + label span:nth-child(1) {
  top: 50%;
  transform: translateY(-50%);
  transform: rotate(45deg);
}

input[id=&quot;menuicon&quot;]:checked + label span:nth-child(2) {
  opacity: 0;
}

input[id=&quot;menuicon&quot;]:checked + label span:nth-child(3) {
  top: 50%;
  transform: translateY(50%);
  transform: rotate(-45deg);
}</code></pre>
<ol start="4">
<li>input을 클릭(checked)함과 동시에 transform 발생.
(bar모양에서 X모양으로 변경)</li>
</ol>
<pre><code class="language-css">input[id=&quot;menuicon&quot;]:checked + label + nav {
  top: 0;
}</code></pre>
<ol start="5">
<li>checked시 menu바 위치 이동
여기서 +는 인접요소선택자를 의미. 따라서 html에서 input+label+nav는 나란히 작성되어야 함!</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[css] transition-timing-fuction]]></title>
            <link>https://velog.io/@sik-kim/css-transition-timing-fuction</link>
            <guid>https://velog.io/@sik-kim/css-transition-timing-fuction</guid>
            <pubDate>Mon, 07 Sep 2020 14:22:53 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-css">transition: opacity 1s linear;
transition: width 3s ease-in-out;
transition: box-shadow 5s ease-in-out;
animation: @keyframes명 .5s ease-out</code></pre>
<ul>
<li>linear : 속도 동일</li>
<li>ease : (잠깐)느리게 - 상당히 빠르게 - 느리게</li>
<li>ease-in : 느리게 - 빠르게</li>
<li>ease-out : 빠르게 - 느리게</li>
<li>ease-in-out : 느리게 - 빠르게 - 느리게</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[python print, return]]></title>
            <link>https://velog.io/@sik-kim/python-print-return</link>
            <guid>https://velog.io/@sik-kim/python-print-return</guid>
            <pubDate>Sun, 06 Sep 2020 09:46:26 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-python">def p_plus(a,b):
  print(a+b)     // 5출력(콘솔에)

def r_plus(a,b):
  return a + b   // 9 실제값이 리턴됨

p_result = p_plus(2,3)   //p_plus() 함수는 아무것도 발생안됨. print는 콘솔에 출력할 뿐이지 실제 리턴값은 없음. 따라서 p_result에 넣어줄 값이 없음.
r_result = r_plus(4,5)   // r_plus 함수가 실제로 4+5 해서 9를 리턴해 r_result에 넣어줌

print(p_result)  //None 출력
print(r_result)  //9 출력</code></pre>
<ul>
<li>print : 단순 console 출력용 (허상? 느낌, 연산을 위한게 아니다.)</li>
<li>return : 실제 value를 return 함. 실질적인 연산을 위해선 return 값이 필요함</li>
<li>1개 함수에서 1개 return이 발생하면 그 외는 무시됨(1함수 1리턴)(function이 return값으로 치환되는 개념)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[javascript weather 정보 가져오기(clone)]]></title>
            <link>https://velog.io/@sik-kim/javascript-weather-%EC%A0%95%EB%B3%B4</link>
            <guid>https://velog.io/@sik-kim/javascript-weather-%EC%A0%95%EB%B3%B4</guid>
            <pubDate>Sun, 06 Sep 2020 04:28:05 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-javascript">const API_KEY = &quot;3d12a474c2b6b29a679eb2b098bfe7d7&quot;; //OpenWeatherMap 사이트 로그인 후 API key값 가져옴
// const WEATHER_API =  //fetch 안에 내용 별도로 뺄 수 있음
const COORDS = &quot;coords&quot;;
const weather = document.querySelector(&quot;.js-weather&quot;);


function getWeather(lat, lng) {
  fetch(
    //fetch안에는 가져올 데이터 넣어줌, https:// 입력하기, API_KEY 입력, $빼먹지말기..!
    `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&amp;lon=${lng}&amp;appid=${API_KEY}&amp;units=metric`
  )
    .then(function (response) {
      return response.json(); //여기서 json은 메소드. // then 사용함으로써 fetch 완료되기까지 기다리고 실행. 정보 가져오는데 시간이 좀 걸리니까.
    })
    .then(function (jsonDifferent) {
      console.log(jsonDifferent); //확인용
      const temperature = jsonDifferent.main.temp; //main 하위에 temp 정보 있음
      const place = jsonDifferent.name;

      weather.innerText = `현재 온도: ${temperature}도
       현재 위치: ${place}`; //weather html에 temp,place 값 불러와 입력
      //html에서 class명 weather 있는지 확인. js-weather만 있어서 계속 에러
    });
}


function saveCoords(coordsObj) {
  //coords 저장
  localStorage.setItem(COORDS, JSON.stringify(coordsObj)); //coordsObj(latitude, longitude) 정보값을 string으로 변경해서 LS에 저장
}


function handleGeoSuccess(position) {
  //위치정보 얻었을때 실해되는 함수
  //현재 position을 함수에 저장한다
  const latitude = position.coords.latitude;
  const longitude = position.coords.longitude;
  const coordsObj = {
    latitude, // latitude = latitude 이거랑 같은의미
    longitude, // longitude = longitude 이거랑 같은의미
  };
  saveCoords(coordsObj);
  getWeather(latitude, longitude);

  //   console.log(position);
}


function handleGeoError() {
  //위치 가져오기 error 시 실행되는 함수(팝업창에서 차단하면 실행됨)
  console.log(&quot;Cant Access geo location&quot;);
}


function askForCoords() {
  //실제 position 가져오는거
  navigator.geolocation.getCurrentPosition(handleGeoSuccess, handleGeoError);
}


function loadCoords() {
  //storage에 날씨 load하는 함수
  const loadedCoords = localStorage.getItem(COORDS); //LS의 coords 값 가져오고.
  if (loadedCoords === null) {
    askForCoords(); //LS에 값 없으면 askForCoords 함수 실행
    // 정리: 만약 local storage에 아무것도 없으면 결국 getWeather 함수가 실행 된다 왜냐면,
    // local storage에 아무것도 없으면 askForCoords 함수가 실행되고,
    // 이 함수 안에서 정상적인 위치정보를 가져오게 되면 handleGeoSuccess가 실행 되는데, 이안에서 API가 최종적으로 호출되기 때문.
  } else {
    const parsedCoords = JSON.parse(loadedCoords);
    getWeather(parsedCoords.latitude, parsedCoords.longitude);
    // = JSON.parse(loadedCoords); //JSON.parse : string -&gt; object
    // console.log(parsedCoords); //확인용
  }
}


function init() {
  loadCoords();
}

init();

//network 패널은 우리가 request한 내용, 그에 대한 response 내용을 보여줌</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[javascript text 입력(clone)]]></title>
            <link>https://velog.io/@sik-kim/javascript-text-%EC%9E%85%EB%A0%A5</link>
            <guid>https://velog.io/@sik-kim/javascript-text-%EC%9E%85%EB%A0%A5</guid>
            <pubDate>Sun, 06 Sep 2020 04:23:13 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-javascript">const form = document.querySelector(&quot;.js-form&quot;), //제출
  input = form.querySelector(&quot;input&quot;), //입력
  greeting = document.querySelector(&quot;.js-greetings&quot;); //제출 후


const USER_LS = &quot;currentUser&quot;, //Application에 저장된 현재유저
  SHOWING_CN = &quot;showing&quot;; //(class name) 이걸로 display 조정


function saveName(text) {
  localStorage.setItem(USER_LS, text);
}
//saveName함수가 application에 입력값을 저장하게 해줌. (새로고침해도 값 그대로 저장됨)


function handleSubmit(event) {
  //event 발생시
  event.preventDefault(); //event가 document까지 올라가는 것? 방지(기본기능 저지)
  const currentValue = input.value;
  paintGreeting(currentValue);
  saveName(currentValue);
}
//event 금지. 엔터쳐도 text 그대로 있음
// value가 의미하는게 뭐지


function askForName() {
  form.classList.add(SHOWING_CN);
  //form의 classList에 SHOWING_CN(showing)을 추가한다.
  form.addEventListener(&quot;submit&quot;, handleSubmit);
} //submit(제출) 했을떄 handleSubmit 함수 실행


function paintGreeting(text) {
  //paint함수
  //갈호안 text는 argument(인수)
  //argument 관련 tip : 함수 안에 인수는 3개 이하가 좋다.
  // 넘어갈꺼같으면 복잡하니 configuration object 사용하는게 좋다.
  //인수에 boolean은 지양. 그런상황이면 if, else if 따로따로 함수를 만든다. 1개 함수는 1가지 기능만!
  form.classList.remove(SHOWING_CN);
  greeting.classList.add(SHOWING_CN);
  greeting.innerText = `Hello! ${text}`;
}


function loadName() {
  //local storage에서 username을 가져오는 함수임
  const currentUser = localStorage.getItem(USER_LS); //현재 LS의 USER_LS에 저장된 값을 currentUser로 넣어라.
  if (currentUser === null) {
    //만약 값이 null이면?
    askForName(); //이름 넣는 함수 실행
  } else {
    // 값이 있으면 (이건 입력하고 새로고침할떄만 해당되는 경우군)
    paintGreeting(currentUser); //paint함수 실행
  }
}


function init() {
  loadName();
}
init();

//local storage는 urls을 기초로 동작함. 예를들면 페북이 거기에 넣은 ls를 가져올수는 없음.</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[javascript realtime 생성(clone)]]></title>
            <link>https://velog.io/@sik-kim/javascript-realtime-%EC%8B%9C%EA%B3%84-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@sik-kim/javascript-realtime-%EC%8B%9C%EA%B3%84-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Sun, 06 Sep 2020 04:21:24 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-javascript">const clockContainer = document.querySelector(&quot;.js-clock&quot;), // 클래스명 앞에는 .을 찍는다??
  clockTitle = clockContainer.querySelector(&quot;h1&quot;);
//querySelector는 element의 하위(자식)요소(함수)를 찾아줌
// console.log(clockContainer);
// console.log(clockTitle);


function getTime() {  //시간 가져오기
  const date = new Date();
  const minutes = date.getMinutes();
  const hours = date.getHours();
  const seconds = date.getSeconds();
  clockTitle.innerText = `${hours &lt; 10 ? `0${hours}` : hours}:${
    minutes &lt; 10 ? `0${minutes}` : minutes
  }:${seconds &lt; 10 ? `0${seconds}` : seconds}
  `;
}
//   const seconds = date.getSeconds();


function init() {
  getTime();
  setInterval(getTime, 1000);
} // 함수는 최대한 나눠서 해결!!
init();


/*
function sayHi(){console.log(&quot;say, Hi&quot;)
}
setInterval(sayHi,1000)
//첫번째 인자: 함수, 두번째 인자: 실행할 시간 간격(milliseconds)
*/</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[javascript background 사진 넣기(clone)]]></title>
            <link>https://velog.io/@sik-kim/javascript-background-%EC%82%AC%EC%A7%84-%EB%84%A3%EA%B8%B0</link>
            <guid>https://velog.io/@sik-kim/javascript-background-%EC%82%AC%EC%A7%84-%EB%84%A3%EA%B8%B0</guid>
            <pubDate>Sun, 06 Sep 2020 04:11:09 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-javascript">const body = document.querySelector(&quot;body&quot;);


const IMG_NUMBER = 5;

/* function handleImgLoad() {
  console.log(&quot;finished loading&quot;);
} &lt;API였으면 필요&gt; */


function paintImage(imgNumber) {
  //이미지 실제로 body에 적용
  //이미지
  const image = new Image();
  image.src = `images/${imgNumber + 1}.jpg`;
  /*image.addEventListener(&quot;loadend&quot;, handleImgLoad); API면 필요*/
  image.classList.add(&quot;bgImage&quot;);
  body.appendChild(image); //body 안에 image
}


function genRandom() {
  //랜덤 수 도출하는 함수 0~4
  const number = Math.floor(Math.random() * IMG_NUMBER);
  return number;
}


function init() {
  //genRandom함수에서 랜덤값 도출해서 PaintImage 함수 실행
  const randomNumber = genRandom();
  paintImage(randomNumber);
}
init();

// Math.random() javascript 랜덤수학
// Math.ceil() 올림
// Math.floor() 내림</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Geolocation.getCurrentPosition()]]></title>
            <link>https://velog.io/@sik-kim/Geolocation.getCurrentPosition</link>
            <guid>https://velog.io/@sik-kim/Geolocation.getCurrentPosition</guid>
            <pubDate>Sat, 05 Sep 2020 23:10:48 GMT</pubDate>
            <description><![CDATA[<p><code>Geolocation.getCurrentPosition()</code>
 : 이 메서드는 사용하는 하드웨어의 현재 위치를 불러옴(position 오브젝트 형으로 변환)
 : 현재 위치 정보를 비동기로 확인 후 결과 받아서 successCallback을 한번만 호출함
 : 에러 발생시 에러 정보 받아 errorCallback 호출</p>
<pre><code class="language-javascript"> function handleGeoSuccess(position) {
  const latitude = position.coords.latitude;
  const longitude = position.coords.longitude;
  const coordsObj = {
    latitude, // latitude = latitude 이거랑 같은의미
    longitude, // longitude = longitude 이거랑 같은의미
  };
  saveCoords(coordsObj);
  //   console.log(position);
}

 function handleGeoError() {
  console.log(&quot;Cant Access geo location&quot;);
}

 function askForCoords() {
  navigator.geolocation.getCurrentPosition(
    handleGeoSuccess, //위치 정보 얻었을떄 실행되는 함수
    handleGeoError);  //위치 정보 error시 실행되는 함수
}
//options도 함수로 추가 가능 (위치 정보에 대한 각종 매개 변수를 포함하는 자바스크립트 객체 지정)</code></pre>
<p><strong><a href="https://openweathermap.org/current">OpenWeather 사이트 API call</a></strong>
<img src="https://images.velog.io/images/sik-kim/post/2938c089-1f1e-4174-8de8-ffef48573626/image.png" alt=""></p>
<pre><code class="language-javascript">function getWeather(lat, lng){
    fetch(`https://api.openweathermap.org/data/2.5/weather?lat={lat}&amp;lon={lng}&amp;appid=${API_KEY}`); //fetch안에는 가져올 데이터 넣어줌, https:// 입력하기, API_KEY 입력
}</code></pre>
<p><strong>OpenWeather Units formant</strong>
<img src="https://images.velog.io/images/sik-kim/post/354d7b83-6c4c-4f0f-9dfc-84d3fe020786/image.png" alt=""></p>
<pre><code class="language-javascript">function getWeather(lat, lng) {
  fetch(
    `https://api.openweathermap.org/data/2.5/weather?lat={lat}&amp;lon={lng}&amp;appid=${API_KEY}&amp;units=metric`</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[querySelector 사용문]]></title>
            <link>https://velog.io/@sik-kim/querySelector-%EC%82%AC%EC%9A%A9%EB%AC%B8</link>
            <guid>https://velog.io/@sik-kim/querySelector-%EC%82%AC%EC%9A%A9%EB%AC%B8</guid>
            <pubDate>Sat, 05 Sep 2020 14:54:22 GMT</pubDate>
            <description><![CDATA[<p><strong>querySelector 사용문</strong></p>
<pre><code class="language-javascript">const clockContainer = document.querySelector(&quot;.js-clock&quot;), // 클래스명 앞에 .은 왜찍을까????
  clockTitle = clockContainer.querySelector(&quot;h1&quot;);

console.log(clockContainer);
console.log(clockTitle);</code></pre>
<p><strong>console 실행값</strong>
<img src="https://images.velog.io/images/sik-kim/post/19f74670-0ec6-43b4-94ad-3366a5cd074f/image.png" alt=""></p>
<p><strong>querySelector 기본형태</strong>
<code>element = baseElement.querySelector(selectors);</code></p>
<ul>
<li>querySelector의 Return값은 baseElement의 하위(자식) Element를 가져다줌.
(element가 리턴된 값임)</li>
<li>보통 html의 클래스 이름 및 태그를 가져오기 위해 많이 쓴다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[javascript to do list 만들기(clone)]]></title>
            <link>https://velog.io/@sik-kim/javascript</link>
            <guid>https://velog.io/@sik-kim/javascript</guid>
            <pubDate>Sat, 05 Sep 2020 04:20:26 GMT</pubDate>
            <description><![CDATA[<p>대혼란~~😱😱😱</p>
<pre><code class="language-javascript">
const toDoForm = document.querySelector(&quot;.js-toDoForm&quot;),
  toDoInput = toDoForm.querySelector(&quot;input&quot;),
  toDoList = document.querySelector(&quot;.js-toDoList&quot;);
//html에서 가져오기


const TODOS_LS = &quot;toDos&quot;; //해야할일 상수 설정


/*
function filterFn(toDo) {
  //forEach에서 function 실행하는 것처럼 각각의 item과 같이 실행됨
  return toDo.id === 2;
  //filter는 array의 모든 아이템을 통해 함수를 실행하고 true인 아이템들만 가지고 새로운 array를 만듬(id 가 1일때)
}
밑에 filter() 안으로 함수 넣음. 밖으로 안빼고
*/


let toDos = []; //toDos 를 입력할 때 마다 toDos Array에 입력됨


function deleteToDo(event) {
  //ToDo 삭제 함수
  const btn = event.target; //target당한 버튼?
  const li = btn.parentNode; //btn의 부모 li 선택
  toDoList.removeChild(li); //toDoList에서 li삭제?
  //   console.log(event.target.parentNode);
  const cleanToDos = toDos.filter(function (toDo) {
    return toDo.id !== parseInt(li.id);
    //toDo id는 숫자, li id는 string 임... 초 헷갈..
    //li를 parseInt 써서 string에서 number로 변경함.
  });
  //filterFn함수에서 체크된 아이템의 array를 주는 역할
  //filterFn함수에 id===1만 있으면 id 1인 아이템만 가져온다.
  console.log(cleanToDos);
  //콘솔에 cleanToDos(새로운 array) 3개, toDos(예전 array)는 4개
  toDos = cleanToDos; //toDos let으로 정의 유의
  saveToDos(); //toDos를 저장할꺼임(즉 새로고침해도 다시 html에서 toDos 생기지 안음)
}


function saveToDos() {
  //여기 이 toDos를 가져와서 로컬(local storage)에 저장하는 역할.
  localStorage.setItem(TODOS_LS, JSON.stringify(toDos));
}
// javascript는 모든걸 string으로 저장한다. 예를들어 boolean의 true,false 저장 못 함. 그래서 JSON.stringify을 사용함.
//JSON.stringify는 자바스크립트 object를 string으로 바꿔줌
//JSON = JavaScript Object Notation
//JSON은 데이터를 전달할 때 자바스크립트가 그걸 다룰 수 있도록 object로 바꿔주는 역할
// object &lt;--&gt; string


function paintToDo(text) {
  //입력한 값 생성하는 함수(핵심!)
  const li = document.createElement(&quot;li&quot;); //&lt;li&gt; 생성(html 입력 안하고도 생성 된다!)
  const delBtn = document.createElement(&quot;button&quot;); //&lt;button&gt; 생성
  const span = document.createElement(&quot;span&quot;); //&lt;span&gt; 생성
  const newId = toDos.length + 1; //newId 상수는 toDos(할일 입력한거) 총개수 + 1
  delBtn.innerText = &quot;❌&quot;;
  delBtn.addEventListener(&quot;click&quot;, deleteToDo);
  span.innerText = text; //&lt;span&gt; 내용에 text 삽입
  li.appendChild(delBtn); //li 밑에 delBtn
  li.appendChild(span); //li 밑에 span
  li.id = newId; //li에도 id값 입력
  toDoList.appendChild(li); //toDoList(js-toDoList) 밑에 li
  const toDoObj = {
    //array에 입력값 넣기위한 함수.
    text: text, //text에는 text(실제입력한값) 입력
    id: newId, // id에는 newId(toDos 수량+1) 입력
    //toDos array에 왜 이런식으로 저장하냐? 그건 localstorage에도 같이 저장해줘야 하기 떄문임. 아직 뭔말인지 잘 이해안감.
  };
  toDos.push(toDoObj); //toDos Array에다가 toDoObj(입력한 값들 element)을 넣음
  saveToDos(); //입력한값 localStorage에 저장. push 다음에 와야함.
}


function handleSubmit(event) {
  //입력하는 함수
  event.preventDefault();
  const currentValue = toDoInput.value; //currentValue 상수를 입력하는 값으로 지정
  paintToDo(currentValue);
  toDoInput.value = &quot;&quot;; //입력 후 입력칸 값 제거하기.
}
// function something(toDo) {
//   console.log(toDo.text);
// }
// forEach 안에 함수 이렇게 분리시켜도 되긴함.


function loadToDos() {
  const loadedToDos = localStorage.getItem(TODOS_LS); //해야할일 상수 설정
  if (loadedToDos !== null) {
    // console.log(loadedToDos); //JSON.parse 하기 전(String)
    const parsedToDos = JSON.parse(loadedToDos);
    // console.log(parsedToDos); //JSON.parse 변환(element)
    parsedToDos.forEach(function (toDo) {
      paintToDo(toDo.text); //각각의 toDo 요소에 대해서 paintToDo 함수가 적용되는거지
    });
    //localstorage에 있는 내용을 자동으로 paintToDo함수 적용되게 해줌.(원래 새로고침하면 LS에는 남아있으나 화면에선 사라졌었음)

    // forEach는 기본적으로 함수를 실행하는데 array에 담겨있는 것들 각각에 한번씩 함수를 실행시켜줌.
    // 다른거처럼 만들어논 함수를 호출하는게 아니라 안에다 바로 만드는거지
    //parsedToDos array에 있는 각각의 element에 지금 만들 함수를 적용함. 그 각각을 toDo로 칭할거고.
  }
}


function init() {
  loadToDos(); //loadToDos 함수 실행
  toDoForm.addEventListener(&quot;submit&quot;, handleSubmit); //submit event실행시 handleSubmit 함수 실행
}


init();  //실행

//JSON은 javascript의 object를 string으로 바꿔준다.
//데이터를 전달할 때 javascript가 그걸 다룰 수 있도록 object를 바꿔주는 것

//filter, forEach 중요. list에 있는 모든 item을 위한 함수 실행시킴


function loadToDos() {
  const loadedToDos = localStorage.getItem(TODOS_LS); //해야할일 상수 설정
  if (loadedToDos !== null) {
    console.log(loadedToDos);  //JSON.parse 하기 전(String)
    const parsedToDos = JSON.parse(loadedToDos); (string -&gt; element 변환)
    console.log(parsedToDos); //JSON.parse 변환(element)
  }
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[JavaScript 문법(practice)]]></title>
            <link>https://velog.io/@sik-kim/JavaScript-%EB%AC%B8%EB%B2%95-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@sik-kim/JavaScript-%EB%AC%B8%EB%B2%95-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Fri, 04 Sep 2020 11:52:36 GMT</pubDate>
            <description><![CDATA[<p>javascript 문법 공부 1일차..
모든게 혼란😱
개념들을 알듯하면서 모든게 모호하다. (모른다는 소리)</p>
<p>이런 날것이라도 꾸준하게 올리다보면 점점 정교해지지 않을까...
훗날을 기약하며..</p>
<pre><code class="language-javascript">//console.log, alert
console.log(&quot;Hello world!&quot;);
alert(&quot;Im working Im beautiful language. It worth it!!&quot;);



//let, const
let a; // a 변수 생성
a = 221; // a 변수 초기화
let b = a - 15; // b 변수 생성
console.log(b);
// let은 변수 생성, const 상수 생성
일반적으로 const를 많이 쓴다.

 String
const name = &quot;jeongsik kim&quot;;
 console.log(name);

 boolean
const c = true;
console.log(c);

 float
const d = 55.1;
console.log(d);

 array   //array는 []사용해서 여러 값을 배열함(여러 타입 혼합 가능)
const daysOfWeek = [
  &quot;mon&quot;,
  &quot;tue&quot;,
  &quot;wed&quot;,
  &quot;thur&quot;,
  &quot;fri&quot;,
  &quot;sat&quot;,
  &quot;sun&quot;,
  true,
  false,
  4,
  5,
  45,
  123,
];
console.log(daysOfWeek);
console.log(daysOfWeek[3]); //배열 n번째 값 출력하기



// object
const sikInfo = {
  name: &quot;jeong sik&quot;,
  age: 32,
  gender: &quot;male&quot;,
  isHandsome: true,
  favMovies: [&quot;Along the gods&quot;, &quot;LOTR&quot;, &quot;Iron man&quot;],
  favFood: [
    {
      name: &quot;kimchi&quot;,
      fatty: false,
    },
    {
      name: &quot;Cheese burger&quot;,
      fatty: true,
    },
  ],
}; //Object 내 array

console.log(sikInfo);
console.log(sikInfo.favMovies[0]);
console.log(sikInfo.favFood[1]);
console.log(sikInfo.favFood[1].name);
//console이 Object, log가 key?
//이경우에는 log가 함수 function



// function
function sayHello() {   //sayHello라는 함수 생성
  console.log(&quot;Hello!&quot;);  //함수가 포함한 내용으로 &quot;Hello&quot;를 출력하지
}
sayHello();

function sayHello(name, age) {
  //name,age가 argument임(함수안의 값?)
  console.log(&quot;Hello~ My name is&quot;, name, &quot;I am&quot;, age, &quot;years old.&quot;, age);
}
sayHello(&quot;Mike&quot;, 20);

function sayHi(name, age) {
  console.log(&quot;Hi &quot; + name + &quot; How old are you? I am &quot; + age + age);
}
sayHi(&quot;Mike&quot;, 20);

function sayHello2(name, age) {
  return `Hello ${name}. I am ${age} years old.`;
}
const greetTomas = sayHello2(&quot;Tomas&quot;, 50);
console.log(greetTomas);

const calculator = {
  plus: function (a, b) {
    return a + b;
  },
  minus: function (a, b) {
    return a - b;
  },
  divide: function (a, b) {
    return a / b;
  },
  remainder: function (a, b) {
    return a % b;
  },
  multiple: function (a, b) {
    return a * b;
  },
  power: function (a, b) {
    return a ** b;
  },
};
const plus = calculator.plus(7, 4);
const minus = calculator.minus(7, 4);
const divide = calculator.divide(11, 5);
const rema = calculator.remainder(11, 5);
const mul = calculator.multiple(3, 6);
const pow = calculator.power(2, 10);
console.log(plus);
console.log(minus);
console.log(divide);
console.log(rema);
console.log(mul);
console.log(pow);



// DOM (dom 개념 어려움..)
const title = document.getElementById(&quot;title&quot;); //모든 title이라는 Object에 적용된다.
title.innerHTML = &quot;Hi! From JS. wow&quot;;
title.style.color = &quot;red&quot;;
// console.dir(title);
console.dir(document); //document가 뭐하는앤지 모르겠음;; 위에꺼랑 머가 다른지.
document.title = &quot;I own you now!&quot;;
//document가 html 문서 자체를 말하는건가?
title.style.backgroundColor = &quot;yellow&quot;;

//암튼 javascript 파일에서 html을 조정할 수 있음. html, css 대신 js 파일에서 할 수 있다는 얘기.

//그러나 js는 html, css 보강하기 위해 있는게 아니다.

//사실 js는 이벤트에 반응하기 만들어졌음.
//이벤트란거는 웹사이트에서 발생하는 것. 가령 click, resize, submit input before clsing printing 등등 (사용자가 행함으로 발생하는 것?) 


아래부턴 이벤트 내용


const title = document.querySelector(&quot;#title&quot;);

function handleClick() {
  title.style.color = &quot;blue&quot;;
}
title.addEventListener(&quot;click&quot;, handleClick);
// 클릭(이벤트) 발생하면 &quot;title&quot;이 파란색 되는 함수.
//() 붙이고 안붙이고 중요. 붙이면 바로 실행(이벤트 발생도 안했는데!) 그래서 안붙여야됨



// if문 활용
if (10 &lt; 5) {
  console.log(&quot;hi&quot;);
} else if (10 === 11) {
  console.log(&quot;ho&quot;);
} else {
  console.log(&quot;ha!&quot;);
}

const age = prompt(&quot;How old are you?&quot;); //prompt 요즘은 거의 안씀. 옛날 JS임
// console.log(age);
if (age &gt;= 18 &amp;&amp; age &lt;= 21) {
  console.log(&quot;you can drink but you should not&quot;);
} else if (age &gt; 21) {
  console.log(&quot;you can drink&quot;);
} else {
  console.log(&quot;you are too young. you cannot drink&quot;);
}



//함수로 글자색 바꾸기
const title = document.querySelector(&quot;#title&quot;);

const BASE_COLOR = &quot;rgb(52, 73, 94)&quot;; //rgb는 색깔 범위
const OTHER_COLOR = &quot;#7f8c8d&quot;;

function handleClick() {
  const currentColor = title.style.color;
  if (currentColor === BASE_COLOR) {
    title.style.color = OTHER_COLOR;
  } else {
    title.style.color = BASE_COLOR;
  }
}
// handleClick 함수
// 1. currentColor라는 상수는 title의 현재 색깔
// 2. 현재 BASE 색이면 OTHER로 바꾸고 OTHER면 BASE로 바꾸는 기능
// 즉 handleClick은 색깔을 번갈아가며 바꾸는 기능 제공
function init() {
  title.style.color = BASE_COLOR;
  title.addEventListener(&quot;mouseenter&quot;, handleClick); //&quot;click&quot;도 있음
}
//init 함수
// 1. title.style.color 초기색은 BASE_COLOR로 설정
// 2. &quot;mouseenter&quot;가 발생시 handleClick 함수를 실행시켜라.
// 즉 init 함수는 초기값 설정 및 이벤트 설정하는 기능 제공
init();  //init 함수 실행



// classList 사용
//class 추가/삭제에 따라 css 속성 적용하기
const title = document.querySelector(&quot;#title&quot;);
// querySelector기능이 뭔지? #title? 개념 잘 잘모르겠음

const CLICKED_CLASS = &quot;clicked&quot;;
// CLICKED_CLASS 이름의 상수에 &quot;clicked&quot;이라는 클래스 넣음
function handleClick() {
  const currentClass = title.className;
  if (currentClass !== CLICKED_CLASS) {
    // title.className = CLICKED_CLASS;
    // --- class 변화 : btn -&gt; clicked
    title.classList.add(CLICKED_CLASS);
    // --- class변화 : btn -&gt; btn clicked
    //이렇게 하면 cursor가 여전히 있음. class에 btn은 계쏙 유지되니까. 검사-elements에서 확인가능.
  } else {
    // title.className = &quot;&quot;;
    title.classList.remove(CLICKED_CLASS);
    //여기서 다시 돌아가진 않음. 왜냐면 else 조건이 안되거든. currentClass는 clicked가 아니라 btn clicked 이니까. (그래서 다시 돌아가는 것까지 하려면 if 조건을 바꿔야함. contains라는 객체를 사용해서! 복잡하니 그건 밑으로 다시 해야겠다.)
  }
}
// handleClick이란 함수 생성.
// currentClass 상수는 title class의 className임
// currentClass의 class name이 CLICKED_CLASE인 &quot;clicked&quot;로 clsss name이 됐다가 &quot;&quot; 없어졌다가 반복됨

function init() {
  title.addEventListener(&quot;click&quot;, handleClick);
}
init();
//init함수는 클릭하면 handleClick 함수 실행하는 기능

//js이용해서 그냥 클래스 이름만 바꾸는 거지
//color가 뭔지 css가 뭔지 등등 아무것도 신경쓰지 않도록!!

//classList?? 이건 method가 있어서 이걸사용해서 내가 쓰고 싶은 함수를 쓸수있따?




// contains 사용
// class name 변경 후 처음 class name으로 되돌아오는 거
const title = document.querySelector(&quot;#title&quot;);
const CLICKED_CLASS = &quot;clicked&quot;;

function handleClick() {
  const hasClass = title.classList.contains(CLICKED_CLASS); //title 클래스이름에 clicked가 있냐?
  if (!hasClass) {
    //hasClass가 아니냐?
    title.classList.add(CLICKED_CLASS);
  } else {
    title.classList.remove(CLICKED_CLASS);
  }
}

function init() {
  title.addEventListener(&quot;click&quot;, handleClick);
}
init();
//그러나 이것도 복잡한듯? 그래서 더 쉽게하려면? 사실 일반적으로 간단한 toggle을 사용. 위에까지는 원리를 이해하기 위한 과정.




//toggle 사용 (개발자는 게을러서 간단한걸 좋아하지)
const title = document.querySelector(&quot;#title&quot;);
const CLICKED_CLASS = &quot;clicked&quot;;

function handleClick() {
 title.classList.toggle(CLICKED_CLASS);
 //toggle은 안에 있는 값들을 체크함. class가 있으면 add, 없으면 remove

function init() {
  title.addEventListener(&quot;click&quot;, handleClick);
}
init();</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[velog 블로그 개설!]]></title>
            <link>https://velog.io/@sik-kim/velog-%EB%B8%94%EB%A1%9C%EA%B7%B8-%EA%B0%9C%EC%84%A4</link>
            <guid>https://velog.io/@sik-kim/velog-%EB%B8%94%EB%A1%9C%EA%B7%B8-%EA%B0%9C%EC%84%A4</guid>
            <pubDate>Wed, 02 Sep 2020 02:12:16 GMT</pubDate>
            <description><![CDATA[<p>심플하고 깔끔해서 좋다.
무엇보다 빨라서 좋음(워드프레스는 무슨..ㅠ)</p>
<p>이제 시작, 글 많이 써야지.</p>
]]></description>
        </item>
    </channel>
</rss>