난 무슨 프로그램을 사용하는가?
난 무슨 프로그램을 사용하는가?
usesthis.com
내가 정기구독 하는 사이트 중에 재밌는 곳이 하나 있다.
usesthis.com 라고, 유명한 사람들의 작업환경을 소개하는 블로그인데, 2009년도에 Alex Payne로 스타트를 끊어서, Gabe Newell, Paul Graham의 지원사격으로 시작된, 그야말로 말도안되는 사이트로서, 보다시피 X쩌는 분들의 TechStack을 엿볼 수 있다.
지금까지 700명의 인터뷰가 올라가있고, 매주 화요일 목요일에 새 글이 올라오니까 볼만할거다.
우선 내가 좋아하는 몇분을 더 추려보자면 - Aaron Boodman - Eric Meyer - Andy Smith - Tom Preston-Werner - Robert Böhnke - Eric S Raymond - Daniel Stenberg - Greg Kroah-Hartman - Yan Zhu - Diana Kimball - George Nachman - Bjarne Stroustrup - Monica Dinculescu - Jessie Frazelle 이정도?
dotfiles.github.io
또 재밌는 운동 중에 하나는 dotfiles.github.io가 있다.
dotfile이란 간단히 말해서 .
으로 시작하는 파일을 의미하는데, 이러면 Unix계열 운영체제에서는 숨김파일처럼 보여서 사용자의 환경설정을 보관하는데 많이들 사용한다. dotfiles.github.io에 가면, 유명한 or 잘만들어진 dotfiles의 예시와 dotfiles를 관리하기 위한 많은 자료들을 볼 수 있다.
사실 환경설정 안에는 개발자들의 작업환경부터 시작해서, 쓰는 프로그램, 습관, 또 그 습관을 고치기 위한 툴들을 발견할 수 있고, 나에게 맞는 것을 하나씩 하나씩 적용하다보면, 자신의 작업환경도 상당히 쾌적하게 바뀌고 능률도 상승하는 것을 경험할 수 있다.
개발자들의 커뮤니티인 Github에서 dotfiles를 검색해보면 많은 개발자들의 환경설정을 볼 수 있으니, 시간이 남고, 더 이상 작성할 테스트가 없으며, 심지어 yak shaving도 재미가 없어진다면, 이만한 타임머신이 또 없다. 강추.
minhoryang's stacks
나도 약 일년 전에 Gardening/Grooming My OS X Environment라는 글을 작성한 적이 있는데, 약간 불친절했지. 백업용처럼 썼으니까. 이번에는 좀 더 친절히 써보기로했다.
나는 Unibody Macbook 13" Late 2008과 Macbook Pro 15" Retina Mid 2015를 쓴다. 하나는 내가 대학 입학할 때 산거고, 후자는 이번에 회사에 입사하면서 지급받았다.
고로 내 설정은:
- Mac
- 낮은 성능 (2008년도 맥북에서도 화가 나지 않아야 함)
- 업무와 일상의 분리
- 항상 최신버전
- 보안
이런 특징을 가지고 있다. 차근차근히 나열해볼테니 좋은걸 하나 건질 수 있기를.
Mac OS (OS X)
깨끗한 Mac OS를 준비한다.
깨끗하다는 뜻은, 갓 노트북의 포장을 뜯었거나 갓 전체포맷을 하여, 설치화면이 띄워져 있고, iCloud 연결이 아직 되지 않은 상태를 말한다.
- iCloud는 업데이트가 다 끝나고 나서야 설정에서 로그인 할 것이다.
- Recovery Partition이 있어야 한다. (전체포맷시 날아갈 수도 있다. 부팅시 Option키를 눌러서 꼭 확인해보도록.)
- 맥에서 프로그램을 설치할 때는 Mac App StoreⒶ와 HomebrewⒷ 그리고 Homebrew CaskⒸ를 이용한다.
- 관리하기에도 업데이트하기에도 보안에도 좋다.
My System Preferences
- Security & Privacy
- Required password
immediately
로 설정해서 잠자기 이후 자동으로 잠기게 해둔다. - Set Lock Message를 등록해놓는다. (휴대폰번호/소속)
- Advanced... 버튼을 눌러서 다음 두가지 항목을 설정한다.
- Log out after
10
minutes - Required an administrator password to access system-wide preferences
- FileVault를 꼭 켠다.
- Disk암호화를 해주며, 시간이 오래걸리니 맥 설치 직후 걸어두는게 좋다.
- Firewall에서 Block all incoming connections을 설정해두고 개발시 필요할 때마다 열어서 사용한다.
- Privacy에서 Location Services는 Find my mac만 걸어두고 나머지는 다 끈다.
- Required password
- Sharing
- 컴퓨터의 이름을 적절히 바꾸고, 모든 공유를 끈다.
- Bluetooth
- 블루투스 장치를 사용하지 않을경우 꼭 끄고, 필요할 때만 킨다.
- Advanced를 눌러 자신의 상황에 맞게 설정한다. (난 블루투스 장치를 사용하지 않으니 셋 다 끈다.)
- Bluetooth 아이콘을 메뉴바에 꺼낸다.
- Trackpad
- 오른쪽 클릭을 위해
Secondary Click
을 켠다.
- 오른쪽 클릭을 위해
- Accessibility
- Mouse & Trackpad에서 Trackpad Options을 들어가서
Three Finder Drag
옵션을 킨다.
- Mouse & Trackpad에서 Trackpad Options을 들어가서
- Dock
- 자신의 상황에 맞추지만 난 오른쪽 중앙에 가장 작은 사이즈로 Auto Hide 해놓는다.
- Networks
- DNS를 8.8.8.8를 쓴다.
- Wifi 아이콘을 메뉴바에 꺼낸다.
- iCloud
- 자신이 사용하는 것만 켜는데, Keychain과 Back to my mac은 추천하지 않는다. (사실 Find My Mac빼고는 다 추천하지 않는다.)
- Language
- Keyboard 설정에서 Shortcuts을 수정할 수 있는데
- Input Source 설정을 Command-Space로 설정한다.
- Spotlight를 Command-Space-/ 로
- Spotlight/Finder Search를 Command-Space-. 로
- App Shortcut에 Help Menu를 끈다.
- Spotlight
- Application과 Other와 System Preferences만 켠다.
- Privacy로 홈폴더를 검색하지 않게 해놓는다. (적절히)
- Battery
- Battery 아이콘을 메뉴바에 꺼낸다.
- 메뉴바에서 배터리 잔량을 %로 표시하도록 바꾼다.
- Users
- Guest User를 사용한다.
-
/System/Library/User Template/English.lproj
를 교체해서 Guest User의 세팅을 내가 Tweak할 수 있다.- Network 분석을 하거나, 믿지 못하는 Network를 사용하거나, 회사와 관련되지 않은 일을 할 때, Guest User를 사용하는 편이다.
- Login Options에서 Fast User Switching을 사용한다.
Keychain Assistants
Keychain Assistants는 맥에서 인증서와 인증키들을 관리하는 곳인데, 각각의 인증 정보들이 잘 관리가 되지 않는 문제가 있다. 초기 세팅을 꼭 스크린샷을 찍어두든지, 이름을 바꾸는걸 추천한다. (바꿔도 문제없다.)
맥에서 인증문제가 생기면 여기서 필요없는 것들을 찾아서 지워야하니, 꼭 확인해주시라.
- 공용 Mac에서 특정 서비스(HTTP/HTTPS/SSH/+GIT)에 로그인을 한 적이 있어서 지우고 싶다.
- Xcode 의 개발자 계정을 2개 이상 쓰고 싶다. (기존에 쓰던 계정이 있었는데, 새 계정을 쓰고싶다.)
- Xcode 의 개발자 계정을 다른사람과 나눠쓰고 싶다.
- Xcode 에서 App Release를 해야하는데 App Signing이 잘 안된다.
- Git의 인증이 credential-osxkeychain 모드로 처리되고 있어서 내가 원하는 방식으로 인증이 진행되고 있지 않았다.
- Github의 OAuth2 Token인증이 이상하다.
- iTunes 계정을 여러개를 쓰는데, 갑자기 전환이 잘 안된다.
- iMessage 인증이 깨졌다.
- 자동로그인을 하는 앱이 무한 로그인 실패를 겪고있다.
이런 문제를 겪을 때는 Keychain Assistant의 뒤를 밟아라.
OS X ServerⒶ
OS X Server는 OS X의 서버기능을 사용할 수 있도록 운영체제를 바꿔주는건데, 여기서 정확히 필요한 기능이 있지 않는 이상, 설치하는걸 추천하지 않는다.
- IP/DNS가 고정될 수 있는 환경에서 쓰는걸 추천 (Macbook은 여기에서 부적합하다.)
- (나에게) 불필요한 OS X Server 서비스를 끄는 스크립트
.OSX
Script
OS X의 매우 Deep한 설정을 바꿀 수 있다. 한줄한줄 읽어보며 자신에게 필요한 걸 챙겨보고, 실행하기전에 한번만 더 생각해보라.
Everywhere & Everyday Programs
어떤 OS던지 간에 공통적으로 쓰는 툴들은 다음과 같다.
-
비밀번호를 관리해주는 프로그램인데, 말 그대로 내가 가입해놓은 많은 사이트들의 ID와 비밀번호를 한곳에서 통합관리를 해준다. Chrome과 합치면 자동 로그인도 해주며, 나는 SSH에 접속하기 위한 PEM파일도 맞기는 편이다. Role에 따라 계정을 분리해서 사용하고 있다. (개인/회사)
-
다른 좋은 웹브라우져도 많은데 (Firefox, Edge, ...) 이걸 쓰는 이유는
- Extension 기능 : 확장 프로그램이라고 부른다. Chrome을 더욱 풍부하게 만들어준다.
- People 기능 : 프로파일이라고 부르는데 각 사용자 별로 환경설정을 분리할 수 있다. Command + `로 전환해서 사용한다.
- "회사 Google Account"용
- 사용시 바로 이슈 관리 시스템인 Jira와 모니터링 시스템인 NewRelic에 접속된다.
- LastPass : 회사 계정 관리
- Google Calendar : 회사 일정 안내
- Google Mail Checker : 회사 메일 안내
- Google Docs Offline : 회사 문서를 오프라인일 때도 보고 편집할 수 있게 해준다. (회사가 있는 곳에 게임회사들이 많아서, 게임들이 업데이트 될 때에는 인터넷이 잘 안된다...)
- "개발 및 소스코드 서핑"용
- LastPass : 개발 계정 관리
- SimpleExtManager : Extensions이 많을 때 간단히 끄고 킬 수 있게 해준다. 사용하지 않는 건 끄는게 좋다.
- Secure Shell : ssh에 접속할 수 있게 해준다.
- Mosh : ssh의 발전된 형태인 mosh에 접속할 수 있게 해준다. 인터넷 연결이 좋지 않아도 ssh를 편하게 쓸 수 있다.
- JSONView : Json을 멋지게 보여준다. 현재 어느 노드에 있는지를 말해준다.
- User Agent Switcher for Chrome : UserAgent를 테스트할 때 쓸 수 있다. Developer Tools에서도 비슷한 기능을 이용할 수 있다.
- Pushbullet : 개발용 푸시를 주고 받을 때 사용하고 있다.
- "SoundCloud/Youtube 음악감상"용
- Looper for Youtube : Youtube에서 반복재생을 할 수 있다!
- Incognito 기능 : 시크릿모드라고 알고있는 기능으로 작업중, 위의 3가지 일이 아닐 때는 이 기능을 이용해 Extensions을 쓰지 않고 사용한다.
- Off The Record History 라는 익스텐션을 이용해서, 시크릿 모드에서도 사용 내역을 기록한다.
- NoCountryRedirect (NCR) : 항상 google.com 으로 들어갈 수 있게 해준다.
- SVG Screenshot : 링크를 누를 수 있는 스크린샷을 찍어준다!! 확장자는 SVG.
- HTTPS Everywhere : HTTPS를 쓸 수 있으면 쓰게해준다.
- uMatrix : NoScript의 Chrome 버전이라고 생각하고 쓰고있다. 믿지않는 사이트들에서 JavaScript를 사용하지 않게 해준다.
Developer Tools 기능 : 개발할때 정말 많은 도움이 된다. Remote Debugging 기능을 정말 애용하고있다.
Google Cast 기능 : Chromecast에 화면이나 소리를 보낼 수 있다!
Google Cloud Print 기능 : 인터넷으로 연결된 프린터를 사용할 수 있다. 회사의 프린터를 회사계정을 통해 로그인 하면 바로 사용할 수 있다!
대부분의 경우, 노트북에서 바로 개발을 한다기 보다는 개발 서버에 접속해서 개발을 진행한다.
- 맥이나 리눅스에 접속할때는 SSH를 이용한다.
- 윈도우에서는 PuTTY
- 맥/리눅스에서는 최신 OpenSSH를 이용한다.
- Mosh로 접속할 수 있는 서버라면 꼭 Mosh로 접속한다.
- 윈도우에 접속할 때는 Microsoft Remote DesktopⒶ를 이용한다. (CoRDⒸ를 사용하는 분들도 있더라)
- FileZillaⒸ : 개발 서버와 파일을 주고받기 위해 쓴다.
-
OpenVPNⒷ : 닫혀있는 망에 접속하기 위해 구성된 VPN서버에 연결하기 위해 쓴다. (주의!)
- 맥에서는 TunnelBlickⒸ을
- 리눅스나 윈도우에서는 OpenVPN을 바로 쓴다.
사실 이 6개만 있으면 웬만한 일은 다 처리할 수 있다.
IDE / Editor
-
- SDK와 Simuation은 환경 설정에서 따로 받아야 한다.
- 개발 환경을 백업해두는게 굉장히 중요한데, Xcode는 특히 더 중요하다. 무언가 개발하고 있는게 있고, 그게 런치되기 직전이라면, Mac에서 업데이트를 섯불리 누르지 마라.
- 새로운 SDK와 새로운 Xcode와 새로운 Compiler는 되던걸 안되게 만드는 n년간의 노하우가 있다.
- 잘 돌던 Bash Script도 깨진다. (진짜임)
- Xcode가 운영체제에 영향을 미치는 범위가 꽤나 커서, 그만큼 되던게 안된다고 생각하는게 편하다.
- 개발환경 백업은 상당히 편한데,
Xcode.app
의 이름을Xcode.7.3.1.app
으로 바꾸고, 새 Xcode를 앱스토어에서 받으면 된다. - 기존의 Xcode를 사용하고 싶다면, 아래와 비슷한 명령이 필요하다.
xcode-select -s /Applications/Xcode.7.3.1.app/Contents/Developer
- 놀랍게도 Xcode에도 Plugin System이 있다. Alcatraz 를 확인해보라!
- Xcode를 Ramdisk에 띄워서 좋은 성능을 얻는 스크립트가 있다.
-
Vim
- Mac에 기본으로 깔려있는 Vim을 이용하려면 이런 .vimrc가 필요하더라.
# .vimrc syntax on set backspace=2 set backspace=indent,eol,start command -bar -bang Q quit<bang>
아래는 내가 사용하는 플러그인들 목록이며, 웬만한 링크는 클릭하면 스크린샷으로 작동화면을 볼 수 있다ㅇ
vim-plug 로 vim의 플러그인을 관리하며,
scrooloose/nerdtree 로 폴더목록을 보고,
Xuyuanp/nerdtree-git-plugin 으로 각 파일의 git 상태를 보며,
bogado/file-line 은
vi app.py:101
이라는 명령을 칠 수 있도록 해준다. (Traceback이나 Stacktrace 줄을 바로 복사/붙여넣기 -> 행복!)simnalamburt/vim-mundo 으로 실수를 바로잡고 (undo),
-
rhysd/committia.vim 로
git commit
을 편하게 진행한다.# .gitconfig [diff] tool = nvimdiff [difftool "nvimdiff"] cmd = "nvim -d \"$LOCAL\" \"$REMOTE\""
airblade/vim-gitgutter 는 어떤 줄이 git에서 변경되었는지를 보여준다.
bkad/CamelCaseMotion 단어사이를 넘나들 수 있는 기능을 제공해준다.
vasconcelloslf/vim-foldfocus 특정 Fold 부분만 접어서 볼 수 있도록 해준다.
terryma/vim-multiple-cursors 원하는 문자열을 쉽게 선택해서 치환할 수 있는 기능을 제공해준다.
terryma/vim-expand-region 선택영역을 브라켓단위로 더 넓혀준다.
tpope/vim-eunuch Unix명령을 지원해준다
:SudoWrite
가 완소.osyo-manga/vim-anzu 검색시 전체 m개 중 n번째인지 알려준다.
kassio/neoterm Vim안에 Terminal을 사용할 수 있도록 해준다.
:T zsh
nathanaelkane/vim-indent-guides Indent를 잘 쪼개서 알려준다!
tweekmonster/local-indent.vim 그 Indent 중 어디에 너가 있는지 알려준다! Scope를 판단할 수 있다.
vim-airline/vim-airline Vim에 상태바를 띄워준다. (추가적인 font설치가 필요하다.)
kristijanhusak/vim-hybrid-material Vim에서 쓸 수 있는 Material 테마.
ryanoasis/vim-devicons Nerdtree에 아이콘을 보여준다.
zhaocai/GoldenView.Vim 황금비에 맞춰서 분할창을 만들어주고 전환할 수 있도록 해준다.
너무 많이 쓰는 것 아닌가 싶기도 한데, 나는 딱 최소한이라고 생각하고 씁니다.
-
Markdown Editor: MouⒸ / MacDownⒸ / TyporaⒸ
- 마크다운 에디터를 따로 쓰는 편인데, 이 글을 쓰는 중에 Typora가 발표되서 지금 그걸로 작성하는데 꽤 편하다!
Applications
- 개발
- iTerm2Ⓒ : Mac에서 주로 쓰는 Terminal
- FilezillaⒸ / CyberDuckⒶⒸ : FTP에 접속하기 위한 프로그램이고 나는 filezilla에 익숙해져있어서 이걸 주로 사용한다. cyberduck은 예뻐서 넣어놓는 편.
- LaunchRocketⒸ : System Preferences에서 Homebrew를 통해서 설치된 OS X 의 서비스 (launchd)를 관리할 수 있도록 해줍니다. (강추!!!!! 링크에서 스크린샷을 꼭 보세요!!!)
- ngrokⒸ : 사설망에서 개발을 진행중일 때, 사설망 밖으로 포트를 열어주어야 할 경우 사용하는 외부서비스입니다.
- PusherⒸ : 애플 푸시 서비스 (APNS)를 테스트할 때 씁니다.
- GitKrakenⒸ : Git Branch를 예쁘게 보고싶을 때 씁니다.
- PyCharmⒸ$ : JetBrains사의 Python 개발 IDE 입니다. 저는 JetBrains사를 신뢰합니다 <3
- 학생라이센스를 지원해줘요.
- Fabric : Xcode과 붙어서 개발 Pipeline을 훌륭하게 해주는 Twitter의 SDK Platform입니다.
-
vagrant / vagrant-manager Ⓒ: Virtual Machine을 관리해주는 툴입니다. VirtualBox를 쓰신다면 추천합니다만, 저는 개인적으로 docker로 다 해결하는걸 좋아합니다.
- 추가적인 보안
- Indicator:
-
IP-in-menu-barⒸ : 메뉴바에 IP를 띄워줍니다.
- 가난한자의 iStat MenusⒸ$
- Security-GrowlerⒸ : 보안 메세지가 생길 경우 Notification Center로 알려줍니다.
- Little SnitchⒸ$ : 누군가가 Network를 통해 접근을 시도할 경우, 이를 승인/거절 할 수 있는 팝업을 띄워줍니다.
- Micro SnitchⒸ$ : 누군가가 Mic나 WebCam을 쓸 경우, 이를 경고로 알려줍니다.
- Harden:
- DNSCryptⒸ : DNS요청을 암호화해서 처리해줍니다.
- VallumⒸ$ : OS X Application Firewall
-
MurusⒸ$ : OS X Network Firewall
- Murus Lite는 Free
-
knockknockⒸ
"Who's there?" See what's persistently installed on your Mac.
-
blockblockⒸ
"please alert me anytime, anything is persistently installed"
-
taskexplorerⒸ
Explore all the tasks (processes) running on your Mac with TaskExplorer
-
ostiariusⒸ
is tool for El Capitan that blocks unsigned internet binaries from executing
- keybaseⒸ* : 궁금하시면 https://keybase.io/minhoryang 여기에 들어와보세요.
- 초대장 필요하신 분 연락주세요.
- munkiⒸ : OS X 용 사설 패키지 관리자와 App Store를 만들 수 있습니다. 많은 수의 맥을 관리하는 사람들에게 추천합니다!
- 생산성
- Pomodoro Time
- Bandizip-XⒶ$
- Spectacle
- cloud
- macs-fan-control
- flux
- handbrake
- Irvue
- keycastr
- aerial
- MovistⒶ$
- Slack
- QuickLook
- qlcolorcode qlimagesize qlstephen quicklook-json
- betterzipql
- cert-quicklook
Command Line Tools
-
개발
- anyenv:
XCode + Swift:
synxⒷ
환경:
-
dockerⒷ docker-machineⒷ docker-composeⒷ
- 이 세개를 Docker for Mac 으로 설치하는게 더 좋다!
docker-rsync
gitⒷ git-lfsⒷ
vimⒷ
-
보안
- upgrade:
- opensshⒷ
- opensslⒷ
- curlⒷ
- wgetⒷ
- 개발을 위해:
- mobile-shellⒷ
- nload
- nmapⒷ
- mitmproxyⒷ
- battle:
- ipfsⒷ
- torsocksⒷ
- gpg-agentⒷ
-
생산성
- treeⒷ
- highlightⒷ
- gistⒷ
- jqⒷ
- htop-osxⒷ
- thefuck
- trash
- zshⒷ
- tmuxⒷ
- reattach-to-user-namespaceⒷ
- https://github.com/aykamko/tagⒷ
- https://github.com/ggreer/the_silver_searcher (ag)
- linux-compatibility:
- coreutils
- findutils
- grep
- gnu-which
- gnu-sed
- gnu-indent
- gnu-time
- gnu-tar
- moreutils
-
~/bin/
- consul
- scope
- boom
- caddy
- ntfy
--- TO BE CONTINUE~~~
Connect AWS EC2 Instance with PyCharm Professional
Download Pycharm Professional and Install it.
Launch PyCharm - Check out from Github
Login - Clone Repository
Open it
Tools - Deployments - Configuration
-
Add SFTP Server
- SFTP Host : Elastic IP or Public DNS
- Root Path : Autodetect
- User Name :
ubuntu
(default for AWS Ubuntu) - Auth Type : Key Pair
- Private Key File
- Web server root URL :
http://HOST:PORT
- Set Deployment path
Check Automatic Upload
Preferences - Project - Project Interpreter - Add Remote
-
Use Deployment Configuration
- Set your interpreter path (NEED TO BE CHANGE HERE!)
- Set your interpreter path (NEED TO BE CHANGE HERE!)
Domain wasn't covered with the real rights
도메인을 사는 건 이제 나에게 그리 큰일이 아니다. 지금까지 샀던 도메인이 10개는 넘겠지? 그런데 지금, 내 눈앞에서 도대체 무슨 일이 벌어지고 있는 걸까?
Line.co.kr 사건
네이버 라인, 'https://t.co/s7Oiwpw9Ni' 도메인 등록보유자에 승소https://t.co/yil0u0X1JF
— AMI (@amiworldmaster) 2016년 2월 9일
살다 살다 별 미친 판결을 다 보겠네
잘 요약된 곳이 많으니, 아래 중 한 곳에서 참고하면 된다.
라인 도메인 (line.co.kr) 분쟁에 대한 정리 | 베타뉴스
- 개인이 line.co.kr 을 소유하고 있었다.
- 라인 코퍼레이션에서 소유자 상대로 인터넷주소분쟁조정위원회에 말소신청을 했다.
- 인터넷주소본쟁조정위원회에서는 말소신청을 받아들임.
- Line.co.kr 도메인 네임 소유자는 이에 불복하고 서울지방법원에 부당하다며 소송함.
- 서울지방법원에서는 원고의 청구는 이유가 없으므로 이를 기각한다는 판결을 내림.
네이버 갑질? 라인(line) 도메인 사건 정리 | 문화병론가 고성궈
네이버 라인 도메인(line.co.kr) 사건 요약 정리 만화.jpg
의외로 도메인에 대해서는 많은 문들이 잘 모르는거 같습니다. 사실 알기 쉽지도 않고요..
그러니까...
- 소유자가 line.co.kr을 일찍 샀으며,
- <차선도색협회>라는 협회도 있다. (사실 여기까지 생각을 끌 필요도 없는데...)
그런데 왜 내가 산 도메인을 반납해야 하는가?
'도메인을 보유'한다는 것?
‘도메인을 보유’한다는 게 어떤 법적 권리를 의미하는지는 세 가지 설이 경합합니다. 1)라이센스설은 기관이 개인/단체에게 사용의 권한을 라이센싱한다는 소리인데, 실제로 어느 기관도 도메인을 소유하고 있지는 않으므로 보편적으로 받아들여지진 않습니다.
— 치치 (@ChiC_hi) 2016년 2월 9일
2)재산권 설은 도메인의 보유자가 목적물의 사용권, 지배권, 양도권 모두를 가진다는 설입니다. 이는 3번 설과는 다르게 도메인의 물권적 속성을 인정합니다. 도메인을 뭘 어떻게 쓰고있든 타인의 침해에 대해서 소송도 걸고 반환청구도 하고…
— 치치 (@ChiC_hi) 2016년 2월 9일
3) 채권설은 도메인 소유자가 도메인의 물권을 획득한 것은 아니고 등록기관과의 계약 위에서 채권만을 가지고 있다는 설입니다. 등록기관과 계약한 사항을 위반하면 자기 의사에 반해서 타인에게 양도될 수도 있고 채권이 파기될 수도 있고 등등...
— 치치 (@ChiC_hi) 2016년 2월 9일
https://t.co/hKI4ZO1kqk사건 을 포함한 도메인 관련 소송 중에 원래 도메인 소유자가 그 도메인을 적합한 곳에 사용하지 않았으므로 인지도가 더 높은 쪽에 도메인을 양도 어쩌구 하는 판결이 종종 있는데, 이는 3번의 채권설을 따른 결과.
— 치치 (@ChiC_hi) 2016년 2월 9일
근데 모든 국가가 3)번을 지지하느냐고 하면 또 아닌 것이, 미국은 초기에 3)번을 지지하다가 점점 도메인 자체의 물권적 성격을 인정하는 판결을 하고 있다고 하네요. https://t.co/sUBAIu9qDM판결이라던가…
— 치치 (@ChiC_hi) 2016년 2월 9일
쨌든 도메인을 올바르게 사용하지 않았을 때 정부기관이 이걸 맘대로 타인에게 양도해도 되냐 안되냐는 국가에 따라 시대에 따라 다르고, 한국 법원은 꽤 일관적으로 도메인의 물권적 속성을 부정해 온 모양입니다.(끝)
— 치치 (@ChiC_hi) 2016년 2월 9일
이 사건 전까지는 어떻게 생각하고 있었냐면...
'Domain도 하나의 Content겠거니'
Domain을 구매하는데 비용은 기본적으로 TLD 마다 다르다. blahblah.kr를 구매하는데 blahblah.com을 구매하는데 blahblah.jp를 구매하는데 드는 비용은 다 다를 수 있다는 거다.
이걸 나는 어떻게 이해했냐면, 각 TLD의 DNS서버를 관리하기 위한 관리비용으로 생각했다. 그러니까 도메인을 하나의 컨텐츠로 생각하고, 고전적인 CDN이라고 이해한거지.
Q. 그러면 도메인의 가격은 누가 결정 하고, 어떻게 산정 되었는가?
그냥 마케팅 비용인 거야? 물건도 아니니 렌탈이라고 보기 어렵고, 공공재라고 말하기에는 닳지도 않아. 내가 1년을 다 못 채우는데, 관리비를 다 내야 하는 거야? 잘못했으니까?
Q. 리다이렉팅을 다음으로하든 트위터로하든 무슨상관인가?
첨언하자면 네이버측에서 먼저 접근해서 금액을 제시하자 그걸 거절하고는 다음 카카오로 리다이렉팅 돌리는거 자체가 Uniform Domain Name Dispute Resolution Policy를 위반하는거라 ...
— PPaPPer (@PPaPPer) 2016년 2월 10일
(이분을 비난하는게 아닌 건 아시죠?)
co.kr을 Daum으로 연결한다고 해서 고객이나 회사가 손해를 입는다면, 아니면 수익에 손해를 끼쳤다는 게 확인되면 (잠재고객 이탈?) 그때 그 건에 대한 소송을 걸어야지.
Daum에 찾아가서 '쟤네가 A나 ALIAS를 Daum에 걸어놓았으니, 쟤네를 제재해주십시오'라고 부탁해야 하는 거 아닌가?
상표권을 침해하는 것도 아니고, 피싱 등 범죄를 저지른 것도 아니고, 고작 리다이렉팅이라고.
전략 아니야? 21C 알박기라고.
도메인이 그렇게 빡세게 한정적인 자원이라고 생각하지 않는게, 분명 도메인을 표현하는 Regular Expression에 의해 Max로 사용할 수 있는 도메인이 한정되어 있겠지만, 여전히 TLD는 증가하고있고, 우리가 아직 도메인이 포화상태라는 말을 못 들었으므로 충분히 남아 돌 것이라고 생각.
그냥 마케팅 창구로 활용할 수 있는 것들 중 하나가 다른사람이 선점한 거라고 생각해야지뭐.
'언제부터 도메인 거래가 위법이었지?'
인터넷을 서핑하다 보면 필연적으로 마주치게 되는 Parking 사이트들에 노출되게 되는데,
- 이는 기존에 있던 URL의 도메인이 만료(또는 사용중지)되었을 때
- 그 도메인이 뿌린 URL 등의 가치를 높게 산정한 누군가가 (또는 자신이)
- 도메인을 구매하고 Parking 사이트에 연결시켜서
- 일반사용자에게는 광고를 (수수료를 나눠 먹는다)
- 도메인을 원하는 사용자와는 거래를 시도한다. (여기에서도 수수료를 얌)
또 익숙하거나 유명한 단어로 이루어진 황금도메인에 대한 경매(sex.com 등)도 잘 진행되고 있지 않았나?
이걸로 돈을 벌고 있는 회사가 꾸준히 있다. 레드오션이라고.
Q. 왜 우리는 도메인으로 돈을 못 버는가? 금액을 선제시하면 안돼?
Q. 사용 목적을 왜 증명해야 하는가? 그럴꺼면 신청할 때 사업기획서를 받아야지.
Q. 도메인 연장을 금지하면 되잖아. 왜 하필 말소야?
말소는 또 뭘까? line.co.kr은 앞으로 누구도 못 쓰는 걸까? 아니면 계약이 해지되어서 누구나 구입할 수 있는 걸까? 아마도 후자겠지만 어떤 쪽이든 꿀잼이 흐를 것으로 예상된다.
URL의 U는 Unique이다.
더 이상 내 도메인이 아니면, 내가 뿌려놓은 (뿌려진) URL은 어떻게 되는건데?
몇 년 전, Shortest URL의 유행이 시작하던 때에, 미국 유명 신문사가 (아마 뉴욕타임즈일 듯)(찾아보겠습니다) 이미 온라인으로 뿌려진 많은 단축 URL들로 자사의 사이트에 접속할 수 없게 되면서, 이를 되찾기 위해 많은 노력을 들였던 적이 있었다. (아마 기존 사이트의 URL 체계가 바뀌었거나, 단축 URL 사이트 자체가 날아간 거겠지?)
이미 웹에 뿌려진 URL들에게 최신 Domain을 전달해 주는 프로파게이션 프로토콜도 없잖아? 메타데이터로 관리하고 있는 것도 아니고? 그래서 내가 이걸 잘 쓰고 있다고 주장해야 하는 거야?
Namecoin는 해결책이 될 수 있나?
...
EmojiTest
Below this line, there should be a letter of DARK SUNGLASSES, U+1F576. 🕶 But didn't.
[BUG] unicode emoji wasn't handled at nikola
Write your post here. 🕶
Hello Is there any Python 3.5+ code guidelines for Python 4
tl;dr
- Write 3 only
- It will be broken at 2.7
- then Duct-taping it
STOP WRITING PYTHON 4 INCOMPATIBLE CODE
Just before I need to write some python project, I saw this at Hacker News. It shows the reason why shouldn't use Six library. But I couldn't find guidelines for Python 4. So I started to write it.
Six: Python 2 and 3 Compatibility Library
Six provides simple utilities for wrapping over differences between Python 2 and Python 3. It is intended to support codebases that work on both Python 2 and 3 without modification. six consists of only one Python file, so it is painless to copy into a project.
The name, “six”, comes from the fact that 2*3 equals 6.
Now, we need TwentyFour
.
Really? why not Twelve
?
I hope that there are some people who wanna throw Python 2 away. (me too) In my case, particular meaningful libraries block this. (such as Twisted).
So, check first
Some helpful sites for finding a reason to use Python 2.
I don't always use Python 2, but when I do, only 2.7.11+
Python 4?
-
Why Python 4.0 won't be like Python 3.0
My current expectation is that Python 4.0 will merely be "the release that comes after Python 3.9". That's it.
So, code for Python 3.5+ first
Break it at Python 2.7.11+
Fix it with
- flake8
- py.test
- tox
- travis CI
Then, What differences exist between Python 3.5+ and Python 2.7.11+?
- New features: https://docs.python.org/dev/whatsnew/index.html
- 3.5: typing, ...
- 3.4: asyncio, enum, ...
- 3.3: u'unicode' (again), venv, ...
- 3.2: concurrent.futures, PEP-3333, ...
- The key differences between Python 2.7.x and Python 3.x with examples
For 3 users, just follow those rules, then It will be okay:
- Manage Python Versions with pyenv
- Manage Python Project Environments with pyenv-virtualenv
-
Shebang:
#!/usr/bin/env python
-
print()
as a function. -
u'Everything'
andb''
-
class Base(object):
(object) -
except Exception as e:
(as) -
2/3.0
(think your C/C++ experiences) - Dictionary Iteration: Use .items(), .keys(), .values()
- String Manipulation: Use .format()
- Typing (3.5+): Comment it
- Use latest 3rd-party packages
- Python 2 only requirements.txt?!
- Future
- Enum (3.4+): enum34 at 2.7
- what about requirements.txt?! do we divide it?
When additional problems happened to you, check those:
- Porting Python 2 Code to Python 3
- Cheat Sheet: Writing Python 2-3 compatible code
- Using Python 2-only dependencies on Python 3
- Nine: Python 2 / 3 compatibility, like six, but favouring Python 3
More links
DISCLAIMER:
Maybe it's not, but I'll update those asap. So, please ping to me (twt@angryonhim). Thanks.
AWS EC2 Instance Creation for Python-Dev
Instance 생성
- AWS 사이트에 접속한다
- Tokyo에 접속된 것을 확인한다. 아니면 Tokyo로 바꿔준다.
- EC2를 누른다
- Instances 탭에서 자신의 Name을 가진 Instance가 있는지 확인한다.
- 없으면 생성시작
Launch Instance
- 운영체제는
Ubuntu Server 14.04 LTS (HVM), SSD Volume Type
을 선택. - Instance 타입(사양)은
t2.micro
를 선택. - Details 부분과 Storage 부분은 다음버튼으로 넘어가고
Tag Instance
부분의Name
에 자신의 이름을 기재한다.-
Security Group
항목에Security Group Name
을 자신의 이름을 이용해 적절히 바꾸고,Add Rule
을 통해5000
포트를Anywhere
로 이용할 수 있도록 설정한다. Launch
Key Pair
는 기존에 생성해 둔 파일을 사용하던지, 여기서 새로 만들어서 사용한다.
Instance에 Pyenv+Python 설정
-
다운 받은 Key Pair (.pem) 파일과 EC2의 Instances탭에서 보이는 Public DNS를 이용하여 Instance에 접속!
ssh -i DOWNLOADED.pem ubuntu@MY_PUBLIC_DNS
-
다양한 Python Version을 문제없이 사용하기 위한 Pyenv 설치:
pyenv-installer의 명령줄 사용
sudo apt-get update sudo apt-get install git curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
설치 후 아래의 부분을
~/.bash_profile
에 추가export PATH="/home/ubuntu/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
~/.bash_profile 실행
. ~/.bash_profile
-
Pyenv를 통해 Python 버전 설치!
-
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev
-
원하는 Python 버전 설치
pyenv install 3.5.1
-
프로젝트 별 패키지 분리를 위해
Virtualenv
를 적용pyenv virtualenv 3.5.1 3.5.1-flask
-
원하는 프로젝트 폴더에서 특정 Python 환경을 사용하도록 설정
mkdir MY_SWEET_NEW_PROJECT_HOME cd MY_SWEET_NEW_PROJECT_HOME pyenv local 3.5.1-flask
-
필요한 Python 패키지 설치
pip install flask
-
-
[부록] Python 개발을 위한
~/.vimrc
간단 설정syntax on filetype indent plugin on set tabstop=8 set expandtab set shiftwidth=4 set softtabstop=4
(이 글은 선린인터넷고 학생들의 Flask 교육을 위해 쓰여졌습니다.)
popo
POPO
Define everything using POPOs (Plain Old Python Object), then you can easily use it from SQLAlchemy ORM, Protobuf3, and so on.
Wanted Goals
- Python 3
- $ popo input.py
- -> input.sqla.py
- -> input.proto
- POPO input files just work as normal python file
- Pipeline:
- Read Input
- Convert to Own DataTypes
- Target Factories
- Outputs
Wanted Types
-
Python Default Types
- Numeric thingy: Integer, Float, Double, ...
- String
- List
- Bytes
- DateTime
- Enum
- ...
Wanted Targets
Wanted Features
- Versioning
- SQLAlchemy will cover this by alembic
- Protobuf need to consider this
- read olders and managing the
- Targets Factory and Configurable Targets? (custom type converter?)
- want to export with
- Prefix/Postfix naming
- ...
Resolved Question
-
PEP 484 - Type Hints?
- Nope, it's not for class defining.
-
How to get parse tree of python?
- ast: "designed to generate an abstract syntax tree and ignores all comments and formatting"
- parser: "internal code parser, which is optimized to generate byte code and too low level"
- lib2to3: "high level and contains all formatting, but that doesn’t mean it’s easy to use"
- Why don't you just make 2to3 fixer for converting those?
- I don't think 2to3 is not for it.
- how to get the parse tree form lib2to3?
- lib2to3.pgen2, but it's for python2 (maybe)
- oops, our target is python3
- lib2to3.pgen2, but it's for python2 (maybe)
- Why don't you just make 2to3 fixer for converting those?
- yo yo yo yo yo!!! We don't need to parse! We just used class.
- So Class.__dict__() and instanceof() will cover all.
- really? dive it now!
- import
popo-input
- dir(
popo-input
) - .__dict__
- .
- import
- really? dive it now!
- So Class.__dict__() and instanceof() will cover all.
Unresolved Questions
- Is really needed? helpful?
- How to ...
- save datetime @ protobuf?
- maybe timestamp and timezone.
- manage the build?
- name exported output?
- limit the type of contents?
- limit the size of string with this?
- using comment? (noooooooooo..)
- using
- manage the metadata of input/output source code?
- why need it?
- ...
- why need it?
- save datetime @ protobuf?
- Where is the gap for adding versioning process.
- No Private / Forgien Key?!
- Nested Class!
- Alphabetical Order Class Contents?!!!
- How to save the order of input, and keep it as output?!!!!!!!!!! <- currently biggest mission blocker (lib2to3 needed?)
TODO
- .gitignore
Milestone
- Set the clear blueprint for v0.0.0 (due: 151115)
- minimum wanted-types:
- integer
- string
- ?
- 2 targets
- sqlalchemy
- protobuf
- 1 feature
- target factory
- Goal: directory design
- Goal: pipeline design
- minimum wanted-types:
- ...
API
- Kubernetes (Docker Container, Label(Version Tagging))
- Load Balancing
- DNS-Based Connecting
- Git-Branch-Based Versioning
- (External Configuration Injecting)
- (Single-Source Based?)
- Divide the roles by launch commands?
- (Multiple DC Supported?)
- Latest Checker Needed
- First, check latest
- Second, if latest, use it and notify. If not, delegate or sync that info.
- Data Exchanger Needed
- Latest Checker Needed
- (Local Testing?)
API Routers (Endpoints)
- HTTPS
- Isolated Repository
- Versioning (which api specs included)
API Service Specs
- HTTP
- Versioning
- Multiple Features encapsuled
API Workers (Logics)
- GRPC
- Versioning (which algorithms used)
Datastores
- GRPC
- Services:
- DB: SQLAlchemy
- MQ(Message Queue): RabbitMQ
- File / Object Storage: S3
- Versioning
- Syncable Data Exchanger
NAT
- Git Repository
- Kubernetes
- Consul DNS (?)
- Bastion Hosts
- VPN
WORK IN PROGRESS...
20151103 Added
- COOKIECUTTER Available
- Source code with Metadata
- Semantic Versioning (If modified, new version get)
- Dependency List / Check
- Exposed Feature Flags
- Additional Dependency
- Conditional Feature Flags
- Proto Func Injection
- http://blog.launchdarkly.com/feature-flag-driven-development/
- http://zcentric.com/2015/10/26/kubernetes-deployment-pipeline/
- https://github.com/eBay/fabio
Travis CI will build minhoryang.github.io
Current Status
minhoryang.github.io have 3 branches: master, source, ama
- master branch has *.html files for exposing by Github Pages
- source branch has *.md manuscripts and Nikola's conf.py
- ignores ama branch, it just has README.md only
With nikola build
and nikola deploy
, output/* at the source branch pushes to master branch.
Dependencies are well preserved at requirements.txt.
External dependencies are included on source branch's plugins/
and themes/
directory.
I want
- to update my blogs at Github web page
- even with iPhone
Let's resolve it.
Conditionally Selecting the build-wanted commits by commit msg
At the client side: iPhone Github client may not support pre-post hook.
At the server side: post-receive hook will deny the commit which not fit the commit message rules, but Github doesn't supported it but supported the web hook. but web hook can't reject the commit.
Travis CI can skip the build. but by [ci skip] will be located with every my normal environment pushes.
From now on, I need to write [ci skip]
at every commits when I pushed with usual workspaces.
(Really?! # TODO : What a useless byte!
)
I really want to bypass it. but Travis ci will triggering only by push/pull requests.
(TO BE CONTINUE)