본문 바로가기

IT Tech/Programming

블로그 카테고리 썸네일 이미지로 보기(masonry?) 적용과 문제점 그러니깐 티스토리 처음 시작할 당시부터 - 10년은 된 것 같다. ㅋ - 고민했다가 방법을 몰라 포기하고,, 최근에 티스토리 블로그가 이것저것 정책적으로 변경이 된다하여 이것저것 살펴보던중 소위 핀터레스트 방식의 masonry 정렬 방법이 있어 적용해보았다. 이미 소개된 방법과 크게 다르지 않게 느리고 렌더링시 뻑뻑대는 느낌이 적잖다. 아직도 티스토리에서 썸네일 이미지를 가져오는 치환자를 지원하지 않아 범용 기법을 적용하기에는 무리가 있다.댓글의 URL 링크도 아직까지 지원하지 않는 걸 보면 뭐랄까... 설치형 플랫폼이 면죄부가 되면 안되는데 여튼 의욕이 없어보인다. 각설하고,, 그냥 널리 알려진 방법을 적용해보았으나,, 위 첨부 그림처럼 자동 정렬이 안되는 문제가 있다.. 누가 좀 속 시원하게 알려줬으..
[C언어] Linux Pthread & Signal, Itimer 간단 예제와 의문!! 비교적 정확한 주기로 특정 액션을 수행할 필요가 있어 SIGALRM을 주기적으로 발생시키는 setitimer() 를 사용해 보았습니다. 그런데 이해 안가는 부분이 있어 기록 차원에 간단한 예제를 만들어 설명해 봅니다. 아래 예제는 100ms 주기로 시간을 찍어서 이전의 시간과의 차이를 출력하는 간단한 예제입니다. 그런데 요부분... signal(SIGALRM, SIG_IGN); /* note : why??? */ SIGALRM이 발생하면 무시하라는 코드인데, 이 코드가 없으면 SIGALRM이 발생하는 시점에서 프로세스는 종료합니다. 시그널 핸들러를 등록하지 않을 때의 기본 동작입니다. 그런데 setitimer()를 호출하면 sigset 파라메터로 등록된 시그널을 사용하도록 해야 할 것 같고 thread내..
[C언어] simple hash table - test code #include #include #define MAX_HASH_BUCKET 10#define MAX_HASH_KEY MAX_HASH_BUCKET-1 #define HASH_KEY_GET(data) data % MAX_HASH_BUCKET;#define IS_SAME_NODE(a, b) ( a->data == b )/* * Return code. */typedef enum{ RET_OK = 0, RET_NOK} ret_code_t;/* * hash node */typedef struct _hash_node{ int data; struct _hash_node *next;} hash_node_t;/* * hash h..
[SVN] ## 유용한 SVN 부가 명령어들 ## ## 유용한 SVN 부가 명령어들 ## 1. svn help[PMU][ ~/project/apn/packages/wbp-2.0.0 ] (11:47:34 AM) $ svn --help usage: svn [options] [args] Subversion command-line client, version 1.6.18. Type 'svn help ' for help on a specific subcommand. Type 'svn --version' to see the program version and RA modules or 'svn --version --quiet' to see just the version number. Most subcommands take file and/or directory ar..
[C언어] c/c++ gcc 디버깅을 위한 gdb 초간단 사용팁 1. gdb 사용을 위한 core 덤프 파일을 위한 준비작업 1.1 디버깅 정보를 포함하기 위해 gcc 컴파일 옵션의 CFLAGS 에 -g 옵션을 추가한다. ex) CFLAGS += -Werror -Wlong-long -Wno-pointer-sign –g 1.2 core 파일의 크기를 설정한다. 보통은 무한대로 설정하면 편하다. ulimit –c unlimited # ulimit -a 로 확인 1.3 core 덤프파일의 확장자로 pid 값을 달게 하기 위한 추가 작업 (option) sysctl -w kernel.core_uses_pid=1 # sysctl -a 로 확인 [주의] 2, 3의 항복은 쉘의 세션마다 적용이 된다. 부팅과정의 세션과 prompt가 뜨고 root 로 로그인 후의 세션은 다르다. ..
[C언어] Fast Integer ID Pool 관리 - 할당/반환 함수 #define INT_SLICE (sizeof(unsigned int)*8) #define MAX_ID 4095 #define ID_POOL_INT_SLICE_SIZE ((MAX_OAM_ID+1)/INT_SLICE) #define RET_OK 1 #define RET_NOK 0 unsigned int id_pool_table[ID_POOL_INT_SLICE_SIZE]; int alloc_id(unsigned int *new_id) { register int ii, jj; for(ii = 0; ii < ID_POOL_INT_SLICE_SIZE; ii++) { if(~id_pool_table[ii]) { for(jj = 0; jj < INT_SLICE; jj++) { if(!(id_pool_table[ii]..
[C언어] uint2bin char *uint2bin(unsigned int i) { static char s[32 + 1] = { '0', }; int count = 32; do { s[--count] = '0' + (char) (i & 1); i = i >> 1; } while (count); return s; }
[Lex&Yacc] Yacc 명령 그리고 Debugging!! Lex는 Scanner를 그리고 Yacc는 Parser에 해당하는 부분을 담당한다. 위 그림은 Lex/Yacc를 이용한 Parser를 사용하는 방법을 이야기한다. bas.y에 필요한 패턴(문법)을 기술하고 yacc를 이용해서 해당 패턴들에 대한 action을 구현한다. bas.y의 패턴에 해당하는 각각의 Token들은 bas.l에 정의를 하며 Regex의 Meta Chracter를 사용할 수 있다. 실제 컴파일 과정은 다음과 같다. # create y.tab.h y.tab.c yacc -d bas.y # create lex.yy.c lex bas.l #compile & link gcc lex.yy.c y.tab.c -o bas ... Continued!! ^^;;; [Yacc의 yydebug 켜기] 1...
[C언어] IP 관련 매크로(Macro) Header => #include #define IPV4_INT_TO_STR(int_ipv4_ptr) inet_ntoa(*((struct in_addr *)int_ipv4_ptr)) #define IPV4_STR_TO_INT(str_ipv4_ptr) (unsigned int) inet_addr(str_ipv4_ptr) [참고] 헤더 include가 빠지면 error: dereferencing pointer to incomplete type 에러가 납니다. 계속 추가...
[regex] 정규표현식 테스트 프로그램 - The Regex Coach Target string에 테스트할 문자열을 입력한 후 위의 Regular expression에 정규표현식을 넣으면 됩니다. 마우스로 특정 표현식을 선택하면 부분적으로 Match 되는 부분을 보여줘 원하는 정규표현식을 비교적 쉽게 만들 수 있습니다. 참고로 위 예제는 Dot(.)로 분리되는 가변의 Hexa String을 입력받는 정규표현식이 필요해서 만들어서 테스트를 해보았습니다. ([a-fA-F0-9][a-fA-F0-9]\.)*[a-fA-F0-9][a-fA-F0-9] [내려 받을 수 있는 곳] http://www.weitz.de/regex-coach/ [직접 다운로드 - v0.92] 이 프로그램은 donation-ware 이고 free로 사용가능합니다.
[C언어] parse Mac Address int parse_mac_address(char *strNum, uchar_t rslt_hex[]) { int enteredNum = 0; int orgIndex = 0; int oprIndex = 0; char numChar[100]; while(orgIndex 2 ) return -1; rslt_hex[enteredNum++] = strtoul(numChar, NULL, 16); oprIndex = 0; } else { if(strNum[orgIndex] >'F' || strNum[orgIndex] < '0') return(-1); numChar[oprIndex++] = strNum[orgIndex]; } orgIndex++; } return (enteredNum); } 입력 포맷 : AA:BB:CC..
[C언어] Endian 체크 #define LITTLE_ENDIAN 1 #define BIG_ENDIAN 2 #define PDP_ENDIAN 3 #1 int get_endian() { static long int str[2] = { 0x41424344,0x0 }; /* ASCII "ABCD" */ if (strcmp("DCBA", (char *) str) == 0) return LITTLE_ENDIAN; else if (strcmp("ABCD", (char *) str) == 0) return BIG_ENDIAN; else if (strcmp("BADC", (char *) str) == 0) return PDP_ENDIAN; } #2 int endian(void) { int i = 0x00000001; if ( ((char *)&..
[C언어] BIT READ/WRITE MACRO #define READ_U8(_val, _ptr) { \ _val = *((unsigned char *) (_ptr)); \ } #define READ_S8(_val, _ptr) { \ _val = *((char *) (_ptr)); \ } #define READ_U16(_val, _ptr) { \ _val = *((unsigned short *) (_ptr)); \ } #define READ_S16(_val, _ptr) { \ _val = *((short *) (_ptr)); \ } #define READ_U24(_val, _ptr) { \ _val = *((unsigned int *) (_ptr)) >> 8; \ } #define READ_S24(_val, _ptr) { \ _val = *((int ..
[C언어] structure file dump and reading T_MMDB_EXT_VLAN_TAG_OPER_PROFILE = *MMDB_EXT_VLAN_TAG_OPER_PROFILE[MAX_MMDB_EXT_TAG_RULE]; // DUMPING #ifdef SUPPORT_GPON_EXT_VLAN_OPER sprintf(buf, "rm -rf %s", MMDB_EXT_VLAN_PROFILE_CONFIG_FILE); system(buf); fp = fopen(MMDB_EXT_VLAN_PROFILE_CONFIG_FILE, "wb"); if ( NULL != fp ) { for (ii=0; ii
[C언어] HexaDump START DUMP(%s:%d)\n", __FILE__, __LINE__);\ tmp = msg;\ for ( i=0; i