<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>haedaal_94.log</title>
        <link>https://velog.io/</link>
        <description>해달 귀엽다.</description>
        <lastBuildDate>Mon, 11 Sep 2023 09:07:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>haedaal_94.log</title>
            <url>https://images.velog.io/images/haedaal_94/profile/79b1277e-159a-4b05-a07b-5263c9208940/Enhydra_lutris_face.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. haedaal_94.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/haedaal_94" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Obsidian] Vim Insert 한국어 호환 세팅하기. (Mac OS)]]></title>
            <link>https://velog.io/@haedaal_94/Obsidian-Vim-Insert-%ED%95%9C%EA%B5%AD%EC%96%B4-%ED%98%B8%ED%99%98-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0.-Mac-OS</link>
            <guid>https://velog.io/@haedaal_94/Obsidian-Vim-Insert-%ED%95%9C%EA%B5%AD%EC%96%B4-%ED%98%B8%ED%99%98-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0.-Mac-OS</guid>
            <pubDate>Mon, 11 Sep 2023 09:07:49 GMT</pubDate>
            <description><![CDATA[<h2 id="issue">Issue</h2>
<p>Obsidian에서 Vim 모드를 사용할때,
Insert 모드에서 한글을 사용하다 Normal 모드로 전환하면 명령어가 제대로 동작하지 않는 이슈가 있다.
이러한 이슈는 vscode에서 vim을 사용할때 일어나는 문제와 비슷하다.
문제 해결 방법도 유사하다.</p>
<blockquote>
<p>이 문서는 Mac OS를 타겟으로 작성했습니다.</p>
</blockquote>
<h3 id="1-im-select-설치">1. <code>im-select</code> 설치</h3>
<pre><code class="language-bash">brew tap daipeihust/tap
brew install im-select</code></pre>
<p>위 명령어를 terminal에 입력하여 설치합니다.</p>
<pre><code class="language-bash">which im-select</code></pre>
<p>which 명령어를 통해 im-select의 설치 경로를 파악합니다.
저의 경우 <code>/opt/homebrew/bin/im-select</code> 였습니다.</p>
<blockquote>
<p>which로 파악한  경로를 잘 기억해둡니다.</p>
</blockquote>
<h3 id="2-vim-plugin을-활성화">2. Vim Plugin을 활성화</h3>
<p><img src="https://velog.velcdn.com/images/haedaal_94/post/160c5ca8-51cd-4779-b056-54c61777e292/image.png" alt=""></p>
<h3 id="3-obsidian-plugin-vim-im-control-설치">3. Obsidian Plugin <code>Vim IM Control</code> 설치</h3>
<p>Community Plugins에서 <a href="https://github.com/hideakitai/obsidian-vim-im-control">vim-im-select-obsidian</a>를 찾아 설치합니다.</p>
<h3 id="4-완료">4. 완료</h3>
<p>Obsidian을 종료 후 다시 실행해서 잘 되는지 확인해보자!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flutter :: BuildContext 무엇인가?]]></title>
            <link>https://velog.io/@haedaal_94/Flutter-BuildContext-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</link>
            <guid>https://velog.io/@haedaal_94/Flutter-BuildContext-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</guid>
            <pubDate>Tue, 27 Jul 2021 12:27:04 GMT</pubDate>
            <description><![CDATA[<p>Flutter 를 사용하게 되면 굉장히 자주 마주치는 것이 하나 있다.
그것은 바로 ...</p>
<h2 id="buildcontext">BuildContext</h2>
<p>처음에는 개발하기 바빠서 이것에 대한 정확한 개념도 모른체 라이브러리, api 설명서에 나와있는 그대로 따라쓰기만 했다.
그러나 개발하면 개발할수록 이게 굉장히 중요한것 같다는 느낌을 받았고... buildcontext에 대해 제대로 이해하지 못하고 넘어간다면
Flutter 전문가? 가 되기 위해 나아가는 과정에서 기초 공사부터 부실하게 되는것이라는 생각이 들었다.</p>
<p>그래서 이 글을 통해 BuildContext가 무엇인지 정리하는 시간을 갖고자 한다.</p>
<hr>
<h3 id="그래서-buildcontext가-뭐죵">그래서 BuildContext가 뭐죵?</h3>
<p>먼저 겉핥기 수준으로 알아보자. </p>
<p>Flutter 공식 문서를 통해 정의를 살펴보면</p>
<blockquote>
<p>A handle to the location of a widget in the widget tree.
위젯 트리에서 위젯의 위치를 다루는 것.</p>
</blockquote>
<p>라고 한다.
...
...
정리 끝.</p>
<p>이라 하면 열받는다.</p>
<p>이걸로는 쉽게 이해가 되지 않는다.</p>
<p>먼저 알아야 할 것은 Flutter 안에 모든 Widget은 내부에 
build method를 가지고 있다는 것이다.
그리고 그 build method 의 타입은 Widget이고 인자 값으로 BuildContext를 가진다.</p>
<pre><code class="language-dart">Widget build(BuildContext context){
  // example ...
  return Scaffold(...) &lt;- widget
}</code></pre>
<p>build 메소드를 통해서 위젯을 반환하고 그 안에 buildcontext를 집어넣는다. </p>
<p>그 다음 중요한 buildcontext의 두번째 개념이 등장한다.</p>
<blockquote>
<p>Each widget has its own BuildContext, which becomes the parent of the widget returned by the StatelessWidget.build or State.build function
모든 위젯은 자신만의 BuildContext를 가지고 있고, 그것은 StatelessWidget.build or State.build에 의해 반환되는 위젯의 부모가 된다. </p>
</blockquote>
<p>이것이 의미하는것이 무엇인지 예제를 통해 보자.</p>
<pre><code class="language-dart">class MainPage extends stateless{
  @override
  Widget build(BuildContext context){
    return Scaffold(
      appBar: ...(),
      body : Center(
          child: RaisedButton(
          onPress : () {
          // 여기서 Snackbar 라던가 dialog를 다뤄야한다
          // 면 Scaffold의 context 가 필요하다. 그래서 일반
          // 적으로 생각하면 MainPage의 build 에서 넘어온 
          // context 를 접근하면 된다고 생각하기 쉽다.
          // 그러나 그렇게 하게 되면 
          // Scaffold.of() called with a context
          // that does not contain a scaffold. 와 같은 
          // 에러 메시지를 보게 될 것이다.

          },
          child: Text(&#39;Press&#39;),
        )
      )
    )
  }

}
</code></pre>
<p>왜 위 예제와 같은 상황이 벌어지는 것일까?
그것은 buildcontext의 두번째 개념을 생각해보면 해결이 된다.
두번째 개념을 통해 보면 build 메소드의 인자값에 있는 context는 return 되는 scaffold 의 부모의 context이다.</p>
<p>부모의 context에는 부모 위젯까지의 정보 밖에 없다.
즉 build 메소드를 통해 return 되는 위젯의 정보는 없는 것. </p>
<p>그렇기 때문에 이 build 메소드의 context에서 scaffold의 대한 context 정보를 찾지 못하는 것이다.</p>
<p>그래서 예제의 에러가 발생하는 것. 이것을 해결하기 위해서는 (무조건 새로운 context를 만들어 사용하는) builder 위젯을 사용하거나 scaffold의 context 정보를 받기 위해 별개로 분리해서 자식 위젯을 만들어 보내는 방법이 있다.</p>
<hr>
<h3 id="일차적으로-정리하자면">일차적으로 정리하자면...</h3>
<ul>
<li>BuildContext는 위젯의 정보를 가지고 있는것이며,</li>
<li>build 메소드에 의해 전해지는 context는 부모 위젯까지의 정보만을 가지고 있다.</li>
</ul>
<p>이번에는 간단하게 여기까지만 정리하고, 
다음 포스팅에는 BuildContext가 뭔지 조금 더 자세히 살펴보겠다.
그와 더불어 widget tree, element tree, render tree 까지..!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[블로그.. 계속 실패하는 이유..]]></title>
            <link>https://velog.io/@haedaal_94/%EB%B8%94%EB%A1%9C%EA%B7%B8..-%EA%B3%84%EC%86%8D-%EC%8B%A4%ED%8C%A8%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0</link>
            <guid>https://velog.io/@haedaal_94/%EB%B8%94%EB%A1%9C%EA%B7%B8..-%EA%B3%84%EC%86%8D-%EC%8B%A4%ED%8C%A8%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0</guid>
            <pubDate>Wed, 14 Jul 2021 15:16:45 GMT</pubDate>
            <description><![CDATA[<p>기술 블로그를 작성하고자 하는 수많은 개발자들이 있다.
그러나 대다수가 그것을 실패한다.(저 포함 🥲)
왜 실패하는가 그것을 생각해보았다.</p>
<p>일단 나의 경우.
처음부터 너무 거창한 것을 생각하는것 같다.</p>
<p>무슨 대단한 글을 쓰겠다고...
대단한 실력을 가진것도 아닌데... </p>
<p>머릿속에는 이미 코드 컴플리트를 잇는 대작을 집필하고 있다.. ㅋㅋ
그러다보니 그것을 행동으로 옮기자니 너무 두렵다.</p>
<p>그래서 생각한것은.. 지나가는 갓난 아이라도 아는거라도 글로 써보자는 것이다. </p>
<p>설사 그게 hello world. 한줄 찍는 것이라도</p>
<p>프로그래밍할때도 처음부터 몇만줄짜리 프로그램을 머리속으로만 백날 생각하고 모델링하는 것보다는 
에라 모르겠다 한줄씩이라도 써보자 하는 자세가 때로는 도움이 되는 것처럼!</p>
<p>나 오늘부터 시작하리...</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[진짜 시작하자...!]]></title>
            <link>https://velog.io/@haedaal_94/%EC%A7%84%EC%A7%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EC%9E%90-6s9sp0pg</link>
            <guid>https://velog.io/@haedaal_94/%EC%A7%84%EC%A7%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EC%9E%90-6s9sp0pg</guid>
            <pubDate>Wed, 14 Jul 2021 14:42:47 GMT</pubDate>
            <description><![CDATA[<p>새로운 마음으로 블로그 다시 시작...
이번엔 진짜 잘해보자..!😎</p>
<p>실무하면서 배운점을 정리하고 내 생각을 공유해야징.</p>
<h3 id="주로-다룰-주제들">주로 다룰 주제들</h3>
<ul>
<li>Flutter, Dart</li>
<li>Javascript</li>
<li>DB 조금..?</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>