**라이벌(Rival)**은 동등 혹은 그 이상의 실력은 가진 경쟁자를 의미한다 적수라고도 한다.
위키백과
라이벌이라는 존재는 존재 자체만으로 동기부여가 됩니다. 이번 포스트에서는 블로그를 시작하면서 생긴 라이벌 code block을 다뤄보도록 하겠습니다.
Prologue
Code Block
Before Patch
aria 테마를 설치하고 처음 code block을 보고 이야 이거 물건이다라는 생각이 들었습니다. 뭐랄까 감성을 자극했다고 해야되나요? 쨌든 잘 다듬어서 써야겠다 라고 생각했습니다. 하지만 포스트 몇개를 올리게 되고, 블로그의 세팅을 변경하다보니 깨닫게 된 사실이 있었습니다.
초기 code block은 왼쪽 상단의 복사 버튼, 동작은 하지 않지만 우측 상단의 최소화, 최대화, 닫기 버튼이 있고, 작업 표시줄 부분엔 code라는 문자열이 고정되어 있습니다.
Another dead pixel
그렇다면 무엇이 문제일까요. 눈치가 빠르신 분이라면 아시겠지만 code block의 제목 부분이 code로 고정되어있습니다. 한가지 더 문제점이 있는데 이는 Mark Down 파일 작성 시 code block에 파일명을 넣어서 작성하는 경우 입니다.
오늘 수고해주실 코드블럭입니다.
A wasted of Time
First step
사태 파악
변경을 위해선 먼저 저 제목 부분이 어떤 tag를 달고 있는지 확인해야 합니다. chorme 개발자 도구를 활용해 봅시다.
확인해 보니 file name 부분은 figcaption tag를 사용하고 있고, title bar 부분은 div.code-titlebar tag를 사용하고 있습니다.
modify
첫 삽질은 title bar에 code를 지우는 것이였습니다. 먼저 원본 코드를 보도록 하겠습니다.
16번째 줄을 보면 “code”문자열을 지우면 제목 표시줄의 code를 지울 수 있습니다.
제목 표시줄이 깔끔해졌습니다.
하지만 file name을 사용한다면 디자인이 구려집니다. 그렇다고 제목을 포기할 수는 없습니다. 저는 code block에 제목을 다는 법을 알게 되버렸으니까요.
Second step
사태파악
두번째로 생각한 내용은 제목 표시줄에 표시할 수 없다면 file name css의 디자인을 code block에 맞추는 것이었습니다. 그리고 제목 표시줄 왼쪽에 copy 기능이 file name을 적으면 copy 기능이 제대로 동작하지 않는 버그도 발견했습니다. 아쉽게도 이번 step에서는 해당 버그를 고치진 못했고 버그가 있다는 것만 확인했습니다.
modify
변경해야될 figcaption tag의 css파일을 찾을 수 없었기에 index.styl 파일에 추가했습니다.
한동안 figcaption에 css를 적용해 code block을 사용했습니다. 아무래도 front end 부분은 깊게 다뤄본 적이 없어서 지금 수준으론 문제를 해결할 수 없다고 판단해 공부를 더 했습니다.
The end
시간이 날때마다 aria의 코드를 보고 나름 구조를 파악하다 보니 DOM의 사용법과 JS의 사용법 등을 실험하다보니 copy버그와 titebar를 수정 할 수 있었습니다.
Copy
code block에 file name을 사용한다면 copy 기능이 왜 동작하지 않는지 알아야 했습니다. 수정 전의 원본 코드를 확인해보겠습니다.
./themes/aria/layout/_layout.njk
1 2 3 4 5 6
cb = newClipboardJS("button.copy", { "target": function (trigger) { // Get target element by DOM API. return trigger.parentNode.parentNode.nextElementSibling.firstChild.firstChild.firstChild.lastChild.firstChild.firstChild; } });
해당 코드는 _layout.njk 파일의 일부입니다. copy button을 click하면 return에 해당하는 object를 clip board에 copy하는 기능을 가지고 있습니다. 해당 코드가 실행되면 file name이 없는 경우에는 정상적으로 copy하지만 file name이 있는 경우에는 아무런 동작을 하지 않습니다.
file name이 있어도 code를 return 할 수 있도록 return 부분을 수정해 보도록 하겠습니다.
./themes/aria/layout/_layout.njk
1 2 3 4 5 6 7
cb = newClipboardJS("button.copy", { "target": function (trigger) { // Get target element by DOM cd API. return trigger.parentNode.parentNode.nextElementSibling.lastChild.lastChild.lastChild.lastChild; //return trigger.parentNode.parentNode.nextElementSibling.firstChild.firstChild.firstChild.lastChild.firstChild.firstChild; } });
file name을 사용하더라도 code만 clip board에 복사 해 올 수 있습니다.
Title bar
titlebar를 수정하면서 했던 삽질 중에 가장 기억에 남는 것은 code block의 모든 text를 읽어와서 조건문을 사용해 file name만 추출하는 방법이었습니다. 물론 code block 마다 조건문이 동작했기 때문에 포스팅에 code block이 많거나 code block의 text가 많다면 페이지 로딩 시간이 3~5초 길게는 10초 이상도 걸렸던 적이 있습니다. copy 기능의 버그를 수정하면서 했던 몇가지 실험을 성공해 title bar에도 적용할 수 있었습니다. 아래는 원본 코드의 일부분입니다.
모니터를 샀을 때 가장 신경쓰이는 것은 불량화소 입니다. 불량화소가 10개가 넘어가면 아 불량품 받았네 하고 별 생각 없이 교환을 받거나 반품 받겠지만 불량화소가 1개, 2개 있다면 정말 난감해집니다. 괜히 신경쓰이고 그렇다고 이거 하나 때문에 바꿔야되나 싶고 내 뽑기운이 이정도 밖에 안되는건가? 하며 자괴감 들고 괴롭기도 합니다. 하지만 블로그는 다릅니다. 마음에 안드는 게 있다면 바꿀 수 있기 때문입니다. 이번 포스트에서는 불량화소 같은 것들을 바꿔보도록 하겠습니다.
Prologue
뭐가 그렇게 마음에 들지 않는걸까
???: 언니 저 맘에 안들죠? !!!: 눈을 왜 그렇게 떠?
튜닝을 할꺼면 어중간하게 해서는 안됩니다. 마음에 들 때 까지 해야 꽤 오랜시간 신경 안쓰고 사용할 수 있기 때문입니다. 조금 쓰다가 이거 맘에 안든다고 바꿔버리고, 저거 맘에 안든다고 바꿔버리면 정작 본 작업에 집중 할 수 없게 되니까요.
이번에 바꿀 것들은 다음과 같습니다.
Archive, Catetories, Tags 페이지의 문구
줄간격
Scroll 두께
aria theme의 구조
분해는 조립의 역순이라는 말의 뜻은 분해를 해봐야 다시 조립을 할 수 있다는 의미입니다. 그렇다고 하나하나 코드를 들여다 보기엔 시간도 별로 없고 귀찮기도 하고 그래서 간단하게 훑고 지나가겠습니다.
structure
1 2 3 4 5 6 7 8 9 10
. # ./theme/aria/ ├── languages # blog 언어 파일 ├── layout # Nunjucks 파일 ├── scripts # tag에 사용할 정규 표현식 js 파일 ├── source # blog 디자인의 대부분을 담당하는 폴더 | ├── css # css 파일 | └── fonts # font 파일 | └── images # logo, background, avatar 이미지파일 | └── js # javascript 파일 ├── some files
.njk 파일도 있으면서 css파일도 있고, scripts 폴더도 있으면서 js 폴더도 있는 신기한 구조지만 뭐 어쩌겠습니까. 제가 만든것이 아니기 때문에 이것만으로도 감지덕지 하면서 고쳐 써야죠.
손댄 부분은 languages, layout, ./source/css이 세가지 부분 입니다. 간단한 부분부터 시작하겠으나 이번 경우엔 특히나 삽질을 많이 했던 부분입니다. 했던 삽질을 같이 첨부하고 싶지만 포스트가 너무 길어질것 같으니 다음 포스트로 작성하겠습니다.
Change
Archive, Categories, Tags 문구 변경
Whats the matter?
저는 깔끔한게 좋으니 치워버리겠습니다.
modify
./themes/aria/languages/en.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14
postcount: none:''#You have no post, write now! one:''#You have %d post, keep on! more:''#You have %d posts!
tagcount: none:''#You have no tag, create now! one:''#You have %d tag, keep on! more:''#You have %d tags!
categorycount: none:''#You have no category, create now! one:''#You have %d category, keep on! more:''#You have %d categories!
# Select all your webfont in a CDN like Google Fonts, and then copy `href` property in the `<link>` tag, like `link: //fonts.googleapis.com/css?family=Lato|Roboto+Condensed|Skranji|Ubuntu|Ubuntu+Mono`. # Then set different fonts to different parts here. custom_font: enable:true link: -//cdn.jsdelivr.net/gh/moonspam/NanumSquare@1.0/nanumsquare.css -//cdn.rawgit.com/innks/NanumSquareRound/master/nanumsquareround.css -//cdn.jsdelivr.net/gh/joungkyun/font-d2coding/d2coding.css all:'NanumSquare' title:'NanumSquare' subtitle:'NanumSquare' main:'NanumSquareRound' code:'D2Coding'
개인적으로 naver의 폰트를 정말 좋아합니다. 가독성도 좋고 둥글 둥글 하니 귀엽기도 한 것같고 그렇습니다.
Change Code Highlighting
저는 code highlignting은 무조건 atom-one-dark theme을 사용합니다. vscode도 그렇고 theme를 변경할 수 있다면 대부분 atom-one-dark를 사용합니다.
theme를 변경하면서 기본적인 설정도 변경했습니다. 언어는 설정하지 않으면 default language인 중국어로 표시될 것이고, highlighting 설정을 하지않으면 이 theme을 쓰는 이유가 없어지게 되니 설정하도록 합시다. 그 밖에 다른 설정을 변경하시는 분들은 hexo documenation을 참조하시기 바랍니다.
blog를 꾸미기 위해서는 먼저 post를 작성하는 방법을 알아야 합니다. 작성보다 더 중요한 것은 삭제와 변경입니다. 나름 공부를 하고 post를 썼지만 해당 글이 잘못된 정보를 전파하는 똥글이 되버린다면 아 내가 이런 똥글을 썼다고? 인 상황이 발생할 수 있으니까요.
Posting
Writing
1
hexo new [layout] <title>
post, draft, page를 생성하기 위한 명령어입니다. 저는 post를 쓸 때 한번에 쓰는 법이 없기 때문에 draft로 작성 후 post로 publish합니다. draft에 대한 설명은 아래를 참고해 주세요.
Modify the Post
1 2
# source/_posts에서 .md파일 변경 후 hexo g -d
post의 내용을 변경하는 방법은 매우 간단합니다. 기존에 작성한 post파일을 수정하기만 하면 됩니다. 변경 후 다시 랜더링이 필요합니다.
Delete
1 2
# source/_posts에서 .md파일 삭제 후 hexo g -d
post를 삭제하는 방법은 변경 방법과 동일합니다. source/_posts 폴더에 삭제하고자 하는 post 파일(.md)을 삭제한 후 deploy 하면 됩니다.
layout
Hexo에는 Layout이라는 개념이 존재합니다. 각 Layout의 이름과 저장되는 위치는 다음과 같습니다.
post(게시글) : source/_posts
page(페이지) : source/
draft(초안) : source/_draft
저는 주로 post와 draft를 사용해 글을 작성합니다. page는 제가 post를 만들면서 한번도 사용해 보진 않았습니다. 앞으로도 사용할 일은 없을 것 같습니다.
draft는 post를 작성할 때 임시 저장의 개념으로 사용할 수 있습니다. Draft로 작성 한 파일은 랜더링 되지 않습니다. 제가 블로그에 post를 작성할 때 맨 처음 생성하는 파일입니다.
1
hexo g -d --draft
draft도 랜더링 하고자 할 땐 랜더링 시 --draft옵션을 추가 해주면 됩니다.
1
render_drafts = true
_config.yml의 render_drafts 옵션을 true로 설정하면, --draft 옵션 없이 랜더링 해도 draft가 같이 랜더링 됩니다.
1
hexo publish post <title>
작성이 완료된 draft를 post로 변경하는 방법입니다. 이 명령어를 칠 때가 가장 뿌듯합니다.
파일명
post의 제목과 동일하게 작성됩니다. _config.yml파일의 new_post_name 옵션을 변경 해 기본 파일명을 변경할 수 있습니다.
사용할 수 있는 placeholder는 다음과 같습니다
:title - post 제목(소문자, 공백은 ‘-‘ 하이픈으로 변경)
:year - 연도 생성
:month - 월 생성(ex. 04)
:i_month - 월 생성(ex. 4)
:day - 일 생성(ex. 07)
:i_day - 일 생성(ex. 7)
Asset Folder
전역 Asset 폴더
1
![](/images/image.jpg)
source 폴더에 위치해 있으며 image, CSS, JavaScript가 저장되는 폴더입니다. 포스트에서 이미지를 사용하고싶을 땐 /source/image 폴더에 이미지를 넣고 다음과 같이 호출하면 이미지를 사용할 수 있습니다.
Post Asset 폴더
1
post_asset_folder = true
post 단위로 멀티미디어 파일을 관리하고자 할 땐 _config.yml 파일의 post_asset_folder를 true로 설정하면 포스트 생성 시 동일한 이름의 폴더가 생성됩니다. 해당 폴더는 각 포스트의 Asset 폴더로 사용됩니다. 저는 늘어가는 post와 함께 증식해가는 image의 이름을 구분해 저장하는 것은 매우 귀찮을 것 같아 Post Asset 폴더를 사용했습니다.
blog를 꾸미기 위해서는 먼저 post를 작성하는 방법을 알아야 합니다. 작성보다 더 중요한 것은 삭제와 변경입니다. 나름 공부를 하고 post를 썼지만 해당 글이 잘못된 정보를 전파하는 똥글이 되버린다면 아 내가 이런 똥글을 썼다고? 인 상황이 발생할 수 있으니까요.
Posting
Writing
1
hexo new [layout] <title>
post, draft, page를 생성하기 위한 명령어입니다. 저는 post를 쓸 때 한번에 쓰는 법이 없기 때문에 draft로 작성 후 post로 publish합니다. draft에 대한 설명은 아래를 참고해 주세요.
Modify the Post
1 2
# source/_posts에서 .md파일 변경 후 hexo g -d
post의 내용을 변경하는 방법은 매우 간단합니다. 기존에 작성한 post파일을 수정하기만 하면 됩니다. 변경 후 다시 랜더링이 필요합니다.
Delete
1 2
# source/_posts에서 .md파일 삭제 후 hexo g -d
post를 삭제하는 방법은 변경 방법과 동일합니다. source/_posts 폴더에 삭제하고자 하는 post 파일(.md)을 삭제한 후 deploy 하면 됩니다.
layout
overview
Hexo에는 Layout이라는 개념이 존재합니다. 각 Layout의 이름과 저장되는 위치는 다음과 같습니다.
post(게시글) : source/_posts
page(페이지) : source/
draft(초안) : source/_draft
저는 주로 post와 draft를 사용해 글을 작성합니다. page는 제가 post를 만들면서 한번도 사용해 보진 않았습니다. 앞으로도 사용할 일은 없을 것 같습니다.
draft는 post를 작성할 때 임시 저장의 개념으로 사용할 수 있습니다. Draft로 작성 한 파일은 랜더링 되지 않습니다. 제가 블로그에 post를 작성할 때 맨 처음 생성하는 파일입니다.
1
hexo g -d --draft
draft도 랜더링 하고자 할 땐 랜더링 시 --draft옵션을 추가 해주면 됩니다.
_config.yml
1
render_drafts=true
_config.yml의 render_drafts 옵션을 true로 설정하면, --draft 옵션 없이 랜더링 해도 draft가 같이 랜더링 됩니다.
1
hexo publish post <title>
작성이 완료된 draft를 post로 변경하는 방법입니다. 이 명령어를 칠 때가 가장 뿌듯합니다.
파일명
post의 제목과 동일하게 작성됩니다. _config.yml파일의 new_post_name 옵션을 변경 해 기본 파일명을 변경할 수 있습니다.
사용할 수 있는 placeholder는 다음과 같습니다
:title - post 제목(소문자, 공백은 ‘-‘ 하이픈으로 변경)
:year - 연도 생성
:month - 월 생성(ex. 04)
:i_month - 월 생성(ex. 4)
:day - 일 생성(ex. 07)
:i_day - 일 생성(ex. 7)
Asset Folder
전역 Asset 폴더
1
![](/images/image.jpg)
source 폴더에 위치해 있으며 image, CSS, JavaScript가 저장되는 폴더입니다. 포스트에서 이미지를 사용하고싶을 땐 /source/image 폴더에 이미지를 넣고 다음과 같이 호출하면 이미지를 사용할 수 있습니다.
Post Asset 폴더
1
post_asset_folder = true
post 단위로 멀티미디어 파일을 관리하고자 할 땐 _config.yml 파일의 post_asset_folder를 true로 설정하면 포스트 생성 시 동일한 이름의 폴더가 생성됩니다. 해당 폴더는 각 포스트의 Asset 폴더로 사용됩니다. 저는 늘어가는 post와 함께 증식해가는 image의 이름을 구분해 저장하는 것은 매우 귀찮을 것 같아 Post Asset 폴더를 사용했습니다.
예전부터 카카오 기술 블로그나 네이버 D2 기술 블로그의 글들을 보면서 블로그를 시작해 보고싶었습니다. 처음부터 멋진 글을 쓰는 것은 불가능하다는 것을 잘 알기에 포스트를 하나하나 늘려가는 것 부터 시작하는 것을 목표로 삼고 시작하고자 합니다.
설치 전에
블로그를 시작할 때 고려한 것들
블로그를 시작하면서 Jekyll, Octopress 같은 정적 사이트 생성기(Static Site Generator)를 사용할지, 네이버 블로그, Tistory같은 블로그 플랫폼을 사용해야 하는가에 대한 고민을 했습니다. 이런 고민을 하다 보니 어떤 것을 사용해야 할지 감이 잡히지 않아 블로그를 만들 때 생각해 봐야 할 것들을 목록화 했습니다.
마크다운(Markdown) 언어를 사용할 수 있는가?
포스트 생성 및 관리가 간편한가?
호스팅 비용은 무료거나 저렴한 편인가?
내 기준으로 설치와 커스터마이징이 간편한가?
위의 기준을 가지고 후보군을 찾았고 이들 중에서 제 기준에 가장 적합한 것을 사용하는 것으로 사용하자고 했고. 결론부터 말하면 Github + Hexo로 블로그 구축을 결정했습니다.
Github + (jekyll or Hexo)
Wordpress
Tistory
왜 Hexo를 사용했나?
제 기준에 있어서 설치와 커스터마이징이 쉽다는 것이 크게 작용했습니다. jekyll은 ruby on rails를 기반으로 하기에 커스터마이징과 코드를 수정하기 위해서 따로 공부를 해야 하지만 Hexo는 node.js를 사용하기 때문에 추가적인 공부가 필요 없었기 때문입니다. 그와 더불어 Hexo 공식문서가 한글로 번역되어 있다는 점, 플러그인 적용이 쉽다는 것도 선택의 이유가 되었습니다.
# Site title: ColorLion's IT Blog subtitle: Sec & ML & Dev description: keywords: Security, Machine Learning, Programming author: ColorLion language: en timezone: Asia/Seoul