글쓰기 메뉴

레일즈4 어플리케이션 이름 변경

2.x 버전에서 어플리케이션 이름 변경해봤었는데 '아, 그냥 프로젝트 새로 만들고 소스 카피가 좋겠다' 라는 생각이 들 정도로 변경해야 할 파일의 갯수가 찝찝한 기분을 지울 수 없었지.


그 이후로 한참 그럴 필요가 없었는데 이번에 기존 소스를 카피할 일이 생겼지.


레일즈 4.1.x 이상의 버전에서 단 2개의 파일에만 어플리케이션의 이름이 지정되어 있더군. 깔끔하게 정리된겨.

config/application.rb 파일에서 module 이름을 변경하고,

config/initializers/session_store.rb 파일에서는 세션 스토어의 키 이름만 변경해주면 끝!

수고하고 있는 루비 커뮤니티에 축복을! ㅋㅋ


+)

3버전이나 4.0.x 버전에서는 https://github.com/get/Rename 을 사용해서 깔끔하게 변경가능.


참고)

https://stackoverflow.com/questions/20988813/how-to-rename-rails-4-app/23753608#23753608?newreg=15907dbe38c743fa9f7aca841050ba57


어디서 왔지?
[["synd.kr", 45], ["unknown", 502], ["www.google.co.kr", 3]]
다른 글들
1 0
Square


Noto Sans KR 웹폰트 - 구글 폰트 얼리 억세스로 변경

구글 Noto 한국어 글꼴을 웹에서 마음껏!
구글 폰트 얼리 억세스에서 드디어 Noto Sans KR 웹폰트를 제공한다. 개인적으로 매우 기쁜일이 아닐 수 없다!!!
그간 Coderifleman 님께서 한땀한땀 작업해주신 서브셋을 서버에 올려놓고 웹폰트로 사용하고 있었다.
매우 적은 용량이지만 알 수 없는 압박감에 사용자가 없으니 트래픽도 없지 normal 과 bold weight 만 사용했었는데 이번 Early Access 에서 제공하는 Noto Sans KR 은 6가지 굵기를 지원한다니 기쁘지 아니한가!

유니코드 한글 11,172 자와 완성형 한글 코드(KS_X_1001), 옛한글이 포함되어 있으며 한자는 포함되어 있지 않다. 
원래 있었는지 이번에 같이 추가됐는지 모르겠는데 한글 뿐 아니라 Noto Sans JP 와 Noto Sans SC(간체, 번체는 언제...) 도 제공하고 있으니 글로벌 서비스에서 마구마구 써줘야겠다.
css 파일에 다음의 라인을 추가
2 0

인쇄 및 PDF 내려받기

인쇄버튼과 PDF 내려받기 기능이 추가됐습니다.
같은 방식으로 XML과 이미지 등 많이 쓰이는 형식으로 글을 내려받는 기능을 천천히(!) 추가할 계획입니다.
큰 쓰임이 없는 기능이겠으나 "입력"에만 집중하겠다는 씬디의 현재 컨셉과는 잘 맞는 기능인 것 같습니다. 생산된 콘텐츠의 유통과 사용은 기존방식과 망에 맡기는게 좋다는 (교체가 넘사벽) 생각입니다.
다음 업데이트는 손쉬운 조작을 위해 페북 공유를 OG로 변경하는 작업, 카톡이나 이메일 공유 등의 기초적인 공유 기능의 정리를 계획하고 있습니다.
쌓인 작업 중 우선 순위가 높은 작업은 "표 입력", "차트 입력", "폰트 및 디자인 수정", "파일 첨부" 등 입니다. 
끝!      
1 1

자바스크립트 - 파일크기 bytes, MB, GB 등으로 표현하기 + 쉼표로 천 단위 끊어서 표시하기

숫자와 관련된 Helper 들 대부분 human readable 이라고 하는데 이거 한국말로 제목쓰려니까 도무지 뭐라고 해야하는지 모르겠네. 인간친화적? 사람이 읽을 수 있는? 사람을 위한? 모르겠음..
아무튼 파일사이즈
그리고 천단위로 쉼표 넣기
뭐, 여기저기 더 좋은 코드들도 널려있지만, 씬디에 사용된 코드들을 그때그때 정리하는 의미로 등록 중.
1 1

자! 지금 당신은 씬디의 QA!

추석연휴와 2년만에 휴가라는 개인사가 있어서 작업을 적절한 사이즈로 잘라내는데 실패함. 장시간에 걸쳐 작업을 진행하다보니 긴급수정 내용이 수시로 포함되고 개발했던 코드도 시간 지나고 다시 보니 또 수정해야겠고, 수정하고 보니 기존 패턴과 달라서 기존 코드도 부분적으로 리펙토링하고... 이러쿵 저러쿵... 
그래서 이번 업데이트에 내용들이 포함되어 있는지 다 까먹음 ㅇㅇ. 까먹을만큼 자잘한 사이즈긴한데 꽤 중요한 수정들이 있었던게 문제. 그래서 오류가 꽤 있을 수 있으니 이 글을 읽는 당신께서 뭔가 이상한 오류나 버그를 발견하면 갖은 방법으로 이를 알려주기 바람.
애니웨이, 이번 업데이트는 원래 "파일첨부" 였음.
에디터 툴바에 종이클립 모양으로 기능이 추가됐음. 그런데 이거 작업하다보니 에디터에 삽입되는 멀티미디어(사진, 유튜브 영상, 각종 iframe)의 추가적인 콘트롤이 불가피해짐. 특히 씬디에서는 멀티미디어를 수정불가 속성의 figure 태그로 사용하고 있는데 이 때문에 멀티미디어가 위아래로 붙어버리면 그 사이에 라인을 삽입할 수 없거나, 삭제가 어렵고 HTML 레벨에서 깔끔하게 지워지지 않는 등의 문제가 마구마구 발생! 뭐.. 대충 다 때워놨음. 고장난거 있음 알려주기 바람.
그리고 헤더나 인용, 코드 단락의 설정을 단축키로 지정할 수 있도록 했음. 예를 들어 ctrl+h 단축키를 계속해서 누르면 H1, H2, H3, P 순서로 단락 스타일이 변경됨. 단축키는 상단 툴바에 물음표 아이콘으로 확인 할 수 있음. 
아.. 그리고 사진 업로드할 때 orient 정보 있으면 적용되게 수정했고 또 뭐 했더라... 정말 기억안나네... 모르겠다. 끝!
1 1
Square

[3분 복붙] 기사면 랜딩 PV 2배로 올리기.
브라우저 뒤로가기 제어.
이딴거 만들지 말자.

대부분의 서비스가 보다 많은 활동 사용자를 목표로 함은 분명하다.
하지만 얼마나 많은 활동 사용자가 있는지를 가늠할 수 있는 지표에 대한 목표설정은 좀 다른 얘기라고 생각한다.
심지어 그 목표의 달성을 위한 실현 과정이 사용자들을 열받게 만든다면 이 얼마나 근시안적 추태인지...
PV (Page View, 페이지 조회수) 에 대해 강한 집착을 보이는 국내 언론사들이 근래 "뒤로가기"가 실행되는 경우 이전 페이지로 보내지 않고 메인페이지로 이동되도록 하는 기능을 속속 도입하고 있더라. (좀 됐지.. 내가 잠수였던거지..)
사용자 입장에선 개빡치는 UX. 
그렇지만 남들이 한다니까 자기들도 해달라는 클라이언트의 등장은 당연지사.
해당 기능을 도입한 사이트들을 둘러보니 대부분 광고대행사 등이 제공한 스크립트를 사용하는 것 같더라.
메인페이지를 거치는 것도 짜증나는데 그 중간에 광고까지 껴있으니 개짜증..
이딴거 누가 안만들면 좋겠는데 일개 개발자가 뭘 할 수 있겠냐 고민하다가...
클라이언트에게 만들어준 간단한 스크립트를 모두에게 제공하고 너도나도 다들 도입해서 더 많은 사용자들이 더 빠르게 빡돌게 만들면 슬슬 이딴 쓰레기 같은 기능을 버리지 않을까라는 골때리는 결론에 도달했다.
0.
jQuery 를 사용하고 있다고 가정한다.
1.
아래의 코드를 기사 페이지 등 기능이 동작될 페이지에서 로드되는 js 파일에 추가한다.
3번 라인 정규식 패턴안의 synd\.kr 부분은 자신의 도메인으로 변경한다.
2.
기능이 동작될 페이지 HTML 코드 사이에 아래의 코드를 삽입한다.
완성!
코드는 단순해서 쉽게 이해할 수 있겠지만 몇몇 부분을 설명해보자면...
1. pushState 이후에 replaceState 를 다시 콜하는 이유.
pushState 만으로 history 를 조작할 경우 firefox 에서 백버튼이 골때리게 반복된다.
external > page > main > page > main > external
replaceState 를 다시 콜하면 아래와 같이 의도한대로 동작된다.
external > page > main > external
2. popState 이벤트를 사용하지 않고 hashChange 를 사용하는 이유
페이스북 앱 등 in app browser 를 사용할 때 해쉬가 없는 경우 뒤로가기 실행시 popState 이벤트가 발생되지 않음
해쉬를 추가해야 뒤로가기 실행 시 기존 URL (해쉬없는) 로 페이지 변화없는 이동이 발생하고 이 타이밍에 hashChange 가 콜 됨.
또한, Safari 9버전 이하에서 popState 가 지멋대로 fire 됨.
3. 이건 좀 쓸데없는 설명이지만 location.href 는 history 에 기록되고 location.replace 는 history 에 남지 않기 때문에 replace 를 사용해야함.
지원브라우저
웹이고 모바일이고 html5 history api 를 지원하는 브라우저 (http://caniuse.com/#search=history) 에선 기본적으로 모두 동작된다고 기대할 수 있으나 아이폰 크롬에서 동작안됨.
그 외 페이스북 앱 등 인앱에서 웹뷰를 사용하는 경우도 정상 동작.
Tested.
Microsoft Edge.
Microsoft IE 11.
Firefox 52.x (Windows)
Firefox 47.x (Linux)
Firefox 52.x (Mac)

Firefox 52.x (Android)
Firefox 6.x (iOS)
Chrome 57.x (Windows)

Chrome 48.x (Linux)
Chrome 56.x (Mac)

Chrome 57.x (Android)
Chrome 57.x (iOS) *동작안됨
Safari 10.x (Mac)
Safari 10.x (iOS)
Android 6 browser 4.x
Facebook App
자 이제 자리에서 일어나서 팀장이든 부장이든 상사에게 "저희 PV 를 2배로 올리겠습니다!" 라고 보고하고 보다 많은 사용자들의 빡을 돌려(?) 주삼. 
0 1

Vim with the Syntastic plugin and ESLint (feat Vundle)

나는 nerdtree 라든지 하는 플러그인 안쓰고 날것의 vim 을 좋아하는데 syntax 나 eslint 는 필수기 때문에 써야지.
플러그인 관리 대세가 pathogen 에서 vundle 로 넘어간 듯.. 대세는 또 따라줘야지.
Vundle: https://github.com/VundleVim/Vundle.vim
Syntastic: https://github.com/vim-syntastic/syntastic
깃허브에 아주 잘 설명되어 있고.. 아래는 내 설치 히스토리.
소스 받기
.vimrc 에 다음 내용 추가 - Syntastic(만) 포함됨
설정된 플러그인 인스톨
플러그인 인스톨하면 화면 쪼개지고 설치 진행됨. 당황하지 말고 Vim 상태표시줄에 다 끝났다는 메시지 나오면 끄면 됨.
ESLint 는 글로벌로 설치해놓고 
사용하고 있는 .eslintrc 가 없다면 프로젝트 root path 에서
eslint 설정 파일이 있다면 아무 파일이나 돌려보면 eslint-plugin-react 등 필요한 것들 설치해줌
글로벌로 npm 설치해도 물론 됨
끝.
3 0
Square

씬디 업데이트 - 파일로 글쓰기

1. 노트와 연습장, 연필과 펜으로 작성된 아날로그 컨텐츠를 디지털로 변환시키는 최초의 소프트웨어가 뭘까?
  - 접근성과 가벼움으로 승부하는 - 메모장
  - 전통의 워드 프로세서 - MS워드, 아래아한글, 오픈오피스
  - 디지털 네이티브 - 구글 독스, 에버노트, 블로깅 툴 등
2. 한글이나 워드로 작성한 기사를 메모장에 붙여넣었다가 다시 CMS 기사 입력기에 붙여넣고 있어요.
  - 기자들한테 진짜 많이 들은 얘기. 주로 앞뒤의 다른 문제를 설명하기 위한 기초 설명이지.
3. 메모장에 작성한 글을 복사해서 씬디에 올렸는데 앞부분이 잘렸어요.
  - 씬디 사용자에게 받은 피드백. 2번과 같은 구조. 
  - 앞부분이 잘리는 문제는 당연히 코드를 수정해야겠지만 "메모장 복붙" < 이거 해결해야겠다.

그래서 씬디에다가 "파일로 글쓰기"라는 기능을 추가해봤지!
아직까지는 오로지 문서 파일에 있는 "텍스트"만 발라내는 용도로 쓰이고 있어.
하지만 기능이 유용하다고 생각되면 - 사용자의 글쓰기 과정 & 디지털 퍼블리싱 과정에 알맞은 기능이라고 생각되면 - 엑셀 파일을 올릴 경우 표나 차트를 자동으로 만들어준다거나, 문서에 포함된 사진, 비디오 같은 멀티미디어도 옮겨준다거나 하는 쓰임이 추가될 수 있겠지. 
글쓰기 화면 하단에 있는 업로드 영역에 드래그&드랍으로 파일을 떨구거나 "글 불러오기" 버튼을 사용해 파일을 업로드하면 끝!
복붙에서 발생되는 문제와는 또 다른 무시무시한 문제가 있지.
인코딩.
아! 좌절스러워 ㅋㅋㅋ
일단은 문서의 인코딩을 추측해서 자동으로 변환하고 있지만 컨텐츠가 발라지지 않거나 문자가 깨지는 문서들이 꽤 있을 것 같아.
그렇지만! 서비스와 기능은 오픈시켜 사용되지 않으면 발전할 수 있는 기회도 없다는걸 잘 알고 있기 때문에 과감하게 적용! 은 사용자가 적으니 위험부담없이 적용
컴퓨터에 잠자고 있는 글들 올려보세요!
1 0

Vim - Pug(구 Jade) 템플릿 Syntax Highlight

템플릿 pug(구 jade)가 vim (version 7.4.1689) 에서 구문강조 (syntax highlight) 가 되지 않아 코딩에 어려움이 있다.
pathogen 플러그인을 사용해 vim-pug 로 pug 파일의 구문강조를 지원하는 방법은 다음과 같다.
pathogen 설치
https://github.com/tpope/vim-pathogen

vim 구동 파일 수정
vim-pug 설치
https://github.com/digitaltoad/vim-pug
1 0

우분투 몽고DB 설치 및 부팅 시 자동 실행 - Install MongoDB on Ubuntu & Start MongoDB on system start

설치는 매우 간단하고 MongoDB 공홈에 최신 버전으로 갱신된 문서가 있어 해당 페이지를 참고하면 된다.
공홈 설치 문서 링크:

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
GPG Key
리스트파일 생성 (16.04. 기타 버전은 공홈 참조)

패키지 디비 갱신
MongoDB 설치

근래의 대부분의 배포본은 Upstart  대신 Systemd를 사용하기 때문에 위와 같이 설치된 MongoDB 역시 init 스크립트를 제공하지 않는다.
service 커맨드로 시작, 중지, 재시작 등의 관리가 가능하나 systemctl 커맨드를 익히는게 바람직하다고 본다.
systemd 를 사용해 MongoDB 를 초기 실행 시키기 위해 다음의 파일을 작성한다.
/etc/systemd/system/mongodb.service

Unit 섹션의 Description 은 서비스에 대한 간단한 설명을 포함한다.
같은 섹션의 After 는 네트워크 연결 후 구동하겠다는 의미
Service 섹션의 User 는 서비스 실행 사용자를 지정하고 ExecStart 는 실제 구동 커맨드를 입력한다.
Install 섹션의 WantedBy 는 실행 타깃을 구분하는데 multi-user.target 은 기존 런레벨 2,3,4 로 일반적인 부팅 시에 동작된다.
구동
상태 확인
정지
부팅 시 실행
systemd 의 target 에 대해 보다 자세히 알고 싶다면 아래의 링크를 참조.
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Targets.html
systemd 에 대해 보다 자세히 알고 싶다면 아래의 링크를 참조
http://lunatine.net/about-systemd/
0 0

Ubuntu 14.04 - Apache Tika 설치

아파치 티카는 PPT, XLS, PDF 등 수천종의 파일에서 텍스트와 메타정보를 추출하는 툴킷이다.
아파치 소프트웨어 재단의 프로젝트이며 아파치 루씬의 서브프로젝트로 시작됐고 현재는 독립되었다.
티카는 Apache Maven2로 빌드가 가능하나 여기서는 바이너리를 사용한다.
소스나 바이너리 다운로드 URL은 다운로드 페이지에서 확인하자
tika-app
콘솔에서도 유틸리티처럼 사용이 가능하고 --server 옵션으로 서버모드로도 사용이 가능하다. NetCat 등의 커맨드를 사용해 처리결과를 받을 수 있다.
tika-server
보다 서버스러운(!) 서버모드로 RESTful API 를 제공한다.
구동
JRE 는 당연히 설치되어 있어야하고 -jar 옵션으로 간단하게 구동된다. 기본 포트는 9998
구동 확인
브라우저에서 9998 포트로 접속하면 URL 정보가 출력된다.

tika-server 는 PUT 메쏘드만 받으며 리퀘스트 body 로 파일만을 받는다.
Meta 
Text
HTML
추가로, 내가 쓰는 Typhoeus 에서는 아래와 같이 사용할 수 있다.
Apache Tika : http://tika.apache.org/
TiakJAXRS Wiki : http://wiki.apache.org/tika/TikaJAXRS
0 0

맥 시에라 vi / vim 클립보드 사용하기

1~4 단계의 과정이 필요할 수 있다.
1. ~/.vimrc
아래 내용을 사용자 홈디렉토리 아래 .vimrc 파일에 추가한다 (없으면 만든다)
2. +clipboard 로 컴파일 됐는지 확인한다
clipboard 옵션 없이 컴파일 된 경우

clipboard 옵션이 포함된 경우
2-1. clipboard 옵션이 없는 경우 brew 로 vim 을 설치한다
맥에는 기본으로 vim 이 설치되어 있다.
아래와 같이 brew 로 vim 을 설치하여 시스템 디폴트 vim 교체할 수 있다 (실제로 교체되지는 않고 path 설정 바꿔주는 듯)
3. 어떤 vim 이 호출되는지 확인한다
3-1. /usr/bin/vim 이 잡힌다면 /etc/paths 파일을 수정하여 /usr/local/bin 이 /usr/bin 보다 위에 나오도록 한다
4. 여기까지해도 동작되지 않는다면 
client-server 옵션으로 설치하면 동작하는 경우가 있다고 한다.
4-1. .vimrc 설정
1번의 설정으로 충분하나 아래와 같이 설정할 수 있다 (참조)
0 1

Mac Xcode 다운로드 2일 12시간...
느려도 너무 느려 터진 iTunes

쌔끈한 브랜~뉴 맥에 개발 환경 설정하다가 높은 확률로 빡치는 곳. 
Apple Development Center 에서 Xcode 다운로드 시도하면 iTunes 로 넘겨주는데 다운로드 누르면 남은 시간이 고무줄.
아, 제목에 2일 넘는건 뻥이고 2시간 30분 남았다고하네. 2시간 30분. 퇴근하겠는걸?
암튼... iTunes 로 안넘어가고 아래 페이지에서 필요한 파일 찾아서 브라우저에서 다운로드 할 수 있음.
apple 계정으로 로그인은 해야하고..
https://developer.apple.com/download/more/

이어받기가 필요하다거나 브라우저 다운로드가 왠지 모르게 불안하다면 gem 중에 adcdownload 라고 있음. wget 사용해서 이어받기도 되니 필요하면 아래처럼 사용할 수 있음
$ gem install adcdownload --no-document
$ adcdownload get http://adcdownload.apple.com/Developer_Tools/Xcode_8.3.2/Xcode8.3.2.xip
이렇게 실행하면 apple 아이디와 비밀번호 묻고 다운로드 시작. 
다운로드 링크는 물론 저 위에 페이지에서 파일 url 복사한거.
중간에 끊어지면 그 위치에서 다시 같은 커맨드로 이어받기 가능.
[링크]
https://developer.apple.com/download/more/
https://github.com/MagLoft/adcdownload