2016년 11월 25일 금요일

sorting big file and searching without index

용량이 큰 텍스트 파일을 소팅하고 인덱스 없이 특정 키를 찾는 것을 해봤다. 결과는 꽤 괜찮아서 쓸만했다.  내가 해본 것은 수십기가 파일이었는데 그보다 더 큰 파일도 잘 될것 같다. 방법은 다음과 같다.
1. 하둡으로 큰 파일을 소팅한다.
2. sgrep으로 검색. binary search이므로 매우 빠르다.

소팅은 몇십, 몇백기가라도 하둡으로 하면 1분 정도 내에 할 수 있다. 싱글 머신에서 sort 명령으로 시도하면 훨씬 오래 걸린다. 메모리가 충분하지 못하면 디스크 스왑이 많아지므로 더 오래 걸린다. 하둡으로 소팅할 때 파티셔너를 직접 만들어줘야 한다. 키 값에 따라 리듀서가 구분되도록 하는 것이다.

sgrep은 매우 빨라서 수십기가 파일에서도 0.001초 내에 금방 검색 가능하다.

자세한 내용은 나중에 더 정리해봐야겠다.

2016년 11월 15일 화요일

scala spark

요즘 오랜만에 신나게 열정적으로 개발을 하고 있다. scala의 매력에 빠졌다. 앞으로 주력 언어를 perl 대신 scala로 사용하고자 한다. 아직 scala가 덜 익숙해서 좀 어려운 부분이 있지만 참 매력적인 언어이다. perl 못지 않게 간결하게 쓸 수도 있고, 매우 유연해서(flexible) 한가지 작업을 하기 위한 다양한 코드 표현이 가능하다. 그리고 procedural가 아닌 functional 언어라서 데이터 중심의 패러다임과 병렬성을 적용하기 좋다.

이제 웬만한 map reduce를 scala, spark으로 작성할 수 있게 됐다. map reduce로 6개 job을 6분 동안 실행시켰던 것을 scala, spark 로 만들어서 실행해보니 2분이 걸렸다.

아직 불편한 것 중 하나는 디버깅, 테스트가 쉽지 않다는 것이다. perl로 할 때는 소스 코드 조금 고치고 바로 그냥 다시 돌려보면서 할 수 있는데, scala, spark으로 할 때는 소스 코드를 고치면 컴파일을 다시해야 하고(sbt 컴파일 하는데 수초 정도 시간 걸림), 일부분만 실행해보는 것이 어려워서 작은 테스트 데이터로 해봐야하고, 실행 중간 값을 출력해보기 어렵다. 그리고 결과 데이터를 stdout으로 간단히 출력해보는 것도 가능할 것 같은데 아직 해보지는 않았다. 좀 더 빠르고 쉽게 간단히 디버깅, 테스트 하면 좋겠다. sbt를 데몬 형태로 띄워두고 빠른 컴파일/인터프리터 방식이 있다는데..

2016년 11월 9일 수요일

airdrop 으로 아이폰 사진 원본 전송

airdrop 으로 아이폰 사진을 맥북으로 전송해보았다. 처음 연결할 때 양쪽 모두 한번씩 사용자 아이콘이 뜨는 것을 확인하고 클릭해주어야 한다. 그 다음부터는 받는 쪽 확인은 필요없이 그냥 보내기만 하면 받는쪽(맥북)의 '다운로드' 디렉토리에 바로 저장된다.

원본 파일이 정확하게 복사되는 것까지 확인했다. 아이폰에서 HashPhotos 앱으로 사진 파일 크기를 바이트 단위까지 확인하였고, 맥북에 전송된 파일 크기 역시 정확히 일치하였고, GPS를 포함한 모든 메타데이터도 포함되어 있었고, flickr에 저장했던 파일을 다운 받아서 diff 명령으로 비교해봐도 정확히 일치했다. 즉, airdrop으로 사진 파일 원본이 정확히 전송되는 것은 확실하다.

참고로, 맥북의 '사진' 앱으로 열어서 finder로 끌어다가 복사하면 원본 그대로 복사가 안되고 약간 크기가 작아지거나 메타 데이터가 빠지는 것 같다.

airdrop 전송시 약간 문제점은 있다. 사진 하나씩 전송할 때는 파일이름(IMG_XXXX.JPG)까지 정확히 전송되는데, '특별한 순간' 탭(사진앱 하단에서 첫번째 탭)에서 사진을 2개 이상 골라서 전송하면 파일은 정확히 전송되지만, 파일 이름이 FullSizeRender.jpg, FullSizeRender 2.jpg 와 같은 형태로 변경된다. 그런데 '앨범'(사진앱 하단에서 4번째 탭) -> '모든 사진' 내에서 2개 이상 골라서 전송했을 때는 파일 이름까지 모두 정확히 전송된다. 그런데 '모든 사진' 앨범은 백업, 복원에 의해 종종 순서가 뒤섞이는 문제가 있기 때문에 날짜 단위 벌크 선택이 어려운 문제가 있다. 그래도 대충 많은 사진을 전송해서 '생성일' 기준으로 정렬해서 골라내면 될 것 같다.

해보다가 발견한 문제가 있는데, 아이폰 iOS 버전 10 이상일 때, 맥북 사진앱에서 '가져오기'를 하려면 맥북도 macOS Sierra 이상이어야 한다. El Capitan이면 사진앱에서 '가져오기'를 선택했을 때 아무 것도 안보인다.

2016년 11월 3일 목요일

맥북 프로의 force touch

최근 맥북 프로를 쓰기 시작했다. 1-2주 써봤다. force touch를 처음 써보는데 아직 별로 유용한건지 모르겠다. force touch를 쓸 일이 별로 없었다. 손가락과 팔에 힘이 더 드는데, 어떤 경우에 유용한지 잘 모르겠다. 연속적인 힘의 강도를 인식하는 것은 아니고, 카메라 반셔터 같은 느낌이다. 아, 유용한 경우가 한가지 있다. 세게 꾹 누르면 커서에 있는 단어를 사전에서 찾아 뜻을 보여주는 창이 표시된다.(그림1) 그런데 꾹 누를 때 꽤 힘을 많이 줘야 눌린다.

그림1:

2016년 11월 1일 화요일

맥 시에라에서 Microsoft Office

El Capitan까지도 오피스가 잘 되었는데(가끔 안될때도 있었지만), 시에라 업데이트한 후로는 Microsoft Office가 전혀 되지 않는다. 오피스는 최신 버전인데 Excel, Powerpoint, Word 모두 실행하면 오류 메시지 창만 나온다. 그래서 요즘은 Numbers, Keynote, Pages를 쓴다.