개발하면서
-
N-Queen개발하면서/Algorithm,DS,PS 2013. 2. 2. 13:56
JM북과 함께 PS의 재미를 알게되고 삼주전? 부터인가 topcoder의 재미를 알게되었습니다. 지금까지는 그냥 단순한 알고리즘 이해 수준에 머물렀다면 앞으로는 PS를 많이 경험할 생각입니다. topcoder를 재미를 알게된 3주전부터 C++를 하고 다른사람의 C++소스도 보고 있는데 C랑 비슷하면서도 많이 틀린...그런 오묘한 기분이네요. C++공부하면서 STL도 써볼겸 NQUEEN 문제를 풀어봤습니다. #include #include #include #include using namespace std; #define MAX_N 12 struct Queen { int x, y; }; set ch; int solve(int row, int size, vector& queen); int main() { i..
-
import Lucene4.1 project in eclipse개발하면서/etc 2013. 1. 30. 21:56
팀내 과장님을 통해 루씬 4.1이 나온 걸 알았습니다. 이번 기회에 미루고 미루던 루씬이 내부적으로 어떻게 구성되는지 보려고 (아는 게 없으니, 무작정 해 보자라는 마음으로) 이클립스에 import 하려고 했습니다. http://softwaregeeks.org/2012/10/30/how-to-import-lucene40-in-eclipse/ 링크처럼 진행 했는데, 제가 뭘 잘못 건드렸는지는 모르겠지만 아래와 같은 오류가 발생 했습니다. (ant ivy-bootstrap resolve 까지 진행한 상태, ant 설정은 위 url 참고.) 이 글을 위의 화면 처럼 나오는 분들께 바칩니다. ㅎㅎ 우선 New -> Java Project 에서 lucene이라고 프로젝트를 하나 만듭니다. 그 다음 lucene 폴..
-
GDB로 multiprocess 디버깅할때개발하면서/etc 2012. 10. 28. 22:21
Redis의 aof에서 fork하는 부분이 있습니다. if (server.aof_child_pid != -1) return REDIS_ERR; start = ustime(); if ((childpid = fork()) == 0) { char tmpfile[256]; /* Child */ if (server.ipfd > 0) close(server.ipfd); if (server.sofd > 0) close(server.sofd); snprintf(tmpfile,256,"temp-rewriteaof-bg-%d.aof", (int) getpid()); if (rewriteAppendOnlyFile(tmpfile) == REDIS_OK) { exitFromChild(0); } else { exitFromChi..
-
Slowlog개발하면서/코드보면서 2012. 10. 4. 00:02
Slowlog는 지정한 시간이 넘어서는 command를 기록해서 나중에 관리차원에서 볼수있게 해줍니다. 설정으로 slowlog-log-slower-than, slowlog-max-len을 설정합니다. slowlog-log-slower-than는 microseconds단위로써, 지정한 시간보다 느린 command를 기록합니다. threshold같은거죠.음수로 지정하면 slowlog를 사용하지 않고, 0으로 하면 모든 command를 기록합니다.slowlog는 list 자료구조에 저장하는데, 이 List의 최대 크기를 지정하는 설정이 slowlog-max-len 입니다. (검색하면서 알았는데, MySQL Slow Query log 란게 있었네요. 이젠 소스 분석하는만큼 직접 만들어보는것도 시간을 쏟아야겠어요..
-
Bit operation개발하면서/코드보면서 2012. 10. 4. 00:02
Redis 2.6부터 Bit operation이 지원되었습니다. BITOP [NOT | AND | OR | XOR ], BITCOUNT, SETBIT, GETBIT 입니다. Bit operation에 쓰이는 자료형은 String입니다. String이 512MB가 제한입니다.그래서 bit offset 의 최대 길이는 0 ~ (512*1024*1024*8 -1 )입니다. SETBIT, GETBIT, BITCOUNT, BITOP 순으로 진행하겠습니다. 우선 SETBIT는 "SETBIT key offset bitvalue(0 | 1)" 입니다.offset이 위에서 말한 bit 범위인지, bitvalue는 맞게 들어왔는지 검사합니다. 그 후에 해당 key가 기존 DB 존재 여부를 판단하고, 없으면 String형을..
-
Auth개발하면서/코드보면서 2012. 9. 21. 21:42
Redis의 보안관련해서 소개하겠습니다. http://redis.io/topics/security 위의 문서중에서 rename-command, masterauth/require가 어떻게 동작하는지 알아보겠습니다. 첫째로, rename-command에 대해 알아보겠습니다. 우선 어떤 기능이냐면, 일반적인 client가 특정 명령어를 못하도록 막는 기능을 합니다. SORT나 FLUSHALL, CONFIG같은 명령어는 일반 client가 실행하게 하면 안되겠죠. 사용법은 간단합니다. redis.conf에 rename-command [org command] [new command] ex ) rename-command FLUSHALL kakaka 아래는 실행 화면입니다. populateCommandTable 함수..
-
Pub / Sub개발하면서/코드보면서 2012. 9. 13. 22:16
Pub/Sub는 분산시스템에서 거의 뭐 필수적으로 사용되는 모델입니다. 간단히 말하면 그룹채팅같은거죠... Redis에서는 이 모델을 어떻게 구현했는지 알아보겠습니다. 우선 channel에 참여하는 명령어 SUBSCRIBE는 (pubsub.c:pubsubSubscribeChannel) 를 호출합니다. 엇~?? 이거 어디서 많이 봤습니다. redisClient->pubsub_channels(dict) 에 key : channel, value : NULL을 저장합니다. 그리고 watch와 마찬가지로 해당 server.pubsub_channels에 key와 client를 저장합니다. WATCH와 다른점은 client에서 ilst가 아니라 dict로 정보를 저장하고 있다는점입니다. 서버에는 channel에 접속..
-
transactions개발하면서/코드보면서 2012. 9. 8. 14:42
Redis에는 transaction기능도 있습니다. :) MULTI, EXEC, DISCARD, WATCH, UNWATCH 명령어가 있는데, transaction이 redisClient별 이루어 지는 관계로 우선 redisClient에 대해 먼저 알아보겠습니다. redisClient 구조체는 아래와 같이 생겼습니다. transaction 설명하는데 필요한 변수만 적었습니다. 우선 MULTI, EXEC명령어에 대한 source를 보겠습니다. redisClient 에는 flag라는 변수가 있는데, OR연산을 통해 아래와 같은 정보를 표시합니다. MULTI라는 명령어를 실행하면 별거 없습니다. 해당 client의 flag에 REDIS_MULTI를 표시합니다. (multi.c:multiCommand) MULTI..