zsh

터미널을 사용할 때 기본적으로 사용자 이름과 PC 이름이 공간을 차지하고 있어서 불편한 경우가 가끔 있습니다. zsh에서 이 부분을 먼저 없애보려고 합니다. 방법은 그리 어렵지 않습니다. vi ~/.zshrc를 입력해 zsh 설정파일을 열어줍니다. 이후 아래 내용을 .zshrc 맨 아래 부분에 추가해줍니다.

prompt_context() {
  if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
    prompt_segment black default "%(!.%{%F{yellow}%}.)$USER"
  fi
}

 추가한 후 source ~/.zshrc를 입력해주면 이렇게 바로 적용이 됩니다!

PC 이름 삭제된 zsh

 다음으로는 맥북에서 편하게 사용하고 있는 자동완성 플러그인인 zsh-autosuggestions을 설치해보겠습니다. Oh My Zsh를 사용하고 있다는 전제 하에 진행하겠습니다. 먼저 아래 내용을 입력하여 플러그인 폴더에 zsh-autosuggestions을 받습니다.

git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions

 이후 vi ~/.zshrc을 입력하여 설정 파일을 수정합니다. plugins 부분에 zsh-autosuggestions를 추가하면 끝입니다!

.zshrc 수정

 추가한 이후 새로 터미널을 열게 되면 적용이 끝납니다!

zsh 자동완성 예제

 추천된 명령어를 그대로 입력하고 싶을 때는 화살표(→)를 입력하면 그대로 입력이 됩니다. 이제 우분투에서도 편하게 터미널을 사용할 수 있겠네요! 좀 더 사용하다가 쓸만한 플러그인이 보이면 소개해드리겠습니다. 글 봐주셔서 감사합니다!

블로그 이미지

플린 N.

IT, 컴퓨터, 모바일 및 취미, 리뷰 블로그

댓글을 달아 주세요

apt-get install 실패

서버에 zsh를 설치하다 보니 Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?라는 메세지가 뜨며 zsh 설치 진행이 되지 않았습니다. apt-get update를 실행한 후 진행해 보았으나 역시나 되지 않았죠.

sources.list 확인

에러 메세지와 /etc/apt/sources.list 파일을 확인해보니 kr.archive.ubuntu.com 서버가 죽어있더라고요. 이참에 속도가 빠른 다음 서버로 변경하기로 했습니다.

 먼저 기존 sources.list를 복사해둡니다. 만일을 위해 사본을 만들어두는 게 좋습니다.

# cp /etc/apt/sources.list ~/sources.list.old

 다음으로 sources.list의 서버를 변경해줍니다.

# sed -i 's/kr.archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list

 이후 apt-get update 로 업데이트를 진행한 후에 패키지 설치를 계속하시면 됩니다. 이런 경우는 처음이었어서 좀 당황하기는 했네요. ㅎㅎ 쉽게 해결할 수 있는 문제여서 다행이었습니다.

블로그 이미지

플린 N.

IT, 컴퓨터, 모바일 및 취미, 리뷰 블로그

댓글을 달아 주세요

zsh와 oh my zsh 설치가 완료된 모습 

 꽤 오랫동안 우분투 기본 shell인 bash를 사용하고 있었습니다. 가볍게 쓰고 있었기 때문에 불편함은 딱히 못 느끼고 있었죠. 요 근래 공부와 개인 프로젝트 등으로 인해 shell을 많이 쓰게 되면서 불편함이 하나둘 부각되기 시작했고, 편한 걸 찾다가 zsh를 사용하게 되었습니다. 사실 처음부터 zsh의 존재에 대해 알고 있었던 건 아니고, 강의를 듣는데 강사분이 zsh를 사용하고 있었기 때문입니다. 상당히 예쁘고 사용이 편리해보이더라고요. 그리고 직접 사용해보니 훨씬 편하고 예뻐서 사용하기가 더 좋아서 주력으로 사용하고 있습니다.


zsh와 oh my zsh

 zsh는 bash와 같은 shell 프로그램입니다. bash에 비해 강력한 기능과 여러 가지 플러그인을 제공하고 있습니다. oh my zsh는 zsh 설정을 관리하기 위한 프레임워크입니다. 현재를 기준으로 200개가 넘는 플러그인과 140개 이상의 테마를 제공합니다. 이 둘을 함께 사용할 경우 예쁘고 편리한 shell 사용 환경을 쉽게 갖출 수 있습니다.


zsh 설치하기

 개인적으로 사용하고 있는 맥북에서는 이미 설치가 완료되었기 때문에 우분투를 기준으로 설명해드리겠습니다. 기본적인 틀은 크게 다르지 않습니다. 먼저 zsh가 설치되어 있는지부터 확인해야 합니다. 터미널에서 zsh --version를 입력하여 zsh가 설치되어있는지 확인해줍니다. oh my zsh를 사용하기 위해서는 zsh의 버전이 4.3.9 이상이어야 합니다.

zsh 버전 확인

 zsh가 설치되어 있지 않거나 zsh의 버전이 낮을 경우엔 sudo apt-get isntall zsh를 통해 zsh를 설치해줍니다. 설치한 후 zsh의 버전을 확인해줍니다. 버전 확인하는 명령어는 이제 아시겠죠?

zsh 설치 화면 

 이후 chsh -s /usr/bin/zsh를 통해 기본 shell을 zsh로 변경해줍니다. 계정의 비밀번호가 필요합니다. 이후 터미널을 재실행한 후, echo $SHELL을 을 사용하여 zsh가 현재 shell인지 확인합니다.

zsh가 현재 shell인지 확인

oh my zsh 설치하기

 oh my zsh는 curl 또는 wget을 통해 설치가 가능합니다. 첫 번째는 curl을 통해 설치하는 방법이고, 두 번째는 wget을 통해 설치하는 방법입니다.

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

 oh my zsh 설치를 완료한 모습입니다.

oh my zsh 설치 완료 화면

 이제 zsh의 테마를 변경해보겠습니다. 테마는 여기서 확인할 수 있으니 살펴보고 마음에 드는 테마를 선택하시면 됩니다. 저는 agnoster 테마를 적용해보겠습니다. 먼저 vi ~/.zshrc로 zsh 설정파일을 변경해줍니다. THEME="rubbyrussell"부분을 THEME="agnoster"로 변경하고 저장하고 vi를 종료해줍니다. 테마 적용은 source ~/.zshrc를 입력하시면 바로 적용됩니다!

oh my zsh 테마 적용 

 만약 폰트가 깨질 경우 여기로 가셔서 Powerline 지원 폰트를 설치해주시고 설정해주시면 됩니다.

Powerline 지원 폰트 설치 완료

설치 완료!

 이렇게 zsh와 oh my zsh의 설치가 모두 끝났습니다. 이후 플러그인이나 다른 추가 테마의 경우엔 다른 포스트에서 설명하도록 하겠습니다. 글이 이렇게 길어질 줄은 몰랐거든요. 궁금한 점이나 안 되는 부분이 있을 경우 댓글 남겨주시면 최대한 도와드리겠습니다! 글 봐주셔서 감사합니다!

'프로그래밍 > 기타' 카테고리의 다른 글

우분투에 zsh와 oh my zsh 설치하기  (0) 2018.02.11
이클립스 업데이트 하는 방법  (0) 2017.09.24
블로그 이미지

플린 N.

IT, 컴퓨터, 모바일 및 취미, 리뷰 블로그

댓글을 달아 주세요

Synology NAS?

Synology 로고

 시놀로지는 NAS를 주로 제작하는 대만 업체로 국내에서도 꽤나 유명한 업체입니다. 저는 2015년부터 DS415+ 모델을 사용하고 있습니다. 요즘 업그레이드 욕심이 나기는 하는데, 아직까지 성능의 부족함을 느낀 적은 없습니다. 그저 신제품이 가지고 싶을 뿐. 1베이 모델도 드물긴 하지만 있고, 2베이, 4베이 모델부터 랙 마운트용 NAS 장비도 갖추고 있습니다. 기회가 된다면 신형 4베이 제품에 32TB로 갖추고 싶네요. ㅎㅎ


시놀로지 DS415+

VPN?

 VPN은 Virtual Private Network의 약자로 가상 사설망을 뜻합니다. 주로 인트라넷 같은 사설망을 운영할 때 사용합니다. 저 같은 경우는 내부에서만 접근할 수 있는 개발용 서버 등을 사용하거나 해외에 있을 때 해외에서 접근이 안 되는 국내 사이트 접속시 IP를 우회하는 목적으로 사용하고 있습니다. 이외에도 다양한 목적으로 사용할 수 있습니다.

 VPN 기능은 요즘에는 공유기에서 지원하는 경우도 많으나 ipTIME 같은 경우는 방식이 PPTP로 한정되어 있어 아이폰, 아이패드 같은 기기에서는 사용이 불가능합니다. 저는 기존에 시놀로지 NAS를 사용하고 있고, 이 NAS의 VPN 서버는 PPTP뿐만 아니라 OpenVPN, L2TP 같은 방식을 지원하기 때문에 시놀로지 NAS를 VPN 서버로 활용하고 있습니다. 설정도 꽤 쉬운 편입니다.


VPN 프로토콜

 시놀로지 NAS의 VPN 서버 패키지로 지원하는 VPN 프로토콜은 3가지가 있습니다. PPTP, OpenVPN, L2TP입니다.

 PPTP 방식은 취약점이 있어 그리 안전한 방식은 아닙니다. 때문에 최신 버전의 iOS에서는 등록 자체가 불가능합니다. 하지만 속도가 빠른 프로토콜 중 하나입니다.

 OpenVPN 방식은 이름에서 알 수 있듯 오픈소스 VPN입니다. 기초 규격은 L2TP 기반이지만 세 개의 레이어를 확립할 수 있습니다. 꽤나 많은 OS를 지원하고 있지만 기본적으로 내장되어 있지는 않습니다. 하지만 각 OS별로 클라이언트를 지원하고, 포트를 자율적으로 설정할 수 있기 때문에 상대적으로 자유롭게 사용할 수 있으며 다양한 암호화 알고리즘을 적용할 수 있습니다.

 L2TP 방식은 2계층 터널링 프로토콜입니다. L2TP 는 터널을 확립해주기만 하기 때문에, IPSec 같은 암호화 기술과 함께 사용됩니다. PPTP보다는 훨씬 안전하지만, 속도가 느리다는 단점이 있습니다.

 오늘은 세 종류의 프로토콜 모두 설치해보고 연결해보는 시간을 가져보도록 하겠습니다.


VPN 서버 구축하기

시놀로지 VPN 패키지 설치

 시놀로지 NAS의 패키지 센터로 가서 VPN 서버를 설치해 줍니다. 딱히 건드릴 건 따로 없습니다. 바로 VPN 서버를 설정해봅시다.


PPTP 설정 1

PPTP 설정 2

 먼저 PPTP 프로토콜부터 설정해보도록 하겠습니다. 저는 내부 IP가 192.168.0.xxx이기 때문에 PPTP의 경우엔 192.168.1.xxx 대역으로 설정했습니다. 최대 연결 수 및 동일 계정의 최대 연결 수는 마음대로 설정하시면 됩니다.


OpenVPN 설정 1

OpenVPN 설정 2

 다음으로는 OpenVPN입니다. 역시 딱히 건드린 건 없고 동적 IP 주소만 192.168.2.xxx로 변경해주었습니다. 암호화 방식이나 인증 방식 및 다른 옵션들은 취향껏 설정해주시면 됩니다. 설정을 마친 이후엔 [내보내기 구성]을 이용하여 설정 파일을 받아둡니다. 이후 압축을 풀고 VPNConfig.ovpn 파일을 열어 YOUR_SERVER_IP 부분을 NAS의 외부 아이피 또는 DDNS 주소로 바꿔주시고, redirect-gateway def1 앞에 위치한 #을 삭제한 후 저장해줍니다.


L2TP 설정 1

L2TP 설정 2


 L2TP/IPSec도 설정해봅시다. 동적 IP 주소를 비롯한 옵션들을 설정해줍시다. L2TP 방식은 사전 공유 키가 필요한데요. 서버, 클라이언트에서 사용할 암호를 입력해주시면 되겠습니다.


VPN 설정 완료 화면


 이렇게 NAS쪽 설정은 모두 끝이 났고, 이제 공유기 쪽에서 포트 포워딩 설정을 해주셔야 합니다. PPTP의 경우엔 TCP 1723, LT2P의 경우엔 UDP 1701, 500, 4500을 열어주셔야 하고, 마지막으로 OpenVPN은 앞에서 설정해둔 포트를 포트 포워딩을 통해 UDP로 열어주셔야 합니다. 저 같은 경우 OpenVPN 포트는 UDP 1194겠죠?

 이렇게 세 가지 프로토콜 모두 설정이 끝났습니다. 기본적으로 권한에서 모든 유저에게 권한이 부여되어 있기 때문에 권한 변경을 해주시려면 권한 메뉴로 가서 설정을 변경해주시면 됩니다. 그러면 이제 안드로이드 기기와 iOS 기기에서 프로토콜별로 VPN 설정을 해보겠습니다.


iOS 기기에서 VPN 설정하기

 ※ 설정을 시작하기 전에 공유기 등에서 DDNS 설정 및 포트 포워딩 설정이 반드시 되어 있어야합니다.

 [설정] - [일반] - [VPN]을 선택하여 해당 메뉴로 들어가서 VPN 추가를 눌러 추가를 시작해봅시다. 먼저 L2TP 방식부터 해보겠습니다. 최신 버전의 iOS 기기에선 PPTP 방식의 VPN을 지원하지 않습니다.


iOS L2LTP 설정 1

iOS L2LTP 설정 2


 빈 칸에 설정해둔 것들을 입력해줍니다. 계정 및 암호는 DSM에 등록된 계정이고, 비밀은 L2TP 프로토콜을 설정할 때 입력했던 사전 공유키입니다. 설정 이후 VPN을 켜주시면 잘 작동하는 것을 볼 수 있습니다.


iOS OpenVPN 설정 1


 다음으로는 OpenVPN 프로토콜에 연결해보겠습니다 먼저 iOS 앱스토어에서 OpenVPN Connect라는 앱을 설치해줍니다.


iOS OpenVPN 설정 2


 그러고 난 이후엔 두 가지 선택지가 있는데요. 첫 번째 방법은 설정 파일을 아이튠즈를 이용하여 넣는 방법이고, 두 번째 방법은 메일을 이용한 방법입니다. 여기서는 두 번째 방법을 통해 설명해드리겠습니다. 제가 아이튠즈를 사용하지 않기 때문입니다. ㅠㅠ 먼저 프로토콜 설정을 하면서 받아둔 설정 파일(*.ovpn)을 자신의 메일로 보내줍니다. 이후, 메일 앱에서 해당 파일을 선택하고 OpenVPN에 복사를 눌러주면...


iOS OpenVPN 설정 3

iOS OpenVPN 설정 4


 이렇게 추가가 완료됩니다. +를 눌러 iOS 설정에 추가해줍니다. 그리고 계정을 통해 연결하면 끝!


iOS OpenVPN 설정 5


 연결이 잘 되었죠?


안드로이드 기기에서 VPN 설정하기

 제가 가진 기기가 노트8이기 때문에 노트8을 기준으로 설명하겠습니다. 보통 안드로이드 기기는 비슷하기 때문에 쉽게 설정할 수 있을 겁니다. [설정] - [연결] - [기타 연결 설정]으로 이동하시거나 검색을 통해 VPN 설정 화면으로 이동해줍니다.


안드로이드 PPTP 설정 1


 VPN 추가를 눌러 설정을 해줍시다. 위에서 iOS 기준으로 L2TP 연결 설정 설명을 해드렸기 때문에 안드로이드에서는 PPTP 연결 설정을 설명하겠습니다. 사실 설명할 것도 별로 없습니다. 이름을 정해주고 DDNS 설정한 서버 주소 및 NAS 계정을 입력해주기만 하면 됩니다. 그러고 난 후 연결을 시도하면...


안드로이드 PPTP 설정 2


 이렇게 연결 설정이 완료되었습니다! 참 쉽죠?


마치며

 그동안 맨날 대충대충 설정해서 쓰고 있었던 시놀로지 VPN 서버 구축 및 연결에 대해 알아보았습니다. 사실 저는 L2TP 위주로 사용하고 있었는데, OpenVPN도 이번 기회를 통해 구축해보게 되었네요. 앞으로 해외 갈 일이 많을 텐데 열심히 사용해야겠습니다.  앞으로도 가능하면 시놀로지 NAS에 대한 글을 쓸 수 있도록 하겠습니다. NAS를 사용한지도 벌써 3년이 지나가는데 NAS 관련 글이 없네요. ㅠㅠ 되는 대로 글 작성해서 올려보도록 하겠습니다. 글 봐주셔서 감사합니다!

블로그 이미지

플린 N.

IT, 컴퓨터, 모바일 및 취미, 리뷰 블로그

댓글을 달아 주세요

Atom 로고

Atom?

 Atom은 Github에서 제작한 hackable한 텍스트 에디터입니다. 다양한 프로그래밍 언어는 물론이고 마크업 언어 같은 것도 지원하기 때문에 아주 편하게 사용할 수 있고, 필요한 부가 기능을 추가적으로 설치, 제작 및 배포할 수 있는 확장성을 제공합니다. 테마 역시 자유롭게 설정할 수 있습니다. Atom은 Node.js와 Electron을 사용하여 제작되었습니다.

 Atom은 윈도우, 리눅스, macOS를 모두 지원하고, 오픈소스 프로젝트로 제작되었습니다. 저는 다양한 OS를 사용하고 있기 때문에 아주 즐겨 사용하고 있습니다. 다 좋은데 개인적으로 단점이라고 생각하는 점은 초기 실행 속도가 좀 느리다는 점입니다. 다른 에디터들은 빠른데 말이죠. 좀 더 개선이 되었으면 하는 부분이 있네요.

 Atom은 여기서 다운로드 할 수 있습니다.


Atom 패키지

 앞에서 이야기했듯이 Atom은 패키지를 통해 기능을 확장할 수 있고 에디터를 개인화할 수 있습니다. 상당히 강력한 패키지들이 많고, 실제로 사용하는 데에 있어서 엄청 유용합니다. 그래서 이번엔 제가 쓰는 패키지 몇 가지를 소개해드리려 합니다.


내가 쓰는 Atom 패키지들

atom-beautify

 코드를 정렬해주는 패키지입니다. 상당히 많은 언어를 지원하고 있고, 사용이 간편합니다.

color-picker

 코드 내에서 색상 선택기를 열 수 있는 툴입니다. 생각보다 엄청 편합니다.

emmet

 웹 개발자들에겐 거의 필수라고 할만한 툴이 아닐까 싶습니다. HTML/CSS 코딩 속도를 엄청나게 향상시켜줍니다. 기능도 다양하고 어느 정도 익숙해지면 정말 편합니다. 기능이 엄청 많기 때문에 기능 설명은 여기서 확인하시면 됩니다!

file-icons

 트리뷰에 나타나는 아이콘들을 좀 더 예쁘고 컬러풀하게 바꿔줍니다.

highlight-seleted

 더블클릭한 단어를 전체 문서에서 하이라이팅 해줍니다. 별 거 아닌 것 같지만 실제로 사용해보면 엄청 편합니다.

minimap

 문서의 미니맵을 보여줍니다. 빠르게 이동할 때 편합니다. Sublime Text에는 기본적으로 있던 기능인데 Atom에서는 패키지로 따로 있더라구요.

minimap-hightlight-selected

 미니맵에서 highlight-seleted를 동작하게 해주는 패키지입니다. 미니맵 쪽에 보시면 선택한 단어들이 좀 더 밝게 표시되어있는 게 보이죠?

pigments

 문서 내에 있는 색상 코드를 바로 볼 수 있게 해줍니다. 개인적으로 아주 잘 쓰고 있는 패키지입니다.

remote-ftp

Atom에서 FTP/FTPS/SFTP 사용을 가능하게 하는 패키지입니다. 트리뷰에 다른 탭으로 생기기 때문에 아주 편하게 사용할 수 있습니다. 이미지는 좀 오래 된 이미지네요.

sync-settings

 여러 종류의 기기에서 같은 환경의 Atom을 사용하려 할 때 무척 편리합니다. 초기 설정시 Github gist 설정이 필요하지만 한 번 설정해두면 정말 간편하게 Atom 설정 및 패키지를 동기화할 수 있습니다. 사용 방법은 다음에 쓸 수 있도록 하겠습니다. ㅠㅠ


마치며

 요즘은 고민이 참 많습니다. 블로그에 어떤 글들을 채워 넣어야 할 지, 좋은 글들을 잘 쓸 수 있을지 생각해보니 잘 모르겠더라고요. 제가 한 없이 부족하게 느껴지더라고요. 그래서 그냥 편하게 글 쓰려고 합니다. 아는 만큼, 쓸 수 있는 대로 쓰다 보면 언젠가 좋은 글들을 쓸 수 있을 거라고 생각하고 있습니다. 처음부터 잘하는 사람은 없으니 열심히 경험치를 늘려서 실력을 업그레이드 해야겠어요. 앞으로도 열심히 배우고 열심히 글 쓰는 사람이 되어야겠습니다. ㅎㅎ 오늘도 글 봐주셔서 감사합니다. 앞으로는 좀 더 자주 글을 쓸 수 있도록 해보겠습니다.

블로그 이미지

플린 N.

IT, 컴퓨터, 모바일 및 취미, 리뷰 블로그

댓글을 달아 주세요

Captin: A tool to show Mac caps lock status.

 Captin: A tool to show Mac caps lock status.


 저는 여러 종류의 PC를 사용하고 있습니다. 메인 PC인 윈도우 PC와 개발용으로 쓰는 맥북 프로 레티나(이하 맥북), 그리고 개인 개발 서버인 우분투 PC를 비롯하여 NAS까지 사용하고 있습니다. 개발을 주로 맥북으로 하고 있는데, 제 맥북엔 한 가지 문제가 있습니다. Shift 키가 가끔 먹히지 않는다는 건데요. 구입할 때부터 그랬는데 귀찮다고 교환을 안 해버렸더니 아직까지 쓰고 있네요.

 평소에는 큰 문제가 안 되는데, 개발할 때 보면 좀 짜증날 정도로 문제가 생깁니다. 고속 타이핑을 할 때 Shift 키가 먹히지 않아서 오타가 꽤나 많이 발생하게 되더라고요. 키보드에 불빛으로 Shift 키의 상태가 보이긴 하지만, 보통 타이핑을 할 때는 화면을 주로 보고 타이핑을 하게 되잖아요? 그러다보니 별 도움이 안 되더라고요. 그래서 괜찮은 앱 없을까 하다가 찾은 앱이 바로 Captin이라는 앱입니다. 기능은 간단하지만 설정을 꽤 세부적으로 할 수 있어서 마음에 들었고, 비교적 최신 앱이라서 요즘 계속 사용하고 있답니다. 그리고 무료에요!

 Captin 받으러 가기(무료)

 간단한 앱인 듯 하면서도 많은 설정을 할 수 있는 앱인데요. 기능을 하나씩 소개해보고자 합니다. 먼저 설정창을 볼까요?

Captin 설정 부분 - General

 General 부분인데요. 여기서는 로그인시 Captin을 실행할 건지와 실행시 현재 설정을 보여줄 건지, 화면에 바로 보여주는 HUD의 크기, 배경 색상, 텍스트 색상 및 화면에 나타날 시간을 ON/OFF별로 따로 설정할 수 있습니다.

Captin 설정 부분 - Displays

 Displays 부분에서는 각각의 디스플레이 별로 따로 위치를 지정해줄 수 있습니다. 저는 정 중앙 하단이 제일 나은 것 같아서 정 중앙 하단으로 설정하고 Y padding을 조금 줬네요. 제 설정대로 하시면 아래처럼 보인답니다.


Captin HUD 위치


 괜찮죠? 자신이 원하는 색상과 위치로 자유롭게 설정할 수 있는 부분이 참 좋습니다.

Captin 설정 부분 - Icon

 다음은 Icon 부분인데요. 이 부분에서는 메뉴 바에 위치한 아이콘과 독 바에 위치하는 아이콘의 설정을 할 수 있는데요. 독 바에 나타나는 아이콘은 보이게 할 지, 안 보이게 할 지를 선택할 수 있습니다. 메뉴 바에 나타나는 아이콘의 경우에는 Caps lock이 켜져있을 경우 보이는 Light color를 자유롭게 선택할 수 있으며, 색상이 아닌 심볼로도 바꿀 수 있습니다. 아이콘의 모양도 간단하게 설정할 수 있어요.


 


 이렇게 말이죠! 눈에 잘 띄도록 설정하는 게 좋겠죠?

Captin 설정 부분 - Sound

 마지막으로는 Sound 부분입니다! 여기서 Caps lock의 상태별로 소리를 다르게 지정할 수 있어요.

 확실히 Captin을 사용하고 나서부터는 Caps lock의 상태를 바로바로 알 수 있게 되어서 좋더라구요. 오타도 꽤나 줄어들고 있구요. 무료임에도 불구하고 정말 정말 좋은 앱입니다. 여러분도 맥북에서 Caps lock 키 사용의 불편함을 느끼셨다면 사용해보세요! 타이핑의 질이 달라질 겁니다. ㅎㅎ 오늘도 글 봐주셔서 감사합니다! 다음에 또 들러주세요!

블로그 이미지

플린 N.

IT, 컴퓨터, 모바일 및 취미, 리뷰 블로그

댓글을 달아 주세요

스타벅스 2018 럭키백 1


 올해도 어김 없이 스타벅스 럭키백이 찾아왔습니다! 작년에는 시간도 없고 돈도 없어서 구매하지 않았는데요. 올해는 색상도 예쁘고 마침 돈도 있고 해서 한 번 사보자! 하는 느낌으로 구매를 해봤습니다. 제 주변에 있는 스타벅스는 오전 7시에 오픈을 해서, 적당히 6시 20분까지 갔는데도 불구하고 제 앞에 두 분이 계시더라구요. 그래도 제가 간 매장에는 8개가 입고되어서 문제 없이 구매할 수 있었답니다.


스타벅스 2018 럭키백 2


 럭키백 구매 당일은 엄청 추운 날이었는데, 40분 정도 기다렸더니 진짜 손, 발이 너무 시렵더라구요. 겨울에 출시하는 MD 사려고 기다리는 건 앞으로 못해먹겠다는 생각이 들었습니다. ㅠㅠㅋㅋ 올해 신년 MD는 디자인도 영 별로더라구요. 그래서 하나도 구매하지 않았더니 블로그에 올릴 게 없네요.


스타벅스 2018 럭키백 오픈 1


 럭키백을 오픈했더니 먼저 쪽지가 절 반겨주더라구요.


스타벅스 2018 럭키백 오픈 2


 내용을 보아하니, 올해도 잘 부탁한다는 내용이었습니다. 예쁜 MD많이 만들어줘… 나도 우수고객 해보고 싶다… 그리고 열심히 포장을 뜯었습니다.


스타벅스 2018 럭키백 내용물들


 MD들은 각자 개별 포장이 잘 되어있었습니다. 제가 나온 제품들은 이렇습니다. 뭐 나름 괜찮은 구성이라고 생각하네요. 사실 저는 이렇게 많이 들어있을 거라고는 생각하지 못했는데, 좋습니다. ㅎㅎ 하나씩 둘러볼까요?


스프링 버터플라이 미니 볼


 요건 2017 봄 MD로 나왔던 스프링 버터플라이 미니 볼이네요. 제가 이런 접시나 그릇 쪽은 구매를 안 해서 썩 맘에 드는 제품은 아닙니다. ㅠㅠ 사이즈도 너무 작고… 나중에 소스 담을 용도로 써야겠어요.


레드 케인 데미 머그 1

레드 케인 데미 머그 2


 2016 크리스마스 MD로 나왔던 레드 케인 데미 머그! 에스프레소 잔인 것 같은데, 에스프레소 역시 마시지 않는다는 거. 커피는 좀 달달해야죠. ㅋㅋㅋㅋ 요것도 소스 담을 용도나 소주잔으로 쓰이지 않을까 합니다. ㅋㅋㅋㅋㅋㅋㅋ


크리스마스 머플러 머그 1

크리스마스 머플러 머그 2


 요것도 2016 크리스마스 MD로 나왔던 크리스마스 머플러 머그입니다. 크리스마스 MD임에도 불구하고 꽤 깔끔하고 무난한 디자인이라 꽤 마음에 듭니다. 머그를 잘 사용하지는 않지만 하나 더 생겨서 좋기는 하네요.


럭키백 시온 머그 1

럭키백 시온 머그 2


 요건 2018 럭키백 한정 MD인 럭키백 시온 머그입니다. 사이즈가 다른 머그들보다 조금 더 크더라고요. 디자인도 뭐 꽤 귀여운 듯. 하지만 돈 주고 살만한 디자인은 아닌 듯 싶습니다. 지극히 제 취향입니다. 요것도 잘 써줘야겠어요.


하트 레나 워터보틀


 요건… 2017 발렌타인 MD입니다. 발렌타인 MD는 디자인이 너무 부담스러워서 살 일이 없었는데, 덕분에 하나 생기게 되네요. 역시 디자인이 부담스럽기 때문에 실사용 하는 일은 없을 듯 합니다. 여자친구가 쓰거나 하겠지요.


루스터 피비 워터보틀


 2017 신년 MD로 출시했던 루스터 피비 워터보틀입니다. 이렇게 생긴 워터보틀은 단 한 개도 없었는데, 이렇게 또 하나 생깁니다. ㅎㅎ 같은 시기의 다른 워터보틀을 쓰고 있는데, 요것도 실사용으로 잘 써먹어야겠어요.


SS 매트 블랙 콜드컵 텀블러


 제가 정말 가지고 싶어했던 SS 매트 블랙 콜드컵 텀블러! 2017 코어 MD로 출시했었는데, 당시엔 돈 나갈 일이 많아서 구매하지 않았거든요. 이렇게 결국 제 손에 들어옵니다. 저는 개인적으로 스테인리스 콜드컵이나 플라스틱 콜드컵을 좋아해서 자주 써먹을 듯 합니다!


스타벅스 윷놀이 세트 1

스타벅스 윷놀이 세트 2

스타벅스 윷놀이 세트 3


 역시 2018 럭키백에만 들어있는 윷놀이 세트입니다. 생각보다 퀄리티도 괜찮더라구요. 윷놀이를 언제 할까 싶긴 한데, 여자친구랑 하던가 하면 되겠지요. 어쨌든 윷놀이판까지 퀄리티가 좋아서 놀랐던 제품입니다. 좋아요~

 이렇게 제 첫 스타벅스 럭키백 구매를 소개해봤습니다. 꽤 마음에 드는 MD들이 나와서 저는 마음에 드네요. 인스타그램 보니까 맘에 안 들어하시는 분들도 꽤 있으시고, 행운의 1,000명 중 한 명에 든 분도 계시더라고요. 저는 아쉽게도 들지 못했네요. ㅠㅠ 이게 뜯는 재미도 있고 언제 MD인지 보는 재미도 있고, 심지어 중복도 없었어서, 내년 럭키백도 살 듯 합니다. ㅎㅎ 여러분들은 럭키백 결과 어떠셨나요? 오늘도 방문해주셔서 감사합니다! 다음에 또 들러주세요~

블로그 이미지

플린 N.

IT, 컴퓨터, 모바일 및 취미, 리뷰 블로그

댓글을 달아 주세요

 안녕하세요. 오늘은 Java Swing의 JButton을 둥근 형태로 만들어보려고 합니다. 저는 보통 개발을 할 때 기본적인 모양을 주로 썼는데요. 점점 디자인을 바꿔보고 싶어지더라구요. 가장 만만한 버튼부터 변형시켜보려 했는데, 이게 생각처럼 잘 안 돼서 여러 번 삽질을 한 기억이 있습니다. 이번에는 기록도 할 겸 블로그에 기록을 좀 해보려고 합니다.


둥근 버튼 미리보기


 좌측의 버튼은 기본적인 JButton의 모양입니다. 다소 밋밋하고, 올드한 느낌이 없잖아 있죠. 그리고 우측은 제가 임의로 모양을 바꾼 버튼입니다. 이번에는 요 버튼을 만들어볼 예정입니다. 그렇게 어렵지 않습니다!


public class RoundedButton extends JButton {

    public RoundedButton() {
        super();
    }

    public RoundedButton(String text) {
        super(text);
    }

    public RoundedButton(Action action) {
        super(action);
    }

    public RoundedButton(Icon icon) {
        super(icon);
    }

    public RoundedButton(String text, Icon icon) {
        super(text, icon);
    }
}


 먼저 JButton을 상속받는 클래스를 하나 만듭니다. 이 클래스가 둥근 버튼을 만들 거기 때문에 이름을 RoundedButton라고 했습니다. 이 상태로 버튼을 만들면 그냥 일반적인 JButton 모양이 됩니다. 먼저 기본 모양에 있는 테두리를 없애버리고, 반드시 불투명하도록 만들어보겠습니다.


public class RoundedButton extends JButton {


    public RoundedButton() {
        super();
        decorate();
    }

    public RoundedButton(String text) {
        super(text);
        decorate();
    }

    public RoundedButton(Action action) {
        super(action);
        decorate();
    }

    public RoundedButton(Icon icon) {
        super(icon);
        decorate();
    }

    public RoundedButton(String text, Icon icon) {
        super(text, icon);
        decorate();
    }

    protected void decorate() {
        setBorderPainted(false);
        setOpaque(false);
    }
}


 decorate()라는 함수를 만들어 간단하게 처리했습니다. 이제 버튼 모양을 만들어봐야겠죠? 버튼의 모양은 해당 컴포넌트를 그리는 paintComponent 메소드를 오버라이드 하여 처리할 수 있습니다. 그러면 결과물처럼 만들 수 있도록 수정한 paintComponent 코드를 볼 수 있도록 하겠습니다.


@Override
protected void paintComponent(Graphics g) {
    int width = getWidth();
    int height = getHeight();

    Graphics2D graphics = (Graphics2D) g;

    graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    if (getModel().isArmed()) {
        graphics.setColor(getBackground().darker());
    } else if (getModel().isRollover()) {
        graphics.setColor(getBackground().brighter());
    } else {
        graphics.setColor(getBackground());
    }

    graphics.fillRoundRect(0, 0, width, height, 10, 10);

    FontMetrics fontMetrics = graphics.getFontMetrics();
    Rectangle stringBounds = fontMetrics.getStringBounds(this.getText(), graphics).getBounds();

    int textX = (width - stringBounds.width) / 2;
    int textY = (height - stringBounds.height) / 2 + fontMetrics.getAscent();

    graphics.setColor(getForeground());
    graphics.setFont(getFont());
    graphics.drawString(getText(), textX, textY);
    graphics.dispose();

    super.paintComponent(g);
}


 요 paintComponent 메소드를 클래스 안에 위치시키면 됩니다. 일단 한 줄씩 차례대로 살펴보도록 하겠습니다. widthheight는 편의를 위해 가져오도록 했고, graphics는 2D의 그래픽을 그릴 수 있도록 형 변환을 하여 가져왔습니다. setRenderingHint를 통해 배경의 사각형을 부드럽게 그릴 수 있도록 처리합니다.

 다음으로는 버튼에 마우스가 올려진 상태인지(isRollover()), 눌러진 상태인지(isArmed())와 기본적인 상태에 따라 배경의 색을 선택합니다. getBackground()를 통해 색을 가져와서 밝게, 또는 어둡게 처리했습니다. 그리고 난 후, fillRoundRect 메소드를 통해 가로, 세로 크기만큼 10의 둥글기를 가지게 하여 배경을 그립니다.

 다음부터는 버튼의 글자를 새길 차례입니다. FontMetricsRectangle를 통해 글자가 그려지는 사각형의 크기를 구합니다. 그런 이후 글자가 새겨질 위치를 구한 이후에 글자의 색(getForeground())과 폰트(getFont())를 가져와 drawString를 통해 그리면 됩니다. 이후에 graphicsdispose() 해주면 됩니다. 마지막 과정을 해주지 않을 경우엔 약간 조잡한 버튼의 모양이 되니 꼭 해주셔야 깔끔한 모양이 됩니다!


둥근 버튼 기본 상태

둥근 버튼 마우스 오버

둥근 버튼 클릭


 이렇게 테두리가 둥근 버튼을 만들어봤습니다. 응용하면 시작 부분과 끝 부분이 완전히 둥근도 만들 수 있습니다. 요런 글이 처음이라 시간도 오래 걸리고 글 퀄리티도 만족스럽지는 않네요. 버튼 색이 변하는 모습을 GIF로 만들어보고 싶었으나 이미 시간을 너무 많이 소비한 상태라 그냥 이미지로 첨부하는 점 양해 부탁드립니다. ㅠㅠ 다음에는 더 좋은 퀄리티의 글로 찾아뵐 수 있도록 할게요!

 오늘도 블로그 들러주셔서 감사합니다! 다음에도 또 들러주세요!

블로그 이미지

플린 N.

IT, 컴퓨터, 모바일 및 취미, 리뷰 블로그

댓글을 달아 주세요


 회사에서 열심히 자바로 개발을 하고 있습니다. 개발을 하다 보면 시간 표시를 꽤 여러 가지 포맷으로 하게 되는데요. 이럴 때 사용하게 되는 게 SimpleDateFormat입니다. 다만 저는 사용법이 헷갈리더라구요. 맨날 검색해서 사용하다가 잊어버리고, 또 검색하고. 그래서 기록도 하는 김에 정리를 해보았습니다. 일단 각 패턴 별로 표로 정리했습니다.


패턴 의미 출력
G 연대(BC, AD) AD
y 년도 2017
M 월(1~12) 12
w 해당 년도의 몇 번째 주(1~53) 52
W 해당 월의 몇 번째 주(1~5) 5
D 해당 연도의 몇 번째 일(1~366) 364
d 해당 월의 몇 번째 일(1~31) 30
F 해당 월의 몇 번째 요일(1~5) 5
E 요일(월~일) Sat
a 오전/오후(AM, PM) PM
H 시간(0~23) 21
h 시간(1~12) 9
K 시간(0~11) 9
k 시간(1~24) 21
m 분(0~59) 31
s 초(0~59) 8
S 1/1000초(0~999) 297
Z 타임존 +0900
z 타임존(RFC 822) KST


 그리고 아래는 실제로 사용하게 되는 예입니다. 제가 사용해봤던 포맷이나 사용할만한 포맷을 구현해봤습니다. 위 표에 있는 출력 부분도 테스트 하면서 나온 값을 그대로 적어보았습니다.


package me.theillusionist;
package me.theillusionist;

import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatExample {
	
	public static void main(String[] args) {
		
		Date today = new Date();
		
		SimpleDateFormat format1, format2, format3, format4, format5, format6, format7;
		
		format1 = new SimpleDateFormat("yyyy-MM-dd");
		format3 = new SimpleDateFormat("yy/MM/dd");
		format2 = new SimpleDateFormat("yyyy년 MM월 dd일 E요일");
		format4 = new SimpleDateFormat("HH:mm:ss");
		format5 = new SimpleDateFormat("hh:mm:ss a");
		format6 = new SimpleDateFormat("오늘은 yyyy년의 w주차이며 D번째 날입니다.");
		format7 = new SimpleDateFormat("오늘은 M월의 w번째 주, d번째 날이며, F번째 E요일입니다.");

		System.out.println(format1.format(today));
		System.out.println(format2.format(today));
		System.out.println(format3.format(today));
		System.out.println(format4.format(today));
		System.out.println(format5.format(today));
		System.out.println(format6.format(today));
		System.out.println(format7.format(today));
		
	}
}


2017-12-30
2017년 12월 30일 Sat요일
17/12/30
21:53:47
09:53:47 PM
오늘은 2017년의 52주차이며 364번째 날입니다.
오늘은 12월의 52번째 주, 30번째 날이며, 5번째 Sat요일입니다.


 벌써 2017년도 다 지나가고 있네요. 올해 회고록을 쓸까 말까 고민하고 있는데, 가능하면 써볼 수 있도록 하겠습니다. 코딩 분야 뿐만 아니라 취미 등으로로 꽤 쓸 게 많을 것 같긴 한데, 얼마나 잘 쓸 수 있을지 모르겠네요. 내년에는 코딩쪽 글을 많이 쓸 수 있도록 해보겠습니다. 뭔가 코딩쪽 글을 부담이 좀 되더라구요. 잘 할 수 있겠죠? 오늘도 글 봐주셔서 감사합니다. 다음에 또 좋은 글 쓸 수 있도록 하겠습니다!

블로그 이미지

플린 N.

IT, 컴퓨터, 모바일 및 취미, 리뷰 블로그

댓글을 달아 주세요

스타벅스 더종로 스페셜 카드 박스샷 1


 얼마 전에 스타벅스 더종로점이 오픈을 했죠. 우리나라에 있는 스타벅스 중 가장 큰 규모의 스타벅스 지점입니다. 저도 마음 같아서는 오픈 당일에 가고 싶었으나, 대구에 살기도 하고 회사도 가야해서 가지 못했죠. 하지만 지인 분의 도움으로 스타벅스 더종로점 스페셜 카드를 손에 넣게 되었습니다. 저번 SS 엘마 레드와인 사이렌 텀블러 글에서 언급했었죠. ㅎㅎ 덕분에 스타벅스 더종로점 오픈 3일차에 지방에서 카드를 손에 넣었답니다.


스타벅스 더종로 스페셜 카드 박스샷 2


 스페셜 카드 구입은 처음인지라 몰랐는데, 개별로 박스에 담아주더라구요. 하나 더 살 걸 하고 후회하고 있습니다. ㅠㅠ 요걸 직접 보고 나니까 스타벅스 청담스타점 스페셜 카드가 정말 가지고 싶더라구요. 그 때는 왜 몰랐을까 후회하고 있습니다. 이러다 매번 사는 거 아닌가 몰라요.


스타벅스 더종로 스페셜 카드 박스샷 3


 박스 퀄리티는 꽤 좋지만 카드 퀄리티는 사실 생각보다 별로였습니다. 이유는 이따가 이야기할 수 있도록 하겠습니다. ㅋㅋㅋ 스타벅스 더종로 스페셜 카드는 그냥 박스에 넣고 보관을 해야겠어요. 실사용 하기엔 조금 아까운 카드이긴 합니다. 흠집도 잘 날 것 같구요.


스타벅스 더종로 스페셜 카드 박스 오픈 1


 박스를 열면 이렇게 종이 한 장이 더 들어있습니다. 큰 의미는 없어요. ㅎㅎ


스타벅스 더종로 스페셜 카드 박스 오픈 2


 드디어 완전한 오픈! 사이렌 로고를 포함한 부분은 금속 재질로 둘러져 있습니다. 문제는 요게 플라스틱 카드에 접착제로 붙어있는데요. 위치가 살짝 어긋나있고 뒤쪽에 약간 삐뚫게 붙여져 있어서 저 같이 민감하신 분들에겐 엄청나게 신경쓰일 수 있습니다. ㅠ 엄청 아쉬운 부분입니다.


스타벅스 더종로 스페셜 카드


 그리고 디자인도 스타벅스 청담스타점 스페셜 카드에 비해 조금 떨어지는 건 사실입니다. ㅠ 이걸 이제서야 알다니. 엄청 아쉽네요. 어흑, 다음 번 스페셜 카드도 되도록이면 꼭 구해볼 수 있도록 하는 걸로. 이러다 카드도 엄청 모으게 되는 거 아닌가 싶네요.


스타벅스 더종로 스페셜 카드


 스타벅스 카드를 모을 생각은 없었는데, 어쩌다보니 현재 총 8장의 카드를 가지고 있네요. 그래도 카드는 추가적인 비용이 나가는 건 아니라 돈이 아깝지는 않네요. 엄청나게 예쁘진 않지만 특별한 카드니까 만족하도록 하겠습니다. 다음 번 스페셜 카드는 또 어떻게 나올까요? 오늘도 들러주셔서 감사합니다!

블로그 이미지

플린 N.

IT, 컴퓨터, 모바일 및 취미, 리뷰 블로그

댓글을 달아 주세요