기본 콘텐츠로 건너뛰기

우분투, 700MB 시디를 버리다

우분투가 12.10부터 700MB 시디에 우겨넣는 것을 포기(?)했다. 참고:  http://www.omgubuntu.co.uk/2012/09/its-official-the-ubuntu-livecd-is-dead 그도 그럴 것이, LiveCD에 700MB는 너무 빠듯했지. ㅠㅠ 달리 Ubuntu Live! 12.10 Desktop을 700MB 시디에 넣을 방법은 없다. 눈물을 머금고 DVD에 굽거나, USB 드라이브에 설치할 수밖에 없다. 단,  Network Installer버전 을 사용하면 100MB가 채 되지 않는 이미지 파일로 설치할 수 있지만, 처음부터 끝까지 모든게 안정적인 네트워크를 사용할 수 있어야 하며, 설치 시간 역시 매우 느린 편이다. * Server 버전은 아직 700MB를 넘지 않으므로, CD에 구워서 사용할 수 있다.

MP3 ID3 EUC-KR 태그를 UTF-8으로 일괄 변환하기

구글 뮤직을 쓰는데, ID3를 기본으로 UTF-8으로 인식해서 EUC-KR(실은 MS-CP949)로 인코딩한 MP3 파일은 모두 제목이 깨져서 보인다. 하나하나 장인 정신으로 바꿀 수는 없어서 이래저래 찾아보고 있는데, Linux 계열은 easytag 를 받아서 한 방에 처리할 수 있다. Windows는 MP3TAG 를 받아서 그저 불러온 뒤에 그저 태그저장만 하면 그저 UTF-8으로 변환할 수 있다. (응?)

SQLite에서 파일 크기 줄이기

간단한 개인 프로젝트를 하고 있는데, SQLite DB파일 크기가 매우 커져서 테이블에 필요 없는 레코드를 날렸다. 그런데 날리고도 파일크기가 그대로라서 여기저기 뒤져보니 VACUUM 커맨드를 사용하란다. 사용법은 매우 간단하다. 그저 "VACUUM;"이라고 날려주면 동작한다. (참조: http://sqlite.org/lang_vacuum.html ) 다만, 동작이 매우 느려서 자주 쓸만한 것은 아니다. 실제로 100MB짜리 파일을 7KB로 줄이는데 수 분이 걸렸다. 소스를 봐야겠지만, DB를 EXPORT한 뒤에, 파일을 지우고 다시 IMPORT하는게 아닐까 하는 의구심이 든다. 매번 하기 귀찮으면 "PRAGMA auto_vacuum=1;"를 하면, 새로운 빈 페이지(DELETE나 DROP TABLE 같은...)가 생길 때마다, VACUUM을 실행한다. 다만, SQLite구조 문제로 테이블을 생성하기 전에 미리 날려야하는 안타까움이 있다. (참조: http://sqlite.org/pragma.html#pragma_auto_vacuum )

시작

몇 개월간으 사투(?) 끝에 Purewell.BIZ 블로그를 열었다. 슬슬 이사를 해야겠는데, 어디서부터 해야할지 조금 막막하네. 뭐 어떠하게든 할 수 있겠지.

Template with #pragma pack bug

일반적으로 C/C++컴파일러는 메모리 퍼포먼스를 위해 구조체 멤버를 새로 순서를 정렬하거나 4바이트 단위로 패딩을 한다. 대부분의 컴파일러는 순서는 바꾸지 않고, 전체크기를 4바이트 단위로 패딩을 하는데, 일반상황에서는 크게 문제를 야기 하지 않는다. 그러나 File이나 Network에서 쓰일 고정길이 레코드 개념으로 쓰다보면 4바이트 단위 패딩은 매우 위험하다. 따라서 컴파일러마다 지시자를 두어 1바이트 단위로 패딩할 수 있게 하였다. GCC는 __attribute__((__packed__)) 지시어를 이용하지만 GCC에만 적용하는 것이고, 일반적으로 VC에서 사용하던 지시자인 #pragma pack을 사용한다. 사용법은 아래와 같다. #pragma pack(push, 1) // ... definition ... #pragma pack(pop) 또는 #pragma pack(1) // ... definition ... #pragma pack() 그런데 이러한 Data structure alignment가 Template과 결합하면 심각한 버그를 만들어낸다. * 2002년에 보고한 내용인데, 2009년에 수정한 GNU GCC팀의 패기에 박수를 보낸다. (응?) #include using namespace std; #pragma pack(1) template<typename _T> struct mystr_t { _T otype; int i; }; #pragma pack() #pragma pack(1) struct inner_t { char c[3]; }; #pragma pack() int main(int argc, char* argv[]) { cout << "sizeof(inner_t): " << sizeof(inner_t) << endl; mystr_t<inner_t> tmp; cout << "sizeof(tmp): " << si...

pinterest를 이용한 악성코드 유포 가능성

테스트용으로 가입한 pinterest로 한 외국인이 follow를 신청하였다. 궁금해서 클릭했는데, 핀보드만 184개인데, 각 핀보드마다 핀이 하나씩 밖에 없다. 혹시나 하고 핀 하나를 선택해봤다. 올~ㅋ 멋진데. 어디서 가져온거지? 다시 클릭! 두둥! 악의적인 URL이란다. 혹시나 다른 핀을 선택했더니 모두 동일한 URL로 자동으로 이동(redirect)하고 있었다. 더 조사하진 않았지만, pinterest를 통해 이러한 악성코드 유포가 가능하니, 조심하도록 하자. 또한 발견 즉시, KISA( http://kisa.or.kr )로 꼭꼭 신고하자. 원본 위치: http://purewell.egloos.com/5102091

네이트온 UC 2.0 개봉기

* 주의! 이 리뷰는 귀차니즘이 눈에 보이며, 스크롤 압박이 매우 심하니, 심약한 노약자, 임산부 등은 다른 웹서핑 하길 간곡히 요청하는 바이다. * 써놓고 보니, 겁나 오글거려... 오글오글... 우여 곡절 끝에 네이트온이 쌍둥이 네이트온톡을 제끼고 2.0 버전이 나왔다. 아직 아이폰 버전은 나오지 않았지만, 안드로이드 버전은 구글 플레이(마켓)와 Tstore를 통해 받을 수 있다. 구글 플레이:  https://play.google.com/store/apps/details?id=Uxpp.UC Tstore:  http://www.tstore.co.kr/userpoc/game/viewProduct.omp?insDpCatNo=DP03004&insProdId=0000034344&prodGrdCd=PD004401&t_top=DP000503 나는 구글빠니까 구글 플레이에서 찾아보았다. 사실 기존 버전에서 가장 큰 문제점으로 지적한 강제종료. Android의 OOM killer가 메모리가 부족하다 싶으면 백그라운드에 돌고 있던 앱들을 학살하기 시작하는데, 기존 버전이 그것 덕에 잘 죽었고, 로그인 하니라 시간을 허비하였다. 그것을 고쳤다고 하니 후딱 설치해보자. 초딩 같은 바탕화면은 가볍게 무시하자. 그나저나 네이트온 아이콘이 마작패 같은 느낌은 나뿐일까? 우어어어어어!!!!! 우리 아이... 아니, 네이트온이 달라졌어요!!!!! 아래 점이 있는 것으로 보아 다음 페이지로 슥슥 넘기면 다른 설명이 나올 것 같지만, 귀찮아서 그냥 바로 로그인 클릭클릭!!! 적당히 아이디와 암호를 입력하고 로그인 버튼을 눌러보자. @nate.com 아이디만 받는게 아니라서 도메인부분을 누르면 자주 쓰이는 포털 도메인과 직접입력을 통해 사용하던 커스텀 도메인을 입력할 수 있다. 나 역시 커스텀으로... ㅇㅇ 무선 네트워크 쓴다는거군. 당연한 멘트. 똥글뺑이가 얼마나 도나 보자...하고 스샷 찍자마자... 오호호호호 근데 이건 뭐냐? 휴대폰 인증 받으라는...