2014. 5. 19. 14:37

페이지를 제작하다 보면 테이블에 선 스타일을 주고 싶을 때가 있다.

이곳 저곳 찾아보다가 정리하게 된다.

참고하고자 할때 도움이 될듯.


1) 선의 모양(border-style)


<html>

<head>

</head>

<body>

<table style="border-style:groove" width=400>

<tr>

<td align="center">

style="border-style:groove"

</td>

</tr>

</table>

<br>


<table style="border-style:solid" width=400>

<tr>

<td align="center">

style="border-style:solid"

</td>

</tr>

</table>

<br>


<table style="border-style:double" width=400>

<tr>

<td align="center">

style="border-style:double"

</td>

</tr>

</table>

<br>



<table style="border-style:dashed" width=400>

<tr>

<td align="center">

style="border-style:dashed"

</td>

</tr>

</table>

<br>



<table style="border-style:dotted" width=400>

<tr>

<td align="center">

style="border-style:dotted"

</td>

</tr>

</table>

<br>


<table style="border-style:ridge" width=400>

<tr>

<td align="center">

style="border-style:ridge"

</td>

</tr>

</table>

<br>

<table style="border-style:inset" width=400>

<tr>

<td align="center">

style="border-style:inset"

</td>

</tr>

</table>

<br>

<table style="border-style:outset" width=400>

<tr>

<td align="center">

style="border-style:outset"

</td>

</tr>

</table>

<br>



<table style="border-style:hidden" width=400>

<tr>

<td align="center">

style="border-style:hidden"

</td>

</tr>

</table>

<br>

</body>

</html>



2) 선을 단선으로 하는 border-collapse 지정

collapse : 서로 이웃하는 테이블이나 셀의 테투리선 겹쳐서 표현

separate : 기본값으로 서로 이웃하는 테이블이나 셀의 테두리선 분리시켜 표현


<html>

<head>

<style type"text/css">

table, td{

border: 1px solid green;

}

</style>

</head>

<body>

<table style="border-style:solid;border-collapse:collapse" width=400>

<tr border="1">

<td border="1" align="center">

style="border-collapse:collapse"

</td>

</tr>


</table>

<br>


<table style="border-style:solid;border-collapse:separate" width=400>

<tr border="1">

<td border="1" align="center">

style="border-collapse:separate"

</td>

</tr>

</table>

<br>


</body>

</html>










Posted by Triany
2014. 5. 16. 11:52

* [드론 2014]⑤ 취미 드론의 세계

일부 마니아들의 취미활동이었던 무선조종(RC·Radio Control) 비행이 대중화되고 있기 때문이다. 조작이 쉬운데다 고장이 드물고 카메라까지 달려있는 멀티콥터(Mulitcopter·프로펠러 여러대가 달려 있는 형태)형 드론이 취미생활의 영역을 넓혔다.

만약 드론을 구매하더라도 아무데서나 날려서는 안 된다. 다른 비행체와 충돌할 수 있고 도심에서 추락할 경우 자칫 사람이 다치는 큰 사고로 이어질 수 있기 때문이다. 동호회 회원들은 주로 시화·과천을 포함한 전국에 총 18개소에 설치된 ‘초경량비행장치 전용공역'에서 비행한다. 이곳에서는 자유롭게 비행할 수 있다. 관제공역·통제공역·주의공역에서 비행하려는 경우엔 서울이나 지방항공청에 문의해야 한다. 드론으로 촬영하려면 국방부의 허가도 미리 받아야 한다. 주요 시설이 많은 서울 일부 지역에서는 기무사와 청와대 허가도 필요하다. 국방부 허가는 일주일정도 시간이 걸리기 때문에 미리 신청하는 것이 좋다.

드론 자격증도 있다. 대한민국항공회에서는 아마추어에게 ‘무인비행장치 조종자자격증’을 발급했다. 자격증 등급은 연습조종자·조종자·지도조종자·시험비행조종자로 나뉘는데, 지도조종자(심판·안전관리자)는 매년 1~2회 실시하는 안전교육을 받아야 한다. 현재 국토교통부에서도 국가자격증을 주는 방안을 검토 중이다. 아직까지 구체적인 교육 과정이나 교육 기관이 정해지진 않았다.
http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=001&oid=366&aid=0000193452

-> 한번 해봐도 재밋을 듯 ㅎㅎ 근데 안전 위험은 항상 조심해야 할듯 싶다.

'0.리서치' 카테고리의 다른 글

해외 정보성 블로그 ehow.com  (0) 2014.05.22
14_05_20_리서치기록  (0) 2014.05.20
14-05-14 리서치 기록  (0) 2014.05.14
14-05-07 리서치 기록  (0) 2014.05.07
신기한 사이트  (0) 2011.11.11
Posted by Triany
2014. 5. 15. 17:41

[유닉스고급프로그래밍] 4-22 디렉터리 계통구조를 재귀적으로 따라 내려가면서 파일 종류 통계를 구하는 프로그램

APUE2 소스해석


#include "apue.h"

#include <dirent.h>

#include <limits.h>


typedef int Myfunc(const char * , const struct stat * , int);


static Myfunc myfunc;

static int myftw(char *, Myfunc *);

static int dopath(Myfunc * );


static long nreg, ndir, nblk, nchr, nfifo, nslink, nsock, ntot;


int main(int argc, char *argv[])

{

    int ret;

    if (argc != 2)

        err_quit("usage : ftw <starting-pathname>");


    ret = myftw(argv[1], myfunc); /*실제 잡업을 수행*/


    ntot = nreg + ndir + nblk + nchr + nfifo + nslink + nsock;


    if ( ntot == 0 )

        ntot = 1;


    printf("regular files = %7ld, %5.2f %%\n", nreg, nreg*100.0/ntot);

    printf("directories = %7ld, %5.2f %%\n", ndir, ndir*100.0/ntot);

    printf("block special = %7ld, %5.2f %%\n", nblk, nblk*100.0/ntot);

    printf("char special = %7ld, %5.2f %%\n", nchr, nchr*100.0/ntot);

    printf("FIFOS files = %7ld, %5.2f %%\n", nfifo, nfifo*100.0/ntot);

    printf("symbolic links = %7ld, %5.2f %%\n", nslink, nslink*100.0/ntot);

    printf("sockets = %7ld, %5.2f %%\n", nsock, nsock*100.0/ntot);


    exit(ret);


}


#define FTW_F 1

#define FTW_D 2

#define FTW_DNR 3

#define FTW_NS 4


static char * fullpath; /* 각파일의 전체 경로이름을 담음*/


//여기서 수행

static int myftw(char * pathname, Myfunc *func) /*func()의 반환값을 그대로 돌려줌 */

{

    int len;

    fullpath = path_alloc(&len); /*PATH_MAX+1*/ //apue에서 제공해주는 함수. 운영체제 환경에 따라 사용할 수 있는 공간의 최대 크기를 리턴해 주는 함수인듯.


    strncpy(fullpath, pathname, len);

    printf("fullpath: %s\n", fullpath);

    fullpath[len-1] = 0;


    return(dopath(func));

}



/* fullpath에서부터 계통구조를 따라간다

   fullpath가 디렉터리가 아니면 lstat()으로 정보를 얻어서

   func()를 호출하고 반환. 디렉터리면 그 디렉터리의 각 이름마다 이 함수를 재귀호출

*/

static int dopath(Myfunc * func)

{

    struct stat statbuf;

    struct dirent *dirp;

    DIR *dp;

    int ret;

    char *ptr;


    if ( lstat(fullpath, &statbuf) < 0 )

        return(func(fullpath, &statbuf, FTW_NS));
    if ( S_ISDIR(statbuf.st_mode) == 0 )
        return(func(fullpath, &statbuf, FTW_F));


    /*
     디렉터리면 우선 그 디렉터리에 대해 func()를 호출하고
     그 디렉터리의 각 파일이름을 처리한다.
     */
    if (( ret = func(fullpath, &statbuf, FTW_D)) != 0 )
        return(ret);

    ptr = fullpath + strlen(fullpath);  /* fullpath의 끝을 가리킨다*/

    *ptr++ = '/';
    *ptr = 0;

    if (( dp = opendir(fullpath)) == NULL ) /* 디렉터리를 읽을 수 없음 */
        return(func(fullpath, &statbuf, FTW_DNR));

    while (( dirp = readdir(dp)) != NULL ) {
        if ( strcmp(dirp->d_name, ".") == 0 || strcmp(dirp->d_name, "..") == 0 )
            continue;
        strcpy(ptr, dirp->d_name); /*슬러시 다음에 이름을 추가 */

        if ( ( ret = dopath(func)) != 0 )
            break;

    }
    ptr[-1] = 0; /*슬래시 이후의 모든 것을 삭제 */

    if ( closedir(dp) < 0 )
        err_ret("can't close directory %s", fullpath);

    return(ret);
}

static int myfunc(const char * pathname, const struct stat * statptr, int type)
{
    printf("myfunc pathname : %s\n", pathname);
    switch(type) {
        case FTW_F:
            switch(statptr->st_mode & S_IFMT) //S_IFMT : bit mask for the file type bit fields! 00170000
            {
                case S_IFREG :  nreg++;     break;
                case S_IFBLK :  nblk++;     break;
                case S_IFCHR :  nchr++;     break;
                case S_IFIFO :  nfifo++;    break;
                case S_IFLNK :  nslink++;   break;
                case S_IFSOCK:  nsock++;    break;
                case S_IFDIR:
                    err_dump("for S_IFDIR for %s", pathname);
            }
            break;
        case FTW_D:
            ndir++;
            break;
        case FTW_DNR:
            err_ret("can't read directory %s", pathname);
            break;
        case FTW_NS:
            err_ret("stat error for %s", pathname);
            break;
        default:
            err_dump("unknown type %d for pathname %s", type, pathname);
    }
    return (0);
}

결과

./4-22-2 test

fullpath: test

myfunc pathname : test

myfunc pathname : test/Makefile

myfunc pathname : test/a.h

myfunc pathname : test/a.c

myfunc pathname : test/b.c

myfunc pathname : test/a.o

myfunc pathname : test/test

myfunc pathname : test/abc

myfunc pathname : test/abc/def

regular files =       6, 66.67 %

directories =       3, 33.33 %

block special =       0,  0.00 %

char special =       0,  0.00 %

FIFOS files =       0,  0.00 %

symbolic links =       0,  0.00 %

sockets =       0,  0.00 %



여기서 궁금했던 점은 

ret = dopath(func)에서 fullpath를 넘기지 않는데 어떻게 갱신이 될까? 하는 점이었다.


하지만 이 내용을 보면 알 수 있다.


#전역변수로 fullpath 선언

static char * fullpath; /* 각파일의 전체 경로이름을 담음*/


탐색할 디렉토리가 

다음의 구조와 같다고 가정하면

test / abd

     /  de


1. ptr = fullpath + strlen(fullpath);  /* fullpath의 끝을 가리킨다*/

2. *ptr++ = '/';
    *ptr = 0;

3.  strcpy(ptr, dirp->d_name); /*슬러시 다음에 이름을 추가 */


4. while문 돌고 나서 strcpy(ptr, dirp->d_name); /*슬러시 다음에 이름을 추가 */




이런식이랄까?

ptr 변수의 위치는 while문을 도는 내내 고정되 있어서 같은 디렉터리 내의 파일 이름을

덮어쓰는 형식으로 구현되어 있었다.

fullpath는 전역변수이기에 dopath할때 func 함수포인터만 넘겨도 되었던 것이고!


신기하기도 했던 내용이라 기록으로 남겨둔다.

Posted by Triany
2014. 5. 14. 14:53

* 구글, 초미니 카메라·센서 탑재 콘택트렌즈 특허출원
http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=001&aid=0006863868


* 절대 잃어버릴 수 없는 선글라스?
이젠 선글라스도 스마트폰과 연동한다. 추쿠미(Tzukuri)는 아이폰과 페어링을 할 수 있는 선글라스다.
아이폰이 지원하는 근거리 무선 통신 방식인 아이비콘(iBeacon)을 이용해 선글라스와 아이폰을 페어링해준다.
http://techholic.co.kr/archives/16428


* 내비 필요하세요?’ 길 찾아주는 스마트 신발
MIT공대가 개발 중인 슈퍼슈즈(SuperShoes)는 신발만 신으면 길을 헤맬 필요가 없는 제품.
이 제품 속에는 신발 안쪽에 실리콘 재질로 만든 깔창 장치가 있다. 이 장치는 스마트폰 전용 앱과 연동, 현재 위치에서 목적지까지 안내를 해준다.
알려주는 방법은 진동을 이용한다. 예를 들어서 걷고 있는 도중 오른쪽 깔창 부위가 진동하면 우회전하라는 신호다.
http://techholic.co.kr/archives/16409


* 트위터 손잡은 아마존 ‘해시태그만 넣으면’
아마존이 트윗에 멘션만으로 아마존 장바구니에 상품을 자동으로 추가할 수 있는 해시태그 ‘#AmazonCart’를 발표했다.
산책을 하거나 유모차를 끌다가 트위터에 뜬 홍보 트윗을 보고 마음에 들면 장바구니에 간단하게 추가할 수 있다.
http://techholic.co.kr/archives/16545


*허공에 입체 그림 그리는 펜 태블릿?
전용 안경을 쓴 채 특수 펜으로 패드에 그림을 그리면 마치 눈앞 공간에 직접 스케치를 하는 것처럼 입체 이미지를 공간에 그릴 수 있게 된다.
http://techholic.co.kr/archives/15336


* 드론이 연주하는 음악
http://techholic.co.kr/archives/16014

'0.리서치' 카테고리의 다른 글

해외 정보성 블로그 ehow.com  (0) 2014.05.22
14_05_20_리서치기록  (0) 2014.05.20
14-05-16 리서치 기록  (0) 2014.05.16
14-05-07 리서치 기록  (0) 2014.05.07
신기한 사이트  (0) 2011.11.11
Posted by Triany
2014. 5. 9. 18:34

#include <string.h> // C++ 에서는 <cstring>

void * memset ( void * ptr, int value, size_t num );

 


메모리 블록을 채운다.
ptr 로 시작하는 메모리 주소 부터 num 개의 바이트를 value 값으로 채운다. 이 때, value 는 unsigned char 로 형변환 된다. 

 

ex)

int * arrs = (int *)malloc(sizeof(int) * 7 )

memset(arrs, 0, sizeof(int) * 7)

 

arrs배열에 동적할당하고, 0으로 초기화 한다!

Posted by Triany
2014. 5. 7. 14:59
1. 구글 조립형 스마트폰 '아라'..부품 사서 조립하고 5만원이면 '땡'

http://media.daum.net/economic/industry/newsview?newsid=20140507091104143

=> 구글 조립형 스마트폰 현실로 도래?  . 내년부터 소비자들은 스마트폰을 마음대로 만들 수 있다.

 

2. 사용자의 의도를 파악하는 검색엔진 => 족발 맛집 찾는데 왜 '남친 족발' 검색?..빅데이터 시대 정보찾기, 검색엔진 두개 이상 써야 효과적

http://media.daum.net/digital/others/newsview?newsid=20140507033608645

 

3. 손가락 글자로 명령을 실행하는 신개념 '스마트 링' 탄생 / 반지 모양의 웨어러블 디바이스(Nod)

http://bizion.mk.co.kr/bbs/board.php?bo_table=product&wr_id=1073

http://mutantcell.blog.me/209191142

=>RING'의 기능을 살펴보면 더욱더 놀라움을 자아낸다. 아래 동영상과 사진에서 볼 수 있듯이 손가락으로 알파벳 글자를 정확하게 입력할 수 있을 뿐만 아니라 간단한 기호를 손가락으로 그려 명령을 수행할 수 있다.

 
이를 통해 사용자는 TV, 오디오와 같은 전자제품들을 리모컨 없이 원하는 대로 컨트롤할 수 있고, 스마트폰과 태블릿과 연결하여 메모와 프리젠테이션까지 할 수 있다.
 
또한 스마트폰 내의 전자결제 시스템과 연결되어 결제도 할 수 있고, 스마트폰의 통화, 메시지, SNS 기능의 활성화 시 진동과 LED 불빛으로 알람을 울려주기도 한다.

=> 반지 모양인 노드와 다른 기기 간에 블루투스로 연결을 하고 사용자는 손가락에 이 노드를 끼운 상태에서 손으로 여러가지 모션을 취해 기기를 제어할 수 있습니다. 스마트 디바이스는 물론이고 실내 온도 조절, 조명 온오프, 문여닫기, 게임 등 다양한 곳에 응용될 수 있다.

'0.리서치' 카테고리의 다른 글

해외 정보성 블로그 ehow.com  (0) 2014.05.22
14_05_20_리서치기록  (0) 2014.05.20
14-05-16 리서치 기록  (0) 2014.05.16
14-05-14 리서치 기록  (0) 2014.05.14
신기한 사이트  (0) 2011.11.11
Posted by Triany
2013. 12. 3. 22:32

 

- $?   리턴값 받아오는 변수

< 배열 >

1) 배열선언

declare -a 배열이름

declare -a arr

2) 배열 내용

echo ${arr[0]}

3) 배열크기

echo ${#arr[*]}

4) 배열 모든 내용 출력

echo ${arr[*]}

 

 

<정수형 산술연산>

1)정수형변수선언

declare -i num

 

 

<문자열 자르기(cut)명령어>

1) "file"의 2번째부터 5번째 문자만 출력한다.

cat "file" | cut -c 2-5

 

2)"file"의 3번째 필드를 출력한다. 구분자는 : 으로 한다 (기본 구분자는 tab이다)

cat "file" | cut -f 3 -d ":"

 

 

 

 

Posted by Triany
2013. 7. 21. 22:05

$gcc -o filename source_1.c [source_2.c source_3.c.....]

> gcc -o hello hello.c

(-o 실행filename)

 

(-c 목적코드 생성)

>gcc -c one.c

(one.o)

 

Makefile의 구조

target_list : dependency_list

command_list   //command_list는 반드시 Tab을 사용하여 들여쓰기를 해야 한다.

 

 

hello: hello.c

gcc -o test test.c

 

Posted by Triany
2013. 5. 7. 12:21

 

 

chkdsk h:/f/r

 

만약 외장하드가 갑자기 인식이 안되거나 / 포맷하라고 하면 사용하면 좋은듯!

시간이 많이 걸리니(거의 500G가량되서 그런가) 충분히 기다릴 수 있는 시간을 확보하고 수행할것 -

노트북이 절전모드로 넘어가면서 chkdsk를 중단한듯...

Posted by Triany
2013. 4. 29. 16:48

* 참조에 의한 호출(call-by-reference)

   => 변수의 복사본이 함수로 전달되는 것이 아닌 원본이 직접 전달되는 방식!

   - 포인터(pointer)를 이용하는 방법

   - 레퍼런스(reference)를 이용하는 방법

 

 

1. 레퍼런스란 ?

 C++에서는 변수에 별명을 붙여서 접근할 수 있는데 => 이것을 레퍼런스(reference)라고 한다!

  int &ref = var;

  //레퍼런스 ref은 변수 var의 별명(alias)

 

Posted by Triany