토이 프로젝트

첫번째 커밋을 보니 3월 3일이다. 대충 한달 정도 걸린거 같다. 평균적으로 하루에 30분에서 2시간 정도 투자를 했다. 집에서는 두 아기 때문에 작업이 거의 불가능하므로 회사에서 점심 시간 혹은 퇴근 무렵에 주로 코딩을 했다. 긴 시간을 투자하면 좋겠지만 여건이 안되기 때문에 이런 제약이 생겨버렸는데 의외로 좋은 점이 있었다. 어려운 문제 혹은 설계상의 문제를 만났을 경우 머릿속으로만 생각을 해야 하는데 노트북 앞에서 손만 바쁘게 움직이는 것보다 효과적인 경우가 많았다. 나는 회사에서는 주로 스프링/자바로 개발을 하고 프론트작업도 병행 하고 있다. 사실 나에게 주어진 업무는 정해져 있기 때문에(개발자 이전에 회사원인건 어쩔수 없다.) 사용하는 기술이 잘 바뀌지도 않고 꼭 알아야 할 필요가 없다. 2년전 프로젝트 진행 중에 선택한 AngularJS를 여전히 잘 사용하고 있으며 Angularjs2, Reactjs 등등의 새로운 프레임워크가 나오긴 했지만 버스 갈아타듯이 쉽게 갈아탈 수 있는 것이 못된다. 이번 토이 프로젝트를 시작하게 된 동기는 프론트 관련 기술을 이것저것 찾아보고 있었는데 도무지 뭐가 뭔지 감을 잡을 수가 없었다. http://seokjun.kr/front-end-dev-stack-2017/ http://d2.naver.com/helloworld/3618177 https://www.codementor.io/learn-programming/javascript-trends-skills-developers-should-learn 이런 (약간의 자괴감이 느껴지는) 글들이 넘쳐 난다. 토 이프로젝트의 주제는 '채팅 사이트'로 정했다. 가장 먼저 소켓 라이브러리를 사용해서 메시지 주고 받는걸 구현해야 한다. 그 다음은 그렇게 만든 채팅 기능을 올려놓을 웹어플리케이션이 필요하다. 찾아보니 SocketIO와 SockJS가 있었는데 SockJS를 선택했다. 특별한 이유는 없었다. SockJS가 먼저 눈에 들어왔

NERDTree 커서 위치

autocmd VimEnter * NERDTree | if argc() == 1 | wincmd p | endif 그냥 vim 실행($ vim)하면 커서를 NERDTree 에 위치시키고 파일을 열었을때는($ vim filename) 파일에 커서를 위치시킴

ParallelStream 효과적으로 사용하기

순차 스트림을 병령 스트림으로 쉽게 바꿀수 있다. 하지만 언제나 병렬 스트림이 빠른 것은 아니다. 확신이 서지 않는다면 벤치마크를 해보라. Boxing, Unboxing을 주의하라. 되도록이면 IntStream, LongStream, DoubleStream을 사용하라. 순차 스트림보다 병렬 스트림에서 성능이 떨어지는 연산이 있다. limit, findFirst 등 스트림에서 수행하는 전체 파이프라인 연산 비용을 고려하라. 처리해야할 요소수가 N이고 처리하는데 드는 비용을 Q라 하면 전체 처리 비용은 N*Q이다. Q가 높아진다는것은 병렬 스트림으로 성능을 개선할수 있는 가능성이 있음을 의미한다. 소량의 데이터를 병렬 스트림으로 처리하는것은 병렬화 과정에서 생기는 부가 비용 때문에 이득이 없다.  스트림을 구성하는 자료구조가 적절한지 확인하라. ArrayList가 LinkedList보다 효율적으로 분할할수 있다. 스트림의 특성과 파이프라인의 중간 연산이 스트림의 특성을 어떻게 바꾸는지에 따라 분해 과정의 성능이 달라질수 있다. 필터 연산이 있으면 스트림의 길이를 예측할 수 없으므로 효과적인 병렬 처리가 어렵다. 최종 연산의 병합 과정 비용을 살펴보라. 병합 과정의 비용이 비싸다면 병렬 스트림으로 얻은 성능의 이익이 상쇄된다. (ParallelStream이 항상 (Sequantial)Stream보다 빠를까요?라는 질문에 저정도 대답하면 100점) 출처 - 자바8 IN ACTION 237페이지

Pretty print JSON in terminal using python module

➜  ~ echo '{"lang":"python"}' | python -m json.tool {     "lang": "python" } ➜  ~

Deleting word in vim

dw 또는 cw 로 삭제를 하면 커서 뒤만 지우는데 예) blogger 라는 단어를 지우려는데 커서가 o 위치에 있으면 ogger만 지워짐 커서가 o에 있더라도 blogger 단어 전체를 지우고 싶다면 daw 또는 caw 하면 된다.  daw : delete the word under the cursor caw : delete the word under the cursor and put you in insert mode

gitup.co

http://gitup.co/ git을 사용하다보면 commit을 수정하거나, 나누기, 합치기 등등의 작업을 해야할때 있다. 이때 rebase 등의 명령을 사용해서 작업을 하는데 git 명령어를 완벽하게 이해하지 못한 상태에서 작업을 하다보면 commit을 날려먹는 등의 실수를 할수 있다. 물론 reflog 등을 사용해서 복구는 가능하지만 그 작업 또한 쉽지 않다. gitup은 gui 환경에서 rebase를 할수 있는 툴이라고 생각하면 될듯. cmd+z/cmd+shift+z 를 통해서 언제든지 작업을 redo/undo 할수 있다. commit 메시지를 조금 수정하고 싶을뿐인데 rebase 명령어가 어렵다고 생각되면 이 툴을 사용하면 된다.

Hibernate(Criteria) having절 사용하기

criteria에서 having절을 사용할수 있는 방법이 없는듯!? 고민고민하다가 방법이 떠오름. criteria.add(Restrictions.sqlRestriction(" 1=1 having sum(EXPOSE) > 0"));