넷평 남짓한 공간netpyoung's blogZola2023-12-03T00:00:00+00:00https://netpyoung.github.io/feed.xmljekyll에서 zola로2023-12-03T00:00:00+00:002023-12-03T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/jekyll_to_zola/<p>5년전에 블로그 글을 올리고 다시 새로운 글을 올린다. 블로그에 글을 쓰는것보다 재미있는 일들/해야 할 들이 많았다.</p>
<p>홈페이지를 새로 정리하려고 하는데, 기존에 쓰던 방식인 jekyll을 실행시키자니, 디펜던시를 받던가 도커를 실행해야하는데 이 작업자체가 귀찮았다.
대안을 생각해보았고, 생성기를 jekyll에서 zola로 교체하였다.</p>
<ul>
<li>
<p>이전글</p>
<ul>
<li><a href="https://netpyoung.github.io/blog/netpyoung.github.io_on_jekyll/">https://netpyoung.github.io/blog/netpyoung.github.io_on_jekyll/</a></li>
<li><a href="https://netpyoung.github.io/blog/githubpages_jekyll_v3/">https://netpyoung.github.io/blog/githubpages_jekyll_v3/</a></li>
</ul>
</li>
<li>
<p>jekyll을 썻던 이유</p>
<ul>
<li>github 기본</li>
<li>추가 커밋 불필요</li>
</ul>
</li>
<li>
<p>zola를 쓰는 이유</p>
<ul>
<li>github기본 jekyll버전의 업데이트가 멈추었다
<ul>
<li>2023.12.03 현재
<ul>
<li>github's jekyll current version <code>## 3.9.3 / 2023-01-27</code></li>
<li>github's jekyll latest version <code>4.3.2</code></li>
</ul>
</li>
<li>jekyll의 의존성 설치문제 짜증나서 안키게 된다</li>
<li>깔끔한 폴더구조
<ul>
<li>jekyll에선 _posts로 블로그를 넣었는데, 이젠 그냥 content에 넣으면 된다</li>
</ul>
</li>
<li>그냥
<ul>
<li>rust를 쓰니 속도가 빨라보였다</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>후보들</p>
<ul>
<li>Cobalt: rust로 작성.
<ul>
<li>문서, 사용자층 빈약해서 패스</li>
</ul>
</li>
<li>hugo: go로 작성.
<ul>
<li>문서, 사용자층 괜찮음</li>
<li>어색한 템플릿 언어 Go’s html/template and text/template</li>
</ul>
</li>
</ul>
</li>
<li>
<p>이름도 zola라 졸라 빨라 보인다</p>
</li>
</ul>
<h2 id="baggumyeonsse">바꾸면서</h2>
<ul>
<li>만족
<ul>
<li>빠르다</li>
<li>셋업에 골머리 썩힐 필요가 없었다.
<ul>
<li>jekyll은 ruby베이스라서 버전, 라이브러리가 os문제를 가지면 꽤나 골치 아파진다.
<ul>
<li>그걸 피하려고 docker버전을 썼지만 docker도 셋팅하는게 귀찮다.</li>
</ul>
</li>
</ul>
</li>
<li>zola의 tera
<ul>
<li>liquid랑 비슷해서 딱히 문제없음. hugo로 갔으면 go템플릿하느라 빡쳤을듯</li>
</ul>
</li>
<li>깔끔해졌다
<ul>
<li>jekyll은 _posts폴더를 강제로 쓰도록하는데 zola는 괜찮았다</li>
<li>webpack쓰던걸 그냥 cdn쓰도록
<ul>
<li>jekyll에서 webpack썼는데 관리 귀찮</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>다행
<ul>
<li>글이 별로 없어서 마이그레이션 비용이 그리 크지 않았다</li>
</ul>
</li>
<li>어색
<ul>
<li>index.md가 아닌 contents/에 _index.md로 처리</li>
<li>slugify's path
<ul>
<li>예를들어 파일이름이 <code>elisp_lexcical_dynamic</code>이런데 url은 <code>elisp-lexcical-dynamic</code>로 자동으로 바뀌는걸 방지하려면</li>
<li>config에서 <code>[slugify]</code>의 <code>paths = "safe"</code>로 해줘야 했다</li>
</ul>
</li>
</ul>
</li>
<li>별로
<ul>
<li>zola 마크다운에서 rendering코드를 넣지 못함
<ul>
<li>zola에는 shortcodes
<ul>
<li>templates/shortcodes/에 넣는다</li>
<li>근데 shortcode는 Tera 변수를 참조할 수 없음</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>앞으로
<ul>
<li>계속 쓰자
<ul>
<li>추후 github action의 유료화나 jekyll만 쓰도록 한다면 다시 바꾸는걸 고려해야겠지만 지금은 zola로 만족</li>
<li>다른 좋은 생성기가 있으면 고려해보자</li>
<li>아싸리 개인 생성기도 만드는 것도 재미있을거 같은데, 시간이 부족하다.</li>
</ul>
</li>
<li>search기능도 있는것 같은데 어떻게 쓰는지 알아봐야 할 것 같다</li>
<li>lispkorea.github.io도 zola로 바꿔봐야겠다</li>
</ul>
</li>
</ul>
<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">git</span><span> tag</span><span style="color:#bf616a;"> -a</span><span> 1.9.0 2136b1c0e601ec1a68b94aa0daefd871769dff97</span><span style="color:#bf616a;"> -m </span><span>"</span><span style="color:#a3be8c;">jekyll version</span><span>"
</span><span style="color:#bf616a;">git</span><span> tag</span><span style="color:#bf616a;"> -a</span><span> 2.0.0 73a536e07328bc298586e75c0a5b752073aaf6f3</span><span style="color:#bf616a;"> -m </span><span>"</span><span style="color:#a3be8c;">zola verison</span><span>"
</span></code></pre>
<h2 id="ref">Ref</h2>
<ul>
<li><a href="https://www.getzola.org/documentation/getting-started/configuration/">설정</a></li>
<li><a href="https://www.getzola.org/documentation/deployment/github-pages/">github action</a></li>
<li><a href="https://keats.github.io/tera/">tera</a></li>
</ul>
<table><thead><tr><th>templates/</th><th></th></tr></thead><tbody>
<tr><td>index.html</td><td>applied to the site homepage;</td></tr>
<tr><td>section.html</td><td>applied to all sections</td></tr>
<tr><td>page.html</td><td>applied to all pages</td></tr>
<tr><td>404.html</td><td></td></tr>
<tr><td>anchor-link.html</td><td></td></tr>
<tr><td>sitemap.xml</td><td><a href="https://www.getzola.org/documentation/templates/sitemap/">https://www.getzola.org/documentation/templates/sitemap/</a></td></tr>
<tr><td>split_sitemap_index.xml</td><td></td></tr>
<tr><td>atom.xml</td><td>config.toml 바꿀 수 있다. <a href="https://www.getzola.org/documentation/templates/feeds/">https://www.getzola.org/documentation/templates/feeds/</a></td></tr>
<tr><td>rss.xml</td><td></td></tr>
<tr><td>sitemap.xml</td><td></td></tr>
<tr><td>split_sitemap_index.xml</td><td></td></tr>
<tr><td>robots.txt</td><td></td></tr>
</tbody></table>
<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">brew</span><span> install zola
</span><span style="color:#bf616a;">zola</span><span> init myblog
</span><span>> What </span><span style="color:#bf616a;">is</span><span> the URL of your site? (https://example.com)</span><span style="color:#96b5b4;">:</span><span> https://netpyoung.github.io
</span><span>> Do </span><span style="color:#bf616a;">you</span><span> want to enable Sass compilation? </span><span style="color:#b48ead;">[</span><span>Y/n</span><span style="color:#b48ead;">]</span><span>:
</span><span>> Do </span><span style="color:#bf616a;">you</span><span> want to enable syntax highlighting? </span><span style="color:#b48ead;">[</span><span>y/N</span><span style="color:#b48ead;">]</span><span>: y
</span><span>> Do </span><span style="color:#bf616a;">you</span><span> want to build a search index of the content? </span><span style="color:#b48ead;">[</span><span>y/N</span><span style="color:#b48ead;">]</span><span>: y
</span><span style="color:#96b5b4;">cd</span><span> myblog
</span><span style="color:#bf616a;">zola</span><span> serve
</span><span style="color:#bf616a;">Web</span><span> server is available at http://127.0.0.1:1111
</span><span style="color:#bf616a;">Options:
</span><span> </span><span style="color:#bf616a;">-i, --interface </span><span><INTERFACE> Interface to bind on </span><span style="color:#b48ead;">[</span><span>default: 127.0.0.1</span><span style="color:#b48ead;">]
</span><span> </span><span style="color:#bf616a;">-p, --port </span><span><PORT> Which port to use </span><span style="color:#b48ead;">[</span><span>default: 1111</span><span style="color:#b48ead;">]
</span><span> </span><span style="color:#bf616a;">-o, --output-dir </span><span><OUTPUT_DIR> by default '</span><span style="color:#a3be8c;">public</span><span>' dir in project root
</span><span> </span><span style="color:#bf616a;">-u, --base-url </span><span><BASE_URL> Changes the base_url </span><span style="color:#b48ead;">[</span><span>default: 127.0.0.1</span><span style="color:#b48ead;">]
</span><span> </span><span style="color:#bf616a;">-O, --open</span><span> Open site in the default browser
</span><span>
</span><span style="color:#65737e;"># .gitignore
</span><span style="color:#65737e;"># public/
</span><span style="color:#65737e;"># .DS_Store
</span></code></pre>
Why am I trying to move camera?2018-06-16T00:00:00+00:002018-06-16T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/why-am-i-trying-to-move-camera/<h2 id="naneun-hwa-kamerareul-iddonsikyeossneunga">나는 왜 카메라를 이동시켰는가?</h2>
<p>퇴근 20분을 남기고, 동료 개발자가 <code>특정 위치에서 드래그 스킬 영역 표시가 의도한 바로 이동하지 않는다.</code>라고 말을 해온다. 평소같았으면 퇴근 20분 남기고 버그를 고치려고 하지 않지만, 어제까지 잘 되던게, 오늘 안되는거라 쉽게 발견할 수 있을거 같아 확인해 보기로 했다.</p>
<p>게임을 다시 시작하고 해당 위치로 이동하여 드래그 스킬을 사용해 보았다.</p>
<p>뭔가 이상하다. 특정 위치로 띄엄띄엄 이동한다.</p>
<p>"나는 분명 UI 카메라에서 레이를 쏘아 충돌 지점에 드래그 스킬 영역이 표시되도록 시켰는데"</p>
<p>유니티 에디터 하이라키창을 확인한다.</p>
<p>의도했던대로, UI카메라와 전투(케릭터) 카메라는 동일 위치에 있었다.</p>
<p><code>그냥 한번 UI카메라를 이동시켜 보았다. - 의도없이 무의식적으로</code></p>
<p>역시 결과는 같았다.</p>
<p><code>다음 예상가능한 변수들을 생각해보았다.</code></p>
<ul>
<li>콜라이더 안박혔나?</li>
<li>레이마스크를 제대로 지정안했나?</li>
</ul>
<p>일단 레이쏘는 코드에 디버깅을 걸고 체크엔 트라이</p>
<ul>
<li>레이마스크는 지정자체를 안하여서 레이마스크는 영향없고,(프로토단계여서 일단 레이마스크 씌우는 작업은 건너뛰었다).</li>
<li>콜라이더를 확인해보니, 바닥에 콜라이더가 없다..</li>
</ul>
<p>드문드문 이동한것은 구조물에 박힌 콜라이더에 영향을 받은 것이였다.</p>
<p>사실 문제를 발견하고 고치는데까지는 별 시간이 걸리지 않았다. 하지만 더 큰 문제를 발견했는데. 왜 나는 생각하지않고 카메라를 이동시켰는가이다. 제대로 사고해보지않고 마치 잡혀라 하면서 아무데나 그물을 던지는 것과 같은 행동을 말이다. 신입이 오면 가장 주의깊게 살피고, 피드백 주는 부분이 그 부분인데, 내가 그러한 행동을 하고 있는게 참으로 부끄러웠다. 예전에 하던 그러한 기질이 방심했을때 올라온다. 조심하자.</p>
2018-04-11T00:00:00+00:002018-04-11T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/opensource-github/<ul>
<li><a href="https://github.com/issues?utf8=%E2%9C%93&q=is%3Aissue+author%3Anetpyoung">https://github.com/issues?utf8=%E2%9C%93&q=is%3Aissue+author%3Anetpyoung</a></li>
</ul>
<p>남 프로젝트</p>
<p>내 프로젝트
오타
나도 실 수 할 수 있다는 걸
문서 작성 능력 중요성</p>
내가 php 싫어하는 이유2018-04-11T00:00:00+00:002018-04-11T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/why_i_hate_php/<h1 id="naega-php-ssileohaneun-iyu">내가 php 싫어하는 이유</h1>
<h2 id="hwanggyeon">환경</h2>
<ul>
<li>Unity 게임 클라이언트(C#)가 메인.</li>
<li>회사에서 로직만 깔짝 python 서버 다루어 봄.</li>
<li>여러가지 언어를 공부할때 php 언어공부도 함.</li>
<li>php를 실무에서 써본 적이 없음 // 쓸 생각도 없음</li>
</ul>
<h2 id="hyeonssiesse-phpreul-sseuneun-ponhohaneun-ggabbaja-jjunesse-ggwaecanhheu-satraheu-bbojjeoi-heobda">현실에서 php를 쓰는/옹호하는 개발자 중에서 괜찮은 사람을 본적이 없다.</h2>
<ul>
<li>99%: 같이 일하기 싫은사람.</li>
<li>1% : php를 옹호하다 크게 대이고 다시 생각하게된 사람</li>
<li>0% : 같이 일하고 싶다라고 생각이 들만한 사람.</li>
</ul>
<h2 id="taedo">태도</h2>
<ul>
<li>99%: 같이 일하기 싫은사람.</li>
<li>똥고집</li>
<li>프로그래밍 언어를 깊이 공부하지 않음(심지어 php조차도)</li>
<li>타입에러는 기본</li>
<li>서버 스트레스테스트 방법을 모름</li>
<li>생각/코딩 능력 결여 : 이슈를 늦게 처리하면서 문제를 불안정하고 수정.</li>
<li>이런 것들이 쌇여 개발자를 신뢰할 수 없음.</li>
</ul>
<h2 id="tcp-udp-sokespeuroggeraeoncoheu-hal-su-heobheu">tcp/udp 소켓프로그래밍을 할 수 없음</h2>
<ul>
<li>다른 라이브러리 가져다 써야함.</li>
<li>실시간 로직을 기획단에서 배재하려고함.</li>
<li>네트워크 지식이 얕음</li>
<li>c#이라면 코드 공유라도 할 수 있지..</li>
</ul>
<h2 id="ggyeoron">결론</h2>
<ul>
<li>선입견이 생겼다. <code>php쓰는 사람과 같이 일하기 싫다.</code></li>
</ul>
AutoGenerated.DB.dll on Unity2017-03-08T00:00:00+00:002017-03-08T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/data-flow/<h2 id="munjeinssi">문제인식</h2>
<ul>
<li>클라이언트 코드 작성시 excel의 테이블명, 컬럼명과 동일하게 클래스를 만든다.</li>
<li>excel의 테이블명, 컬럼명과 동일하게 데이터베이스의 테이블과 컬럼을 만든다.</li>
<li>excel에 수정이 가해질때마다, class와 데이터를 변경시켜주는게 불편하다.</li>
</ul>
<h2 id="baraneunjjeo">바라는점</h2>
<ul>
<li>excel의 테이블의 수정시, 클래스와 db갱신이 자동으로 되었으면 좋겠다.</li>
</ul>
<h2 id="sidobbanbbeo">시도방법</h2>
<ul>
<li>excel에서 class를 생성하여 dll로 묶는다.</li>
<li>dll을 로드하여, dll의 class명과 property로 db갱신을 한다.</li>
</ul>
<h2 id="sseomyeong">설명</h2>
<ul>
<li><img src="https://github.com/netpyoung/nf.data-flow/raw/master/flow.png" alt="flow.png" /></li>
<li><a href="https://github.com/netpyoung/nf.data-flow">https://github.com/netpyoung/nf.data-flow</a></li>
<li>플로우는 Rakefile 참조</li>
</ul>
<h2 id="hugi">후기.</h2>
<ul>
<li>excel에 변경이 가해져도 클래스나 db에 신경을 덜 쓰게 되었다.</li>
</ul>
AutoGenerated.Message.dll on Unity2017-03-08T00:00:00+00:002017-03-08T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/protocol-flow/<h2 id="munjeinssi">문제인식.</h2>
<p>message의 수정 추가시, 클라이언트 프로그래머가 매번 명칭과 인자에 따라 클래스를 수정한다.
단순 api통신은 dll하나로 만들어져서, 클라이언트 프로그래머가 별로 신경 쓰지않고, 다른 작업에 좀 더 집중하고 싶다.</p>
<h2 id="baraneunjjeo">바라는점.</h2>
<p>message 수정, 추가시 하나로 된 dll파일을 얻었으면 한다.</p>
<h2 id="sidobbanbbeo">시도방법.</h2>
<ul>
<li>message에서 하나의 dll을 얻는다.</li>
<li>dll을 로드하여 sender를 생성한다.</li>
<li>sender와 앞선 dll을 하나로 묶는다.</li>
</ul>
<h2 id="haeggyeo">해결</h2>
<ul>
<li><img src="https://github.com/netpyoung/nf.protocol-flow/raw/master/flow.png" alt="flow.png" /></li>
<li><a href="https://github.com/netpyoung/nf.protocol-flow">https://github.com/netpyoung/nf.protocol-flow</a></li>
<li>플로우는 Rakefile 참조</li>
</ul>
<h2 id="hugi">후기.</h2>
<p>mesage의 추가 수정이 가해져도, 신경을 덜 쓰게 되었다.</p>
Unity NPOI with IL2CPP2016-07-01T00:00:00+00:002016-07-01T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/unity_npoi_bugreport/<h2 id="npoiran">NPOI란?</h2>
<ul>
<li><a href="https://npoi.codeplex.com/">https://npoi.codeplex.com/</a></li>
<li>Excel을 읽어들일 수 있는 POI Java project를 dotnet으로 구현한 것으로, net20, net40 dll을 제공하고 있다.</li>
<li>게임 개발을 하면서 데이터를 excel로 관리하는 경우가 많은데, 툴을 구현할 시 유용하다.</li>
</ul>
<h2 id="munjeneun">문제는?</h2>
<ul>
<li>iOS 디바이스에서 빌드해서 사용시, 문제가 있다는 것을 1년전 쯤에 빌드해보고 알고있었다.(그때는 IL2CPP나 개발 중이여서 추후에 보자고 덮어뒀었다.)</li>
<li>최근 혹시나 하는 마음에 빌드를 하였고, XCodeProject생성 빌드시 IL2CPP에서 문제가 발생하였다.</li>
</ul>
<h2 id="haeggyeocaegheu">해결책은?</h2>
<ul>
<li>이번에는 1년 전과는 달리 포럼에 <a href="http://forum.unity3d.com/threads/il2cpp-build-error-unity5-3-5f1-personal-version.413861/">post</a>를 남기어 두었고, 관계자의 답글대로, Unity Editor의 Bug Report를 이용하여 버그리포트를 보냈다.</li>
<li>지금(5.3.5f1)에서는 .NET 2.0 Subset로 빌드하면 된다.</li>
<li><a href="https://issuetracker.unity3d.com/issues/ios-build-fails-with-net-2-dot-0-in-mscorlib-dot-dll">issue</a>가 등록되었고, UnityQA에서 온 메일로 확인한 결과, 5.3.5p8에서는 이용할 수 있다고 한다. (ios device에서 excel reading이 가능해 질 것으로 본다)</li>
</ul>
Github Pages - Jekyll v32016-02-15T00:00:00+00:002016-02-15T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/githubpages_jekyll_v3/<h1 id="github-pages-jekyll-v3">Github Pages - Jekyll v3</h1>
<p>오랜만에 블로그에서 사소한 내용을 수정후 커밋하니 다음과 같은 내용의 이메일이 도착했다.</p>
<pre data-lang="txt" style="background-color:#2b303b;color:#c0c5ce;" class="language-txt "><code class="language-txt" data-lang="txt"><span>The page build completed successfully, but returned the following warning:
</span><span>
</span><span>You are currently using the 'redcarpet' Markdown engine, which will not be supported on GitHub Pages after May 1st. At that time, your site will use 'kramdown' for markdown rendering instead. To suppress this warning, remove the 'markdown' setting in your site's '_config.yml' file and confirm your site renders as expected. For more information, see https://help.github.com/articles/updating-your-markdown-processor-to-kramdown.
</span><span>
</span><span>GitHub Pages was recently upgraded to Jekyll 3.0. It may help to confirm you're using the correct dependencies:
</span><span>
</span><span> https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0
</span><span>
</span><span>For information on troubleshooting Jekyll see:
</span><span>
</span><span> https://help.github.com/articles/using-jekyll-with-pages#troubleshooting
</span><span>
</span><span>If you have any questions you can contact us by replying to this email.
</span></code></pre>
<p>내용인즉, 깃허브가 github-pages에서 쓰고있는 jekyll의 버전을 3으로 올린다는 내용이며, 이에 준하여 업데이트를 시켜주라는 말이였다.</p>
<p>github-pages페이지를 업데이트 시켜주고(오래간만에 gem update를...),</p>
<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">sudo</span><span> gem update github-pages
</span></code></pre>
<p>나와같은 경우 다음의 라인이 문제가 되었다. 이제 github-pages를 이용시 highlighter부분과 markdown섹션을 신경쓸 필요가 없게되었다.</p>
<pre data-lang="yaml" style="background-color:#2b303b;color:#c0c5ce;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="color:#bf616a;">highlighter</span><span>: </span><span style="color:#a3be8c;">pygments
</span><span style="color:#bf616a;">markdown</span><span>: </span><span style="color:#a3be8c;">redcarpet
</span><span style="color:#bf616a;">redcarpet</span><span>:
</span><span> </span><span style="color:#bf616a;">extensions</span><span>: ["</span><span style="color:#a3be8c;">no_intra_emphasis</span><span>", "</span><span style="color:#a3be8c;">fenced_code_blocks</span><span>", "</span><span style="color:#a3be8c;">autolink</span><span>", "</span><span style="color:#a3be8c;">tables</span><span>", "</span><span style="color:#a3be8c;">with_toc_data</span><span>"]
</span><span>
</span></code></pre>
<p>수정시, highlighter만 pygments로 나두면 다음과 같은 메시지로 이메일이 날라온다.</p>
<pre data-lang="txt" style="background-color:#2b303b;color:#c0c5ce;" class="language-txt "><code class="language-txt" data-lang="txt"><span>The page build completed successfully, but returned the following warning:
</span><span>
</span><span>You are attempting to use the 'pygments' highlighter, which is currently unsupported on GitHub Pages. Your site will use 'rouge' for highlighting instead. To suppress this warning, change the 'highlighter' value to 'rouge' in your '_config.yml'. For more information, see https://help.github.com/articles/page-build-failed-config-file-error/#fixing-highlighting-errors.
</span></code></pre>
<p>처음 github-pages를 설정할때 highlighter, markdown 설정 부분에서 좀 애를 먹은 기억이 있어, 나는 이와같이 github-pages가 변화한것을 환영한다.</p>
Boot : It's not a build tool - it's build tooling.2015-11-23T00:00:00+00:002015-11-23T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/boot/<h1 id="boot">Boot</h1>
<h2 id="it-s-not-a-build-tool-it-s-build-tooling">It's not a build tool - it's build tooling.</h2>
<ul>
<li>홈페이지: <a href="http://boot-clj.com/">http://boot-clj.com/</a></li>
<li>소스코드: <a href="https://github.com/boot-clj/boot">https://github.com/boot-clj/boot</a></li>
</ul>
<p><img src="http://boot-clj.com/assets/images/logos/boot-logo-3.png" alt="" /></p>
<ul>
<li>boot는 <a href="http://adzerk.com/">adzerk</a>라는 회사에서 만든 빌드 툴링(build tooling)이다.
<ul>
<li>adzerk는 ad serviing infrastructure를 제공해주는 회사이다.</li>
<li>stackexchange, bittorrent, reddit등이 이 회사의 서비스를 이용하고 있다.</li>
</ul>
</li>
<li>boot의 빌드 프로세스는, Tasks(Boot's modular building blocks.)단위로 이루어 진다.</li>
<li><a href="https://github.com/boot-clj/boot/wiki/Tasks">Tasks</a>는 task middleware이다.</li>
<li>task middleware는 task handler로 제어한다.</li>
<li>이 task handler는 <a href="https://github.com/boot-clj/boot/wiki/Filesets">Filesets</a>을 조작한다.</li>
<li>JVM에 관한 의존성관리는 <a href="https://github.com/boot-clj/boot/wiki/Pods">Pods</a>에 의해 제어된다.</li>
<li>clean task가 없다. (Artifacts can never be stale)
<ul>
<li>의도하는 바는 알겠지만, clean에 대해서도 우아하게 처리할 수 있는 방안이 필요하다 라는 것이 내 개인적인 견해이다.</li>
</ul>
</li>
</ul>
<p><img src="https://drive.google.com/uc?export=download&id=0B3j9XOWClsuYNXRxSU1VaVhlaDA" alt="" /></p>
<h2 id="leiningengwa-biggyhaesse">leiningen과 비교해서.</h2>
<ul>
<li>leiningen은 defproject하나로 관리되어, (물론 여러 트릭으로 우회할 순 있지만), 복잡한 상황에 대처하기에 부적합한 경우도 있다.</li>
<li>또한, 현재 leiningen은 <a href="https://github.com/technomancy/leiningen/issues/1752">lein X auto</a>문제를 안고있다.</li>
</ul>
<h2 id="community-tasks">Community Tasks</h2>
<ul>
<li><a href="https://github.com/boot-clj/boot/wiki/Community-Tasks">https://github.com/boot-clj/boot/wiki/Community-Tasks</a></li>
<li>Adzerk's boot configurations for Clojure libraries
<ul>
<li><a href="https://github.com/adzerk-oss/bootlaces">https://github.com/adzerk-oss/bootlaces</a></li>
</ul>
</li>
<li>실행 가능한 파일로 만들어주는 tasks
<ul>
<li><a href="https://github.com/adzerk-oss/boot-jar2bin">https://github.com/adzerk-oss/boot-jar2bin</a></li>
</ul>
</li>
<li>lein-ancient처럼 dependencies 버전 체크.
<ul>
<li><a href="https://github.com/martinklepsch/boot-deps">https://github.com/martinklepsch/boot-deps</a></li>
</ul>
</li>
<li>쉘스크립트 실행
<ul>
<li><a href="https://github.com/danielsz/boot-shell">https://github.com/danielsz/boot-shell</a></li>
<li><a href="https://github.com/mathias/boot-restart">https://github.com/mathias/boot-restart</a></li>
</ul>
</li>
<li>notification기능
<ul>
<li><a href="https://github.com/jeluard/boot-notify">https://github.com/jeluard/boot-notify</a></li>
</ul>
</li>
</ul>
<h2 id="example">Example</h2>
<p>사실 이 글을 작성할때, 여러 예제를 만들어 넣을까 했는데... 다음 링크가 잘 나타난것 같다.</p>
<ul>
<li><a href="https://lionfacelemonface.wordpress.com/2015/01/17/boot-getting-started-with-clojure-in-10-minutes/">Boot: Getting Started With Clojure In < 10 Minutes</a></li>
</ul>
<h2 id="ref">REF.</h2>
<iframe width="640" height="360" src="https://www.youtube.com/embed/TcnzB2tB-8Q?rel=0" frameborder="0" allowfullscreen></iframe>
<ul>
<li><a href="https://speakerdeck.com/mklappstuhl/boot-build-tooling-for-clojure-script">Boot: Build tooling for Clojure(script) by mklappstuhl</a></li>
<li><a href="http://hashrocket.com/blog/posts/the-front-end-development-environment-of-my-dreams">Boot + Middleman: The ClojureScript development environment of my dreams</a></li>
<li><a href="http://www.martinklepsch.org/posts/why-boot-is-relevant-for-the-clojure-ecosystem.html">Why Boot is Relevant For The Clojure Ecosystem</a></li>
<li><a href="http://www.slideshare.net/metosin/clojutre-build-tooling-with-boot-42006010">ClojuTRE - Build tooling with Boot</a></li>
<li><a href="https://github.com/martinklepsch/tenzing">Clojurescript application template using Boot</a></li>
</ul>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>Let's try piling up some other kinds of furniture and see how we feel about it, shall we?
</span><span>
</span><span>I hope you have fun playing with it and remember, "Lisp Can Do It!"
</span><span>
</span><span> - http://adzerk.com/blog/2014/11/clojurescript-builds-rebooted/
</span></code></pre>
돈에 관한 이야기2015-11-14T00:00:00+00:002015-11-14T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/a_story_about_money/<h1 id="ddo">돈?</h1>
<p>대학 입학하기 전이였다. 어느날 아버지가 밖에 좀 같이 가자고 하신다. 대충 감이 온다. 설마. 역시나 나를 대학교 안에 있는 은행에 데리고 가신다.
물론 내 돈은 아니지만, 할머니께서 내 등록금 하라고 내 통장에 넣으신 돈을 다른 곳으로 빼놓고, 등록금하라던 그 돈은 학자금 대출로 변했다.
어찌됐든 대학은 다니다 말았고. 전역하자마자 시작한 밀감 까대기(상하차)로 이자와 함께 학자금을 갚았다.</p>
<p>군대에 있을때였다. 이름 뒷글자만 따서 내가 록형이라고 부르는 친한 동기 형이 있는데, 이 형이 커피를 그리 좋아한다.
그날도 자판기에 가서 보니, 다름없이 자판기 커피를 손에 들고 있는데 표정이 별로이다. 카드를 잃어버렸다고. 일딴 빨리 정지시키라고 말을 했는데.
다음날 물어보니 통장에서 돈이 좀 빠져나갔나 보다. 나중에 알고보니, 같은 생활관 동기 한명이 휴가나갈때 훔쳐가서 써버린것이였다.
복귀후에는 모른척하고, 결국 찾고 찾아서 범인이거 밝혀지니 다른 선까지 소리들어가면 자기에게 불이익있을걸 아니 봐달라고.
나는 그냥 까발리라고 봐주지 말아야된다고. 록형은 알아서 한다고 하고는, 전역하고도 지금까지 결국 돈 못받고 있는 형이 생각이 났다.
그 새끼는 전역할때까지 짬먹었다고 유세떨다 전역하고. 후..
접때 내려가서 만났을때 그때 일을 예기했는데, 말로는 그때 말해버릴꺼라고 말하는 록형이지만 아마 그 형은 그래도 말을 안했을것이다.</p>
<p>어느 날이였다. 그날도 자료 찾느라고 인터넷 검색하고 있었는데, 갑자기 군데 후임한테서 연락이 왔다.
반갑기도 하고 뭔일인가 해서 전화를 받았다. 들어보니 뭐가 좀 이상한게,
자기 서울에 놀러 왔는데 놀다보니 돈을 다 썻다. 집에 돌아가려는데 돈 좀 빌려달라고 웃으면서 말하는 것이였다.
그러냐고, 근데 지금 돈이 없다고 해서 끊었다. 물론 그 몇푼하는 차비 가지고 있었고 그냥 줘도 됐었다.
하지만 <code>아 다르고 어 다르다고</code> 전화를 끊고도 상당히 기분이 나빴다.</p>
<p>작년 어느 날. 회사에 사람안된 매니저를 만나 맨날 야근하고 고생만 하고 있던 개발자 인턴이 있었다.
보통 명절되면, 회사에서 떡값을 주지않는가. 얼쑤구나 좋다해서 떡값받으러가는데, 크로스되어서 나오는 애의 표정이 않좋다.
총무팀에 물어보니 인턴은 짤 없다고. 아나. 퇴근길에 부모님 갖다 드리라고 던지다싶이 걔한테 주고, 얼마 지나지 않아서 일이 또 터졌다.
인턴을 야근까지 시켜가면서 부려먹고는, 그에 해당하는 수당조차 처리를 안해줬었다.
일단 관리자PD가 병신이였던건 둘째 치더라도, 내가 뒤집기 전까지는 총무팀에서 그 사실 조차 인지하지도 못했다는 사실이 상당히 기분이 나빴다.
총무쪽에서는 누락된 보고서는 처리안해줘서, 그거가지고 내가 또 말할려고 하니까 총무팀에 미안하다고 그러지 말아달라고 하던 애가 있었다.</p>
<p>어제였다. 퇴근 후, 집에 돌아와보니 엄마가 엄마친구와 통화중이셨다.
언제는 또 큰아들 큰아들하다가, 오늘 아들내미가 집에 들어왔는데, 신경도 안쓰길레 장난기가 발동하여, 깐죽거렸다.
근데 들려오는 통화내용에 살작 묘한 기운이 풍겨온다. 뭐 돈관련된 예기가 오가고 있었다.</p>
<p><code>괜찮다고 괜찮다고, 오히려 연락해줘서 고맙다고. 그럴 수도 있지</code></p>
<p>통화를 마친 엄마에게 물어보니, 친구분 아들넘이 여기저기 사고치고 다녀서 그거 물어준다고 하면서 우리 엄마에게 도움을 청한것이였다.
사실 액수는 그리 크지 않은 액수였는데, 액수와는 별개로 그렇게 통화하는 어머니께서 멋있게 보였다.
그렇게 어머니께서는 자연스럽게 내게 계좌번호를 불러주셨고, 나는 이체를 하고 있었다.</p>
<p>그리하여 어쨋든 결국 내 통장에서 돈이 빠져나갔다.</p>
<p>뭐 <code>그럴 수도 있지.</code></p>
<p><a data-flickr-embed="true" href="https://www.flickr.com/photos/netpyoung/22802465680/" title="돈이란 뭘까?"><img src="https://farm1.staticflickr.com/582/22802465680_9dc5c7e28e_z.jpg" width="640" height="479" alt="돈이란 뭘까?"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p>
윈도우즈 도커를 이용하여 깃허브 페이지 테스트하기2015-10-11T00:00:00+00:002015-10-11T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/githubpages_on_windows_docker/<h1 id="github-pages-on-windows-docker">Github Pages on Windows Docker</h1>
<p>& MacBook이 있기에, Windows에서 삽질을 하지 않아도 되지만... Docker에 익숙해지고, Windows에서의 Docker활용하면서 삽질을 미리 경험해보고자... 삽을 푸기로 했다. 사실 이 문서를 보게될 사람 역시 (아마도) 삽질매니아 인가보다.</p>
<p><img src="http://www.newsm.com/news/photo/200812/1106_2264_4956.jpg" alt="" /></p>
<h2 id="github-pagesran">Github Pages란?</h2>
<ul>
<li>github 저장소를 이용하여, github.io 도메인으로 정적웹사이트 서비스를 제공한다.</li>
<li>스테틱 파일인, html 자체를 이용할 수 있을 뿐만 아니라, github에서 제공해주는 Jekyll 정적 블로그엔진을 이용할 수 있다.</li>
<li>ref:
<ul>
<li><a href="http://ilmol.com/2015/01/Jekyll,Git%20%EC%9D%84%20%EB%AA%B0%EB%9D%BC%EB%8F%84%20%EB%AC%B4%EB%A3%8C%20Github%20Pages%20%EC%A6%90%EA%B8%B0%EA%B8%B0.html">Jekyll, Git 을 몰라도 무료 Github Pages 즐기기</a></li>
<li><a href="https://dogfeet.github.io/articles/2012/github-pages.html">GitHub의 페이지 기능 이용하기</a></li>
<li>https://pages.github.com/versions/</li>
<li>https://help.github.com/articles/using-jekyll-with-pages/#installing-jekyll</li>
</ul>
</li>
</ul>
<h2 id="jekylliran">Jekyll이란?</h2>
<p><img src="https://jekyllrb.com/img/logo-2x.png" alt="" /></p>
<ul>
<li><a href="http://jekyllrb.com/">http://jekyllrb.com/</a></li>
<li>정적 웹 블로그 프레임워크로, Ruby로 짜여졌다.</li>
<li>Markdown, Liquid, HTML & CSS을 template제공하여, 렌더링할 수 있게 도와주며 프레임워크인 만큼 여러 편의 기능들이 내장되어 있다.</li>
</ul>
<h2 id="munjeneun">문제는?</h2>
<p>일단 Jekyll을 Windows에서 그냥 실행시키려고 하면, (아마도)gem관련 오류 및 한글 encoding관련 문제에 봉착할 것이다.
비단, Ruby든 Python이든 Windows에서 라이브러리 호환성 및 한글 인코딩 문제는 빠질 수 없다(삽질 필요).
<a href="http://jekyllrb-ko.github.io/docs/windows/">Windows 에서 Jekyll</a>에서 소개한 http://jekyll-windows.juthilo.com/ 사이트 역시 (아마도) 어느정도만 해결하고 걸렸던게 있던걸로 기억한다.</p>
<h2 id="haeggyeocaegheu">해결책은?</h2>
<p>(Docker를 활용하여) Windows에 Linux환경을 만들면 된다.</p>
<h2 id="dockerran">Docker란?</h2>
<p><img src="https://www.docker.com/sites/all/themes/docker/assets/images/logo.png" alt="" /></p>
<ul>
<li>An open platform for distributed applications for developers and sysadmins</li>
<li>ref:
<ul>
<li><a href="http://pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book">가장 빨리 만나는 도커(Docker) 출간 및 원고 공개</a></li>
<li><a href="http://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/">도커(Docker) 튜토리얼 : 깐 김에 배포까지</a></li>
</ul>
</li>
</ul>
<h3 id="windowse-docker-sseoci">Windows에 Docker 설치</h3>
<ul>
<li><a href="https://docs.docker.com/installation/windows/">https://docs.docker.com/installation/windows/</a></li>
</ul>
<ol>
<li>가상화 확인</li>
<li>Docker Toolbox 설치</li>
<li>Docker Toolbox 실행.</li>
</ol>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>## open port
</span><span>docker@default:~$ echo 'export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):8000' >> ~/.bash_profile
</span><span>
</span><span>## install image
</span><span>docker@default:~$ docker search ubuntu
</span><span>docker@default:~$ docker pull ubuntu:latest
</span><span>
</span><span>## run image
</span><span>docker@default:~$ docker run -it --name jekyll ubuntu
</span><span>
</span><span>
</span><span>
</span><span>##########################################################################
</span><span># install needed package
</span><span>root@33b5f808449d:/# apt-get update
</span><span>root@33b5f808449d:/# apt-get install -y git
</span><span>root@33b5f808449d:/# apt-get install -y curl
</span><span>root@33b5f808449d:/# apt-get install -y node
</span><span>root@33b5f808449d:/# apt-get install -y python-pygments
</span><span>root@33b5f808449d:/# apt-get clean
</span><span>root@33b5f808449d:/# rm -rf /var/lib/apt/lists/
</span><span>
</span><span>## install rvm
</span><span>root@33b5f808449d:/# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
</span><span>root@33b5f808449d:/# \curl -sSL https://get.rvm.io | bash -s stable
</span><span>root@33b5f808449d:/# source /etc/profile.d/rvm.sh
</span><span>root@33b5f808449d:/# rvm list known
</span><span>root@33b5f808449d:/# rvm install 2.2
</span><span>root@33b5f808449d:/# rvm use 2.2
</span><span>
</span><span>## install github-pages
</span><span>root@33b5f808449d:/# gem install github-pages
</span><span>
</span><span>root@33b5f808449d:/# exit
</span><span>##########################################################################
</span><span>
</span><span>
</span><span>docker@default:~$ docker ps
</span><span>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
</span><span>33b5f808449d ubuntu "/bin/bash" About an hour ago Up About an hour 0.0.0.0:8000->8000/tcp jekyll
</span><span>
</span><span>## backup image
</span><span>docker@default:~$ docker commit 33b5f808449d github-pages
</span><span>docker@default:~$ docker images
</span><span>REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
</span><span>github-pages latest 3ccaea30ec80 About an hour ago 641.5 MB
</span><span>ubuntu latest cdd474520b8c 45 hours ago 188 MB
</span><span>
</span><span>## set volum from VirtualBox
</span><span>docker@default:~$ docker run -it --name jekyll -p 8000:8000 -v /c/Users/pyoung/hello/netpyoung.github.io/:/site github-pages
</span><span>
</span><span>
</span><span>##########################################################################
</span><span>root# cd /site
</span><span>root# jekyll serve --port 8000 --watch --force_polling
</span><span>##########################################################################
</span></code></pre>
<h2 id="jujjeri">주저리.</h2>
<p>사실 이 글을 작성하기 시작한건 꽤 되었는데, 그동안 Boot2Docker가 공식 메뉴얼에서 deprecate되었다.. 대충 기능은 비슷하고 docker-container로 변경된점?
게임회사에서 기능별로 브랜치까고, 서버 테스트를 할때 공유서버가 아닌, 기능 담당자별 서버가 필요한데. 배포나 설치하는걸 docker로 하면 그냥 간단하게 될것같다.
쩝 지금있는데는 뭐 한쪽은 svn쓰고, 한쪽은 git을 svn처럼 활용하고 있는데 뭐 더 할말이 있겠냐만은..
음.. 이제 좀 포스트하는데 편해졌다.</p>
<h2 id="cuga">추가.</h2>
<ul>
<li>docker github-pages로 쉽게 테스트 해볼 수 있게 되었다. <a href="https://github.com/Starefossen/docker-github-pages">https://github.com/Starefossen/docker-github-pages</a></li>
</ul>
netpyoung.github.io 탄생2015-10-11T00:00:00+00:002015-10-11T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/netpyoung.github.io_on_jekyll/<p>개인적으로 생각하기에, 개발자가 자신의 블로그를 갖고 자신의 경험(삽질)을 공유해주는걸 멋있다고 생각하기에 블로그를 시작하게 되었다.</p>
<p>그전까지는, <a href="http://netpyoung.springnote.com">http://netpyoung.springnote.com</a> 를 이용해 단순 정리노트 , <a href="http://netpyoung.tistory.com">http://netpyoung.tistory.com</a> 를 이용 내용 정리를 하였는데,
springnote의 운영중단 및 tistory의 한계를 느끼는 터에 여기에 자리잡게되었다.</p>
<p>개발일을 하다보면, 구글이 친구이며, stackoverflow와 reddit이나 facebook그룹이나 각종 포럼에서 글을 섭렵하기 마련이다.
뭔가 끌리는 아이디어, 정리할 내용이 있으면 notepad++을 꺼내들고 살며시 저장 백업을 한다. evernote가 이러한 역활에는 맞아떨어지지만 웬지 모르게 거부감이 들어 아직까지도 evernote는 잘 안쓰고 있다.
markdown으로 블로그를 작성할 수 있는 서비스를 찾았고, <a href="https://www.tumblr.com/">https://www.tumblr.com/</a> 가 대안으로 떠올랐지만,
<a href="http://dogfeet.github.io/">http://dogfeet.github.io/</a> 와 <a href="http://spoqa.github.io/">http://spoqa.github.io/</a> 를 보면서, github pages를 알게되었고, 그것이 제공해주는 기능에 더 끌렸다.</p>
<p>Github Pages는 github.io에 정적 호스팅을 할 수 있는 서비스이며, 기반 엔진으로 jekyll을 이용한다.
완전히 옮겨가기 전에 한번 jekyll bootstrap으로 시도해봤다가 이도 저도 않되었으나,
jekyll 처음부터 구축 다행이도 이때쯤에는 싸이트 문서화가 어느정도 되어있어서 비교적 쉽게 옮길 수 있었다.</p>
<p>다만, ruby에는 익숙했지만 jekyll에는 익숙치 않아서 문서를 뒤져가며 삽질.
디자인에 영 꽝이여서 bootstrap을 이용하기로 결정하였고, 아이콘은 font awsome이용하기로 하였다.
web front-end 개발자가 아니여서 살작 애를 먹긴 했으나 뭐 이정도 쯤이야.
마크다운 엔진은 github가 쓰는 redcarpet을 사용하기로 결정.</p>
<p>옮긴 이후에, clojure로 작성된 <a href="https://github.com/cryogen-project/cryogen">https://github.com/cryogen-project/cryogen</a> 역시 심각히 고려해봤지만,
github내의 편집 용의성, jekyll이 보다 빠른 실행시간을 보여줘서 jekyll로 정착하기로 했다.</p>
<p>음 되돌아보니, 2013.07.03부터 옮겼구나. jekyll bootstrap없이 생짜로 올리기 시작하면서 삽질한 내용, 참고 링크를 첨부하면서 이 포스팅을 계속 업데이트해 나가겠다.</p>
<hr />
<h2 id="jekyll">jekyll</h2>
<ul>
<li>홈페이지: <a href="http://jekyllrb.com/">http://jekyllrb.com/</a></li>
<li>일반 텍스트 문서를 정적 웹사이트나 블로그로 변환시켜줌.</li>
<li>UTF8 no BOM으로 문서를 작성해야 한다.</li>
<li>참고:
<ul>
<li>jekyll wiki: <a href="https://github.com/mojombo/jekyll/wiki">https://github.com/mojombo/jekyll/wiki</a></li>
<li>jekyll tutorial: <a href="http://www.andrewmunsell.com/blog/ultimate-jekyll-tutorial/">http://www.andrewmunsell.com/blog/ultimate-jekyll-tutorial/</a></li>
</ul>
</li>
</ul>
<h2 id="jekyll-bootstrap">jekyll bootstrap</h2>
<ul>
<li>홈페이지: <a href="http://jekyllbootstrap.com/">http://jekyllbootstrap.com/</a></li>
<li>JB api: <a href="http://jekyllbootstrap.com/api/bootstrap-api.html">http://jekyllbootstrap.com/api/bootstrap-api.html</a></li>
<li>jekyll을 보다 쉽게 사용할 수 있도록, 트위터 부트스트랩, JB 플러그인등 설정이 되어있음.</li>
<li>처음엔 간편하고 좋아보이나, 처음부터 이걸로 접근하는건 비추천..</li>
</ul>
<h2 id="docker">Docker</h2>
<ul>
<li>Windows에서 기어이 돌릴려고 라이브러리 어거지로 돌아가도록 수정하다, 다 내려놓고 docker이용.</li>
<li><a href="/blog/githubpages_on_windows_docker">윈도우즈 도커를 이용하여 깃허브 페이지 테스트하기</a></li>
</ul>
<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">docker@default:~$</span><span> docker start jekyll
</span><span style="color:#bf616a;">jekyll
</span><span style="color:#bf616a;">docker@default:~$</span><span> docker attach jekyll
</span><span>
</span><span>
</span><span style="color:#bf616a;">root@33b5f808449d:/#
</span><span style="color:#bf616a;">root@33b5f808449d:/#</span><span> cd /site/
</span><span style="color:#bf616a;">root@33b5f808449d:/site#</span><span> source /etc/profile.d/rvm.sh
</span><span style="color:#bf616a;">root@33b5f808449d:/site#</span><span> rvm use 2.2
</span><span style="color:#bf616a;">Using</span><span> /usr/local/rvm/gems/ruby-2.2.1
</span><span style="color:#bf616a;">root@33b5f808449d:/site#</span><span> jekyll serve</span><span style="color:#bf616a;"> --port</span><span> 8000</span><span style="color:#bf616a;"> --watch --force_polling
</span></code></pre>
<h2 id="code-highlight">code highlight</h2>
<ul>
<li><a href="https://github.com/richleland/pygments-css">https://github.com/richleland/pygments-css</a></li>
<li><a href="http://richleland.github.io/pygments-css/">http://richleland.github.io/pygments-css/</a></li>
<li><a href="https://github.com/chriskempson/tomorrow-theme">https://github.com/chriskempson/tomorrow-theme</a></li>
<li>ref:
<ul>
<li>tomorrow-pygments: <a href="https://github.com/MozMorris/tomorrow-pygments">https://github.com/MozMorris/tomorrow-pygments</a></li>
</ul>
</li>
</ul>
<h2 id="tags">Tags</h2>
<ul>
<li><a href="http://www.minddust.com/post/tags-and-categories-on-github-pages/">http://www.minddust.com/post/tags-and-categories-on-github-pages/</a></li>
<li><a href="http://jekyllrb.com/docs/permalinks/">http://jekyllrb.com/docs/permalinks/</a></li>
</ul>
<h2 id="liquid">Liquid</h2>
<ul>
<li>jekyll 지원을 안해줘서 그렇지 개인적으로는 Mustache템플릿 엔진을 더 선호한다.</li>
<li><a href="http://jekyllrb.com/docs/variables/">http://jekyllrb.com/docs/variables/</a></li>
<li><a href="https://github.com/Shopify/liquid/wiki/Liquid-for-Designers">https://github.com/Shopify/liquid/wiki/Liquid-for-Designers</a></li>
</ul>
<h2 id="markdown">markdown</h2>
<ul>
<li><a href="https://github.com/vmg/redcarpet">https://github.com/vmg/redcarpet</a></li>
</ul>
<h2 id="components">Components</h2>
<h3 id="bootstrap">bootstrap</h3>
<ul>
<li><a href="http://twitter.github.io/bootstrap/">http://twitter.github.io/bootstrap/</a></li>
<li>동영상강의: <a href="http://www.youtube.com/user/easydevtuts/videos?shelf_index=1&tag_id=&sort=p&view=0">http://www.youtube.com/user/easydevtuts/videos?shelf_index=1&tag_id=&sort=p&view=0</a></li>
<li>ref:</li>
<li>bootswatch: <a href="http://bootswatch.com/">http://bootswatch.com/</a>
<ul>
<li>slate</li>
</ul>
</li>
</ul>
<h3 id="font-awesome">Font Awesome</h3>
<ul>
<li><a href="http://fortawesome.github.io/Font-Awesome/">http://fortawesome.github.io/Font-Awesome/</a></li>
</ul>
<h3 id="music">Music</h3>
<ul>
<li>SCM Music Player: <a href="http://scmplayer.net/">http://scmplayer.net/</a></li>
</ul>
<h3 id="colorzilla">ColorZilla</h3>
<ul>
<li>색상 추출하는 firefox 플러그인.</li>
<li><a href="https://addons.mozilla.org/en-us/firefox/addon/colorzilla/">https://addons.mozilla.org/en-us/firefox/addon/colorzilla/</a></li>
</ul>
페넘브라의 24시 서점2015-09-04T00:00:00+00:002015-09-04T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/mr_penumbra_24-hour_bookstore/<p>Mr. Penumbra's 24-Hour Bookstore</p>
<p><code>페넘브라 14시 서점에서 이상한 일들이 벌어지고 있다</code></p>
<p>it개발자가 읽으면 피식하게 웃게될만한.. 책.</p>
<p>it실업자 주인공이, 서점에 취직하면서 일어나게 되는 사건들.</p>
<p>누가 무얼 숨겼고, 주인공은 또 어떻게 밝혀나가는가..</p>
<p>페넘브라 서점이 그 입구가 되어 펼쳐지는 현대의 판타지를 보는듯한 그러한 소설이였다.</p>
<ul>
<li>페넘브라: '페넘브라의 24시 서점'의 관리자.</li>
<li>클레이: 주인공. 디자이너이자, 웹디자이너. 베이글 만드는 소프트웨어 회사에서 퇴직금도 받지못하고 퇴사후, 실업자. '24시 서점' 헌책방의 야간 직원으로 일하게 된다.</li>
<li>닐 샤: 클레이의 가장 친한 친구. 나와 같이 <code>용의 노래 연대기</code>의 광팬</li>
<li>캣: 구글에서 일하는 여자. 주인공을 도와 페넘브라 서점에 숨겨진 비밀을 밝혀낸다.</li>
<li>알두스 마누티우스(테오발도): 베네치아에서 가장 큰 인쇄소를 운영
<ul>
<li>마누티우스의 코덱스 비테: 책. 평생 경험하고 배운것을, 후손을 위해 써두기로함. 사업에 타격을 입을까, 책을 암호화함.</li>
</ul>
</li>
<li>그리포 게리츠존 : 마누티우스와의 절실한 친구. 마누티우스에게 마지막 메시지를 남겼다.</li>
<li>'부러지지 않은 책등': 코덱스 비테를 풀기위한 비밀 조직.</li>
</ul>
<p><code>만일 오랫동안 보존해야 할 메시지가 있다면 여러분은 어떻게 하시겠습니까?</code></p>
<p>머리가 아무리 좋아도, 돈이 많아도, 지식이 많더라도. 놓치고 포기하며 넘어가는 것일지라도, 간절하면 마법과도 이루어지는건 소설이든 현실이든 상관없이 멋있는 일이지 않은가?</p>
<p><code>풀어야 할 수수께끼들도 많이 남았고. 어떤가, 나와 함께하겠는가?</code> - 페넘브라.</p>
헤럴드 프라이의 놀라운 순례2015-03-21T00:00:00+00:002015-03-21T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/the_unlikely_pilgrimage_of_harold_fry/<p>The Unlikely Pilgrimage of Harold Fry</p>
<p>"모든 것을 바꾸어 놓게 될 편지는 화요일에 도착했다."</p>
<ul>
<li>헤럴드 : 주인공으로써, 퀴니 헤네시에게서 온 편지 한장으로 여정을 떠나게된다.</li>
<li>모린 : 헤럴드의 아내</li>
<li>퀴니 헤네시: 오래전에 헤럴드와 같이 일했던 여자. 암으로 죽어가고 있다.</li>
<li>데이비드: 헤럴드와 모린사이의 아들.</li>
</ul>
<p>불안해 하는 모린, 헤럴드와 모린 사이의 벽, 삶을 돌아보는것 자체의 소중함.</p>
<p>어쩌면 이해가 가지 않는다. 암에 걸려 죽을 사람에게 편지를 그것도 걸어서 간다니. 가능한 빨리 가야하지 않는가.</p>
<p>이 책에서는 그런 것은 중요치 않는다. 중요한것은, 걸어가는 동안의 헤럴드와 도중에 만난 사람들, 퀴니의 이야기를 풀어내는 것이다.</p>
<p>궁금하지 않은가. 헤럴드가 왜 그 머나먼 길을 걸어서 가려 했는지.</p>
<p>퀴니와는 어떤관계이길레 그 길을 떠나는지.</p>
<p>아내 퀴니와는 어떠한 일이 있었는지. </p>
<p>도중에 만나는 사건들이 어떤 영향을 주는지.</p>
<p><code>헤럴드가 아주 작은 소리로 말했기 때문에 말이 공기의 한 부분 처럼 느껴졌다. "용서가 필요한 사람은 나지."</code></p>
<p>시간이 없었다. 아니 여유가 없었다고 해야 될려나. 전역 후 작년까지는 이런 저런 일이 있으면서, 그 좋아하던 소설책을 읽은 기억이 없다.
작년에서 올해로 해돋이를 보러 가는 것이, 홀로 첫 여행. 그때의 모습이 소설 속 헤럴드의 모습과 겹치는 느낌이 들었다.
사실 그때 해돋이를 보러 갈 예정이 없었다. 잊으려해도 잊어지지 않는 모습을 가지고, 되돌아보는.... 그런 뭐 그런것 하..</p>
<p><code>"당신은 일어섰고, 뭔가를 해냈어. 갈 수 있을지 어떨지도 잘 모르면서 길을 찾으려고 노력하는 것이 작은 기적이 아니라면 뭐가 기적이겠어."</code></p>
<p>"Have you seen Harold Fry?"</p>
스물 아홉 마지막 날.2014-12-31T00:00:00+00:002014-12-31T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/goodbye_twenties/<h2 id="annyeong-naege-hiseo-gge-eoddeohan-ggeobodado-sojjunhago-canranhaessddeo-20ddahye">안녕, 내게 있어 그 어떠한 것보다도 소중하고 찬란했던 20대여.</h2>
<iframe width="560" height="315" src="//www.youtube.com/embed/NLhq1Zq4UZg" frameborder="0" allowfullscreen></iframe>
<p>그져 그런 사람은 되기 싫었다.</p>
<p>다들 서른되어도 똑같다고 말해도, 내게 있어서는 진짜 특별한 의미를 지닌다. 지난 몇년간 이 날을 얼마나 기다리고 준비했던가. 서른을 기점으로, 그동안 쏟아부은 돈, 열정, 시간에 대해 나름 평가해보고 싶었다.</p>
<ul>
<li>그 값싼 제주대를 도중에 나올 수 밖에 없었던 그때의 상황.</li>
<li>안되는 영어 좀 해볼려고, 초소에 들고다니며 외웠던 단어장.</li>
<li>등록금 빚을 값기 위해, 전역하자마자 시작한 감귤상자 까대기.</li>
<li>다시 늦게 시작한 만큼, 쌓여버린 각종 책들과 지세운 밤들.</li>
<li>개발자가 내 길이 아닌가 진지하게 고민해 봤던 첫번째 회사.</li>
<li>어설프게 편입을 준비하다, 축낸 시간과 돈.</li>
<li>진지하고 치열하게 개발했던, 많은 상처를 받았던 데빌메이커.</li>
<li>삶에 치여서인지, 너무 나도 늦게 찾아온 애잔한 감정.</li>
</ul>
<p>지금 생각해도 가슴이 아리는 굵직한것들만 나열해봤는데, 이 외에도 사건 사고들이 많았다. 온, 오프라인 상에 만났던 사람들과의 에피소드들은 아직도 눈을 감으면 생생히 떠오르는 추억들이다. 아... 진짜 20대 기억이 더듬어 보니 울컥하네. 눈물도 많이 흘리고, 화도 많이 내고, 밤도 많이 지세우면서, 넘어지고 일어서기를 반복했던것 같다.</p>
<p>특히, 올해(2014년)가 재미있었던게, 연초부터, 인연들이 서로 엇돌고 맞아들어가는게 눈에 보이는데 너무 힘들고, 재미있다. - 진짜, 작년 그 <code>헬게이트</code>에서 빠져나온게 신의 한수인듯!</p>
<p>지나온걸 쭉 보니, 어디서부터 시작했는가는 별로 중요하지 않다는걸 다시금 느낀다. 현재 내가 여기에 있고, 앞으로 재미있는게 엄청 많이 남아있다는 것을 알기에...</p>
<p>여기까지 왔다. 자 다시 가보자. 뒤는 충분히 돌아봤다. 챙겨가고 싶은건 많지만, 놔버리자. 더 이상 주저할 수 없다. 비록 엉성하지만 다시 출발한다 하더라도 문제가 없다.</p>
<p>남들이 보기엔 화려하긴커녕, 평범하지도 못해보일지도 모르겠지만. <code>안녕, 내게 있어 그 어떠한 것보다도 소중하고 찬란했던 20대여</code>.</p>
<p>ps. 이 글을 찾을 수 있으실지는 잘 모르겠습니다. 나이가 많고 적음을 떠나, 부족한 저를 좋게 봐주시고, 조언해주시며, 인정해 주신 분들이 있었기에, 이 자리까지 올 수 있었습니다. <code>진심으로 감사드립니다</code>.</p>
skype봇 sevabot의 한글명령어 문제 해결2014-09-04T00:00:00+00:002014-09-04T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/sevabot_hangul/<h2 id="sevabotiran">sevabot이란?</h2>
<ul>
<li><a href="http://sevabot-skype-bot.readthedocs.org/">http://sevabot-skype-bot.readthedocs.org/</a></li>
<li>Skype4Py 프레임워크를 기반으로한, 스카이프 봇 프로그램.</li>
</ul>
<h2 id="munjeneun">문제는?</h2>
<ul>
<li>한글 명령어가 안먹히는 문제가 있음.</li>
<li>파이썬2에선 문자열 다룰때 x신같은게 꼭 인코딩 문제가 있음.</li>
<li>윈도우 경우, <code>utf-8</code>, <code>cp949</code> 관련 인코딩 문제가 있으며.</li>
<li>맥인 경우, <code>utf-8</code>뿐만 아니라, <a href="http://en.wikipedia.org/wiki/Unicode_equivalence">NFD</a>문제까지 있다.</li>
</ul>
<h2 id="haeggyeocaegheu">해결책은?</h2>
<ul>
<li><code>settings.py</code>의 <code>MOUDLE_PATHS</code>를 유니코드 문자열로 바꿔주고.</li>
</ul>
<pre data-lang="python" style="background-color:#2b303b;color:#c0c5ce;" class="language-python "><code class="language-python" data-lang="python"><span> </span><span style="color:#bf616a;">MODULE_PATHS </span><span>= [</span><span style="color:#b48ead;">u</span><span>"</span><span style="color:#a3be8c;">modules</span><span>"]
</span></code></pre>
<ul>
<li>
<p><code>NFD</code>문제 해결을 위한, <a href="https://raw.github.com/sublee/hangulize/master/hangulize/hangul.py">Hye-Shik Chang 님의 hangul.py</a> 을 <code>sevabot/hangul.py</code>로 저장.</p>
</li>
<li>
<p><code>sevabot/bot/module.py</code> 수정.</p>
</li>
</ul>
<pre data-lang="python" style="background-color:#2b303b;color:#c0c5ce;" class="language-python "><code class="language-python" data-lang="python"><span style="color:#65737e;"># 기본 인코딩을 utf-8로 바꿔주고
</span><span style="color:#b48ead;">import </span><span>sys
</span><span style="color:#96b5b4;">reload</span><span>(sys)
</span><span>sys.</span><span style="color:#bf616a;">setdefaultencoding</span><span>('</span><span style="color:#a3be8c;">utf-8</span><span>')
</span><span>
</span><span style="color:#b48ead;">from </span><span>sevabot.plugins </span><span style="color:#b48ead;">import </span><span>hangul
</span><span>
</span><span>
</span><span style="color:#65737e;"># windows 인코딩을 위한 threaded_run 함수 수정.
</span><span>
</span><span> </span><span style="color:#b48ead;">if </span><span>sys.platform == '</span><span style="color:#a3be8c;">win32</span><span>':
</span><span> env = os.environ.</span><span style="color:#bf616a;">copy</span><span>()
</span><span> env["</span><span style="color:#a3be8c;">SKYPE_USERNAME</span><span>".</span><span style="color:#bf616a;">encode</span><span>("</span><span style="color:#a3be8c;">utf-8</span><span>")] = username.</span><span style="color:#bf616a;">encode</span><span>("</span><span style="color:#a3be8c;">utf-8</span><span>")
</span><span> env["</span><span style="color:#a3be8c;">SKYPE_FULLNAME</span><span>".</span><span style="color:#bf616a;">encode</span><span>("</span><span style="color:#a3be8c;">utf-8</span><span>")] = full_name.</span><span style="color:#bf616a;">encode</span><span>("</span><span style="color:#a3be8c;">utf-8</span><span>")
</span><span>
</span><span> p_args = [arg.</span><span style="color:#bf616a;">encode</span><span>('</span><span style="color:#a3be8c;">cp949</span><span>') </span><span style="color:#b48ead;">for </span><span>arg </span><span style="color:#b48ead;">in </span><span>args]
</span><span> process = subprocess.</span><span style="color:#bf616a;">Popen</span><span>(p_args, </span><span style="color:#bf616a;">stdout</span><span>=subprocess.</span><span style="color:#bf616a;">PIPE</span><span>, </span><span style="color:#bf616a;">stderr</span><span>=subprocess.</span><span style="color:#bf616a;">STDOUT</span><span>, </span><span style="color:#bf616a;">shell</span><span>=</span><span style="color:#d08770;">True</span><span>, </span><span style="color:#bf616a;">env</span><span>=env)
</span><span> out = process.</span><span style="color:#bf616a;">communicate</span><span>()[</span><span style="color:#d08770;">0</span><span>]
</span><span> </span><span style="color:#b48ead;">return </span><span>out.</span><span style="color:#bf616a;">decode</span><span>("</span><span style="color:#a3be8c;">utf-8</span><span>")
</span><span>
</span><span>
</span><span style="color:#65737e;"># osx에 NFD문제 해결을 위한 load_modules 함수 수정
</span><span>
</span><span> </span><span style="color:#b48ead;">if </span><span>sys.platform == '</span><span style="color:#a3be8c;">darwin</span><span>':
</span><span> body = hangul.</span><span style="color:#bf616a;">conjoin</span><span>(body.</span><span style="color:#bf616a;">decode</span><span>('</span><span style="color:#a3be8c;">utf-8</span><span>'))
</span><span>
</span></code></pre>
<h2 id="unaahisneun-munjejjeo">남아있는 문제점.</h2>
<ul>
<li>윈도우즈 같은 경우 bat파일을 실행시킬 경우, output이 cp494인데, 기존 utf-8인코딩과 cp494인코딩을 동시에 지원하기에는 에로사항이 있다.</li>
</ul>
<h2 id="jjaheoddoe-peurojjeteu">작업된 프로젝트.</h2>
<ul>
<li><a href="https://github.com/netpyoung/sevabot">https://github.com/netpyoung/sevabot</a></li>
</ul>
<h2 id="camgo">참고.</h2>
<ul>
<li><a href="http://blog.naver.com/amurorei82/10188770513">OSX에 Skype bot - sevabot 설치하기</a></li>
<li><a href="https://github.com/opensourcehacker/sevabot/issues/58">sevabot issue / With windows many problem... #58</a></li>
<li><a href="https://github.com/drypot/writings/blob/master/categories/mac/mac-os-x-filename-encoding.md">Mac OS X Filename Encoding</a></li>
</ul>
Timl example (:Ls Command)2014-04-07T00:00:00+00:002014-04-07T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/timl_example_ls_command/<h2 id="timliran">Timl이란?</h2>
<ul>
<li><a href="https://github.com/tpope/timl">https://github.com/tpope/timl</a></li>
<li>lisp 방언(dialect)중 하나로, VimL로 컴파일된다. (Clojure가 VimL을 만났다고 생각하면 된다.)</li>
<li>4월 1일날 공개해서, 만우절 낚시인줄 알았는데 잘돌아간다..</li>
<li><a href="http://www.reddit.com/r/Clojure/comments/21x6hr/sbcl_with_support_for_clojure_xpost_from_rlisp/">2014.04.01 sbcl 클로져 지원 낚시</a></li>
</ul>
<h2 id="feature">Feature.</h2>
<ul>
<li>매크로지원:<code>syntax quoting</code>, <code>&form</code>, <code>&env</code>.</li>
<li>레퍼런스타입 지원: vars, atoms, futures.</li>
<li>내장 함수 사용: <code>(#*toupper "TimL is pretty neat")</code></li>
<li>Vim command 호출: <code>(execute "wq")</code></li>
<li>기타 등등.. (공식페이지 참조.)</li>
</ul>
<h2 id="example">Example.</h2>
<ul>
<li><code>:!ls</code>로 Vim <code>밖</code>에서 파일목록을 볼 수 있지만, Vim 버퍼 <code>안</code>에서 ls 명령결과를 확인할 수 있는 플러그 인을 작성해보자.</li>
</ul>
<p>플러그인 구조.</p>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span> [~/.vim]$ tree xxx
</span><span> xxx
</span><span> ├── autoload
</span><span> │ └── xxx
</span><span> │ └── core.tim
</span><span> └── plugin
</span><span> └── xxx.vim
</span></code></pre>
<p>vimrc</p>
<pre data-lang="vim" style="background-color:#2b303b;color:#c0c5ce;" class="language-vim "><code class="language-vim" data-lang="vim"><span style="color:#b48ead;">if </span><span style="color:#8fa1b3;">has</span><span>(</span><span style="color:#a3be8c;">'vim_starting'</span><span>)
</span><span> </span><span style="color:#96b5b4;">set</span><span> runtimepath+</span><span style="color:#b48ead;">=~</span><span style="color:#96b5b4;">/.vim/</span><span>xxx/
</span><span style="color:#b48ead;">endif
</span></code></pre>
<p>xxx/autoload/xxx/core.tim</p>
<pre data-lang="clojure" style="background-color:#2b303b;color:#c0c5ce;" class="language-clojure "><code class="language-clojure" data-lang="clojure"><span>(</span><span style="color:#bf616a;">ns</span><span> xxx.core)
</span><span>
</span><span>
</span><span style="color:#65737e;">;; ref: http://clojuredocs.org/clojure_core/clojure.core/->>
</span><span style="color:#65737e;">;; timl에는 `->`만 들어가 있고, 아직 `->>`는 들어가 있지 않다.
</span><span style="color:#65737e;">;; 기존 clojure 소스카피
</span><span>
</span><span>
</span><span>(</span><span style="color:#b48ead;">defmacro </span><span style="color:#8fa1b3;">->>
</span><span> ([x form] (</span><span style="color:#bf616a;">if </span><span>(</span><span style="color:#bf616a;">seq?</span><span> form)
</span><span> (</span><span style="color:#bf616a;">with-meta </span><span>`(~(</span><span style="color:#bf616a;">first</span><span> form) ~@(</span><span style="color:#bf616a;">next</span><span> form) ~x) (</span><span style="color:#bf616a;">meta</span><span> form))
</span><span> (</span><span style="color:#bf616a;">list</span><span> form x)))
</span><span> ([x form & more]
</span><span> `(</span><span style="color:#bf616a;">->> </span><span>(</span><span style="color:#bf616a;">->> </span><span>~x ~form) ~@more)))
</span><span>
</span><span>
</span><span>(</span><span style="color:#b48ead;">defn </span><span style="color:#8fa1b3;">ls </span><span>[& args]
</span><span> (</span><span style="color:#bf616a;">->></span><span> args
</span><span> (</span><span style="color:#bf616a;">concat </span><span>["</span><span style="color:#a3be8c;">ls</span><span>" "</span><span style="color:#a3be8c;">-al</span><span>"])
</span><span> (</span><span style="color:#bf616a;">join </span><span>" ")
</span><span> (#*system)
</span><span> (</span><span style="color:#bf616a;">println</span><span>)))
</span></code></pre>
<p>xxx/plugin/xxx.vim</p>
<pre data-lang="vim" style="background-color:#2b303b;color:#c0c5ce;" class="language-vim "><code class="language-vim" data-lang="vim"><span style="color:#b48ead;">if </span><span style="color:#8fa1b3;">exists</span><span>(</span><span style="color:#a3be8c;">"g:loaded_xxx"</span><span>) </span><span style="color:#b48ead;">|| </span><span style="color:#bf616a;">v:version</span><span> < </span><span style="color:#d08770;">700 </span><span style="color:#b48ead;">|| </span><span style="color:#bf616a;">&cp
</span><span> finish
</span><span style="color:#b48ead;">endif
</span><span>
</span><span style="color:#96b5b4;">let </span><span style="color:#bf616a;">g:loaded_xxx</span><span> = </span><span style="color:#d08770;">1
</span><span>
</span><span style="color:#96b5b4;">command</span><span>! -bang -complete=file -nargs=</span><span style="color:#b48ead;">*</span><span> Ls call </span><span style="color:#8fa1b3;">xxx#core#ls</span><span>(<f-args>)
</span></code></pre>
<h2 id="testing">Testing.</h2>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>Command. (in Vim)
</span><span>
</span><span> :Ls ~/.vim/conf.d/ ~/.vim/xxx/
</span><span>
</span><span>Result.
</span><span>
</span><span> /home/pyoung/.vim/conf.d/:
</span><span> total 20
</span><span> drwxrwxr-x 2 pyoung pyoung 4096 4월 7 00:54 .
</span><span> drwxr-xr-x 7 pyoung pyoung 4096 4월 7 03:59 ..
</span><span> -rw-rw-r-- 1 pyoung pyoung 2092 4월 7 00:27 00_neobundle.vim
</span><span> -rw-rw-r-- 1 pyoung pyoung 3518 11월 16 05:46 01_init.vim
</span><span> -rw-rw-r-- 1 pyoung pyoung 60 4월 7 00:54 02_tim.vim
</span><span>
</span><span> /home/pyoung/.vim/xxx/:
</span><span> total 16
</span><span> drwxrwxr-x 4 pyoung pyoung 4096 4월 7 03:19 .
</span><span> drwxr-xr-x 7 pyoung pyoung 4096 4월 7 03:59 ..
</span><span> drwxrwxr-x 3 pyoung pyoung 4096 4월 7 00:54 autoload
</span><span> drwxrwxr-x 2 pyoung pyoung 4096 4월 7 03:28 plugin
</span><span>
</span><span>
</span><span> Press ENTER or type command to continue
</span></code></pre>
<h2 id="problem">Problem.</h2>
<ul>
<li>캐쉬 문제.
<ul>
<li>2014.04.07 현재 캐쉬문제가 있다. 한번 컴파일이되면, 다음 변경시 재 컴파일이 안 된채로 에러를 뱉는 문제가 있다.</li>
<li><a href="https://github.com/tpope/timl/issues/12">https://github.com/tpope/timl/issues/12</a></li>
</ul>
</li>
<li>캐쉬 문제 해결.</li>
<li><code>rm -rf ~/.cache/vim/timl/</code>로 캐쉬를 날려주자.</li>
</ul>
<h2 id="tip">Tip.</h2>
<ul>
<li><code>:Wepl</code>: 현재 파일을 로드하면서, repl을 띄움.</li>
<li><code>:TLsource %</code>: 현재 파일을 다시 읽음.(이 역시 캐쉬문제가 발생하면 캐쉬파일 지워주는 수밖에..)</li>
</ul>
<h1 id="reference">Reference.</h1>
<ul>
<li>공식사이트:
<ul>
<li><a href="https://github.com/tpope/timl">https://github.com/tpope/timl</a></li>
</ul>
</li>
<li>tslime2.vim:
<ul>
<li>vim에서 tmux에게 명령어를 보내주는 플러그인.</li>
<li><a href="https://github.com/sjl/tslime2.vim">https://github.com/sjl/tslime2.vim</a></li>
</ul>
</li>
</ul>
Unity UTF8 with BOM2013-07-04T00:00:00+00:002013-07-04T00:00:00+00:00Unknownhttps://netpyoung.github.io/blog/unity_utf8_with_bom/<h2 id="bomiran">BOM이란?</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Byte_order_mark">https://en.wikipedia.org/wiki/Byte_order_mark</a></li>
<li>BOM이란 byte order mark의 약자로, 파일 혹은 스트림의 바이트 순서(엔디안)을 나타내기 위해 사용되는 Unicode 문자.</li>
</ul>
<h2 id="utf-8yi-bomheu">UTF-8의 BOM은?</h2>
<ul>
<li><code>EF BB BF</code></li>
</ul>
<h2 id="munjeneun">문제는?</h2>
<ul>
<li>UTF8자체가 엔디안 문제가 생기지 않음. 즉 UTF8에는 BOM이 필요없다는 것.</li>
<li>Unity에서 기본으로 소스코드를 생성하면 UTF8 without BOM문서가 나옴.</li>
<li>근데, 뻐킹 유니티에서는 BOM이 없으면 코드를 이상하게 읽음. (한글 포함시)</li>
<li>tip) 꼭 한글 주석 달고 마침표로 끝을 알려주자.</li>
</ul>
<h2 id="haeggyeocaegheu">해결책은?</h2>
<ul>
<li>Unity에는 AssetPostprocessor란 클래스가 있고, OnPostprocessAllAssets란 메소드가 있는데, 이를 이용하면 파일 생성시 마다 BOM을 추가시켜줄 수 있다.</li>
</ul>
<h1 id="inspired">inspired</h1>
<ul>
<li><a href="http://debuglog.tumblr.com/post/26550984743/utf-8">http://debuglog.tumblr.com/post/26550984743/utf-8</a></li>
<li><a href="https://github.com/sharkattack51/Unity-EditorScript/blob/master/AssetPostprocessUTF8Encode.cs">https://github.com/sharkattack51/Unity-EditorScript/blob/master/AssetPostprocessUTF8Encode.cs</a></li>
</ul>
<h2 id="example-source">example source</h2>
<p>SimpleUtf8BOM.boo</p>
<pre data-lang="ruby" style="background-color:#2b303b;color:#c0c5ce;" class="language-ruby "><code class="language-ruby" data-lang="ruby"><span>import </span><span style="color:#bf616a;">UnityEngine
</span><span>
</span><span>import </span><span style="color:#ebcb8b;">System</span><span>.IO
</span><span>
</span><span style="color:#b48ead;">class </span><span style="color:#ebcb8b;">SimpleUtf8BOM </span><span>(</span><span style="color:#bf616a;">AssetPostprocessor</span><span>):
</span><span>
</span><span> static </span><span style="color:#b48ead;">def </span><span style="color:#8fa1b3;">OnPostprocessAllAssets</span><span>(
</span><span> </span><span style="color:#bf616a;">imported_assets as </span><span>(</span><span style="color:#bf616a;">string</span><span>),
</span><span> </span><span style="color:#bf616a;">deleted_assets as </span><span>(</span><span style="color:#bf616a;">string</span><span>),
</span><span> </span><span style="color:#bf616a;">moved_assets as </span><span>(</span><span style="color:#bf616a;">string</span><span>),
</span><span> </span><span style="color:#bf616a;">moved_from_asset_paths as </span><span>(</span><span style="color:#bf616a;">string</span><span>)) :
</span><span>
</span><span> </span><span style="color:#b48ead;">for</span><span> asset </span><span style="color:#b48ead;">in</span><span> imported_assets :
</span><span> checkAndWriteBOM(asset)
</span><span>
</span><span>
</span><span> static </span><span style="color:#b48ead;">def </span><span style="color:#8fa1b3;">checkAndWriteBOM</span><span>(</span><span style="color:#bf616a;">fpath as string</span><span>) :
</span><span> </span><span style="color:#65737e;"># check: is source file?
</span><span> ext = </span><span style="color:#ebcb8b;">Path</span><span>.GetExtension(fpath)
</span><span> </span><span style="color:#b48ead;">unless </span><span>(['</span><span style="color:#a3be8c;">.cs</span><span>', '</span><span style="color:#a3be8c;">.js</span><span>', '</span><span style="color:#a3be8c;">.boo</span><span>']).Contains(ext) :
</span><span> </span><span style="color:#b48ead;">return</span><span>;
</span><span>
</span><span> </span><span style="color:#65737e;"># check: is with bom_utf8?
</span><span> fbytes = </span><span style="color:#ebcb8b;">File</span><span>.ReadAllBytes(fpath)
</span><span>
</span><span> front_3bytes = fbytes[:</span><span style="color:#d08770;">3</span><span>]
</span><span> bom_utf8 = array(byte, (</span><span style="color:#d08770;">0xEF</span><span>, </span><span style="color:#d08770;">0xBB</span><span>, </span><span style="color:#d08770;">0xBF</span><span>))
</span><span>
</span><span> </span><span style="color:#65737e;"># write bom
</span><span> </span><span style="color:#b48ead;">unless</span><span> front_3bytes == bom_utf8 :
</span><span> </span><span style="color:#ebcb8b;">File</span><span>.WriteAllBytes(fpath, bom_utf8 + fbytes)
</span><span> </span><span style="color:#ebcb8b;">Debug</span><span>.Log("</span><span style="color:#a3be8c;">append bom complete : ${fpath}</span><span>")
</span></code></pre>