본문 바로가기

프로그래밍

CopyOnWriteArrayList in Java What is CopyOnWriteArrayList in Java - Example Tutorial java.util.concurrent.CopyOnWriteArrayList 자바를 사용한 지는 1.2 때부터 사용했지만, 1.3 이후부터는 사실상 추가된 Spec에 대해 공부한 적이 별로 없다. 최근 "Effective Java 2nd"을 발췌독 중에 재미있는 내용이 있어 간략히 정리해 본다. 대게 자바의 List 는 ArrayList를 많이 사용하게 되는데 Thread-safe 하지 않기 때문에 Iterator 혹은 For-each 문 내에서 remove 메소드를 사용하면 ConcurrentModificationException 예외를 자주 만나게 된다. 이런 경우 나는 별도의 객체를 생성하여 add 하.. 더보기
BASH 스크립트 상에서 백그라운드 실행의 폴링시 유의사항 while 과 do while 의 차이에 따라서 실행이 다른 경우 function no_wait() { cat $1 | while read LINE do a $LINE & done echo "wait" wait } function wait_for() { for x in $(seq 1 10); do a $x & done echo "wait" wait } function wait_while() { while read LINE do a $LINE & done < $1 wait } 위의 실행에서 c 함수는 wait 하지 않고 바로 종료됨에 유의할 것. 더보기
파이썬 한글 인코딩 CPC949 인코딩을 UTF-8 변환 S.decode('cpc949').encode('utf-8') 위의 방식으로는 오류문자열을 처리할 수 없으므로 unicode(S, 'cpc949', errors='ignore').encode('utf-8') 더보기
개발과 일정에 관한 글 http://techit.kr/14089 정확한 스펙과 일정 예측 - 정확한 스펙을 근거로 한 WBS 체계적인 진행과 모니터링 - Daily Build, 소스코드관리/버그관리시스템, 코드리뷰, 이슈오픈, Build 자동화 합리적인 일정 복구 - 더 낮은 우선순위의 요구사항은 다음 버전으로 연기한다. - 시간외 근무를 단기간 동안 강제로 시킨다. - 일정을 연기한다. 더보기
Heroku, Neo4j and Google Spreadsheet 이런 것을 심심할 때에 하는 사람이 '데이터 사이언티스트' 일까요? 재미있는 영상입니다. 감상해 보시지요~ Heroku, Neo4j and Google Spreadsheet in 10min. Flat. from Peter Neubauer on Vimeo. A screencast about deploying an application using the Neo4j add-on on Heroku to expose a readonly Cypher endpoint. Then integrating with a Google Spreadsheet for querying and rendering of the results. For step by step instructions, code and sample data se.. 더보기
UnicodeDecodeError: 'ascii' codec can't decode certain bytes https://bugs.launchpad.net/ubuntu/+source/python-mysqldb/+bug/57067 http://sourceforge.net/tracker/index.php?func=detail&aid=1521274&group_id=22307&atid=374932 한 동안 저를 괴롭혔던 우분투 상에서 파이썬으로 한글데이터를 MySQLdb에 저장할 때에 발생했던 문제의 원인을 찾았네요 저는 python 2.4 버전을 사용하고 있었구요, 위의 링크에 제공되는 cursor.py 파일을 수정하는 것으로 해결 했습니다. 패치파일의 일부는 아래와 같습니다. - query = query.encode(charset) + if isinstance(query,UnicodeType): + query =.. 더보기
자바 입문서로 손색이 없는 '소설같은 자바 2' 소설같은 자바 2 - 최영관 지음/자북 자바를 처음 접하게 된 것은, 회사의 프로젝트로 대략 5년전 쯤이었을 겁니다. 당시의 버전은 대략 1.3~1.4 정도 였던 것으로 기억하는데, Swing을 사용하여 네트웍으로 연결된 통신장비의 상태를 보여주는 프로젝트 였습니다. 기본 서적과 더불어, 패턴관련 책도 한 권 같이 보면서 공부했던 기억이 납니다. 그 이후에는 솔직히 자바를 접할 기회가 거의 없었는데, 올해 들어서 하둡관련 공부를 조금 하면서 다시 관심을 갖게 되었고, 최근 3개월 전부터는 자바로 저장소를 개발하면서 부터, 다시 하게되네요... 예전에 비해서 많이 변화된 API하며, 추가된 기능들이 많았지만, 굳이 책을 다시 보고 싶지는 않았는지 -_-;; 인터넷과 주변분들의 질문으로 나름대로 공부를 했었.. 더보기
List와 Memory 복사를 이용한 Insertion Sort의 차이... 최근 알고리즘에 대해서 다시 공부하고 있습니다. 한번씩 생각해두지 않으면 너무 쉽게 잊혀지는 것 같습니다. 그래서라도 자꾸 보게되는데요... 오늘은 가장 처음에 나오는 정렬에 관한 실험입니다. java로 구현해보았는데요, 재미있는 부분은 정렬된 변수들을 저장할 때에 그냥 단순히 list에 담아서 반환하면 편하지 않을까 생각했습니다. 왜냐하면 array에 있다면 매번 메모리를 복사해주어야 하는 부담이 있기 때문입니다. 결론부터 말씀드리면 memory-based-insertion-sort 의 완승!!! 랜덤숫자 : list-based-sort : memory-based-sort ( unit: msec) 1000 : 120 : 13 2000 : 1529 : 26 3000 : 6758 : 35 즉, 1000개의.. 더보기
파이썬에서 효율적인 문자열 붙이기 Efficient String Concatenation in Python 파이썬에서 효율적인 문자열 결합 방법 (윗 글의 번역본) 랜덤 문자열을 포함하는 정해진 크기의 파일을 하나 생성하는 간단한 파이썬 프로그램을 하나 짜는데, 생각보다 성능이 나지 않는다는 이유로 이래저래 웹 서핑을 하다가 찾아낸 문서입니다. 일반적인 concatenate(+)를 하게될 경우 파이썬은 문조건 새로운 문자열을 생성하게 됩니다. 즉, 메모리 잡아먹는 귀신이라는 얘기지요, 하지만 list 를 사용하여 append하고, 주기적으로 flush하는 기법으로 접근하게 되면, 종속성도 없을 뿐더러 메모리 및 성능 문제도 부가적으로 해결할 수가 있었습니다. 가장 중요하게 여기는 부분은, '성능>속도>메모리'순으로 실험해 보았습니다. d.. 더보기