728x90
반응형

우리 1호의 몇날 며칠 계속 카봇 시계를 사달라는...성화를 못이겨.. 3군대를 돌아다녀서 구한 카봇시계

 

인터넷 최저가보다 싸게 산것 같아서 맘에 들었다.

 

말보단.사진!

 

이마트에 갔을 때는 시계만 없고 큐브만 있었는데 왜 큐브만 모아서 또 따로 파는지 알겠더라....

꽤 나름의 퀄리티가 괜찮았다.

그리고 무엇보다. 우리 1호가 너무너무 좋아했다 ㅎㅎㅎㅎ

가격도 퀄리티도 나름 만족!!

 

 

간단한 동작 영상.

 

나의 총 평점 (별다섯개만점) : ★★☆

728x90

'나의 일상생활 > 장난감' 카테고리의 다른 글

[어린이 장난감] 뽀로로 심쿵 선물뽑기  (0) 2021.01.03
728x90
반응형

새해 기념으로 우리 공주님들에게 장난감 하나를 사주기로 하였다.

동네에 장난감을 리퍼제품 혹은 좀 싸게 판다고 하여 다녀왔다.

 

이것저것 둘러보는 길에 뽑기 장난감이 눈에 보였다.

고민과 고민끝에 사는걸로. 근데 리퍼제품이라서 내용물이 반밖에 없었는데 뭐 그래도 사용은 해볼만 할듯..

 

리퍼제품이라서 가격은 38000원....

 

제품을 뜯어보면 리퍼 제품이라서 재포장한 티가 난다. 

보시다시피 내용물은 반만 들어 있다.

그리고 전원은 USB로 가능하고 본인은 그냥 집에 있는 외장배터리를 활용 하였다.

 

건전지가 AA 일줄 알았는데.... 아니였네.... 건전지는 다음에... 그래서 유에스비를 활용하여 동작 테스트를 시켰다.

 

마무리로 해당 부분 연결 제거 해준다.

그다음 해당 구멍으로 이것저거서 뽑기 할 제품 넣어주면된다.

 

 

간단한 동작 동영상.

 

 

개인적인 평가 : 별다섯개 만점에.. ★★☆

 

일단 장난감이긴 하지만 잘 잡히지도 않고 집게가 너무 별로임.... 처음 호기심으로 몇번 가지고 놀겠지만 그 후에는 가지고 놀지 않을 것으로 본다. 리퍼 제품인데도 불구 하고 가격은 4만원가까이 되는데 그돈을 주고 사야 하나 싶다.

 

728x90

'나의 일상생활 > 장난감' 카테고리의 다른 글

[어린이 장난감] 헬로카봇 큐브시계  (0) 2021.01.03
728x90
반응형

퇴사 신청을 하고 남은 기간은 그동안 사용하지 못한 휴가를 사용하였다.

그러하여 최종 12월30일 퇴사를 하는 것으로 결정이 났다.

뭔가.. 그동안 휴가를 써서 그런가 계속 백수 인것만 같다... 서류상으로는 이제 백수이지만..ㅎㅎ

코로나로 인하여 미국쪽 문제 및 국내 시장이 많이 안좋아서 급여가 기약없이 삭감이 되었다. 30%.....

몇년째 연봉은 동결인데.. 도저히 힘들 것 같아 3달정도 삭감 연봉을 받고 최종 퇴사를 하려고 한다.

경영악화로 인하여 실업급여 신청을 일단 하기로 하였다.

1월4일 월요일에 실업급여 신청을 하러 가기로 하였다. 

오랜만에 고용센터 방문이라서 어찌 하는지 모르겠네.. 일단 고용센터부터..방문해보고 기록해보기로 한다.

 

728x90
728x90
반응형

mysql 덤프 및 복원 하는 방법.

 

오늘 mysql 덤프와 그에 관련된 복원 명령어를 실행 해볼려고 합니다.

 

그냥 일상적으로 쓰는 방법만 게시 하겠습니다..

 

덤프 뜨기!

 

mysqldump -u[계정명] -p[패스워드] [DB명] [테이블명] > [테이블명.sql]

이런형태로 하면됩니다.

 

그러면 예제를 ~

예) mysqldump -utest -ptest d_test test > test.sql

 

그러면 복원을 할경우는?

 

mysql -utest -ptest d_test < test.sql

하면 됩니다~!~!

 간단하게! 적어봤습니다!

728x90
728x90
반응형

대학생때 이후로는 C++를 접할 일이 없었습니다.

그래서 공부를 해볼 겸 간단한 로또 프로그램을 만들어 보았습니다.

목표는. 간단한 class 및 STL를 사용 하는 거고 추 후에 서버 프로그램을 c++로 제작 해볼 예정입니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#include <iostream>
#include <vector>
#include <random>
 
#define LOTTO_MAX 7
 
using namespace std;
 
class Lottery {
private:
    int lotto_num;
    int lotto_idx;
    int* check_list;
    vector<int> user_vec;
    vector<int> machine_vec;
 
public:
    Lottery() {
        lotto_num = 0;
        lotto_idx = 0;
 
        check_list = new int[LOTTO_MAX];
        for (int i = 0; i < LOTTO_MAX; i++) {
            check_list[i] = 0;
        }
 
        user_vec.reserve(LOTTO_MAX - 1);
        machine_vec.reserve(LOTTO_MAX);
    }
 
    bool duplicate_check(int num, vector<int>& user_vec);
    void printLottoNumber(vector<int>& user_vec);
    void Lotto_Input(vector<int>& user_vec);
    void UserInterFace_Init();
 
    //로또 번호 생성, 본번호 + 보너스 번호
    void CreateLotteryNumber(/*vector<int>& machine*/);
    int BonusLotteryNumber(vector<int>& machine);
 
    //입력한 번호와 생성된 번호를 비교하여 순위를 매긴다.
    int ret_ranking(vector<int>& machine, vector<int>& user_vec);
 
    ~Lottery() {
        if (check_list)
            delete[] check_list;
    }
};
 
int Lottery::ret_ranking(vector<int>& machine, vector<int>& user_vec) {
    int rank = 0;
    int match = 0;
    int bonus = 0;
 
    for (int i = 0; i < machine.size(); i++) {
        for (int j = 0; j < user_vec.size(); j++) {
            if (machine[i] == user_vec[j]) {
                if (i == (machine.size() - 1)) {
                    bonus = 1;
                }
                match++;            
            }                
        }        
    }
 
    cout << "math = " << match << endl;
    cout << "bonus = " << bonus << endl;
 
    switch (match) {
    case 3: rank = 5break;
    case 4: rank = 4break;
    case 5: rank = 3break;
    case 6
        if (bonus == 0)    rank = 1;         
        else rank = 2
        
        break;
    default: rank = 0break;
    }
 
    return rank;
}
 
int Lottery::BonusLotteryNumber(vector<int>& vec)
{
    int rand_number;
    int chk_flg = 0;
 
    random_device rand;        //시드 값을 얻기 위한 random_device 생성.
    mt19937_64 gen(rand());    //random_device를 통해 난수 생성 엔진을 초기화.    (메르센 트위스터 알고리즘 사용)
 
    uniform_int_distribution<int> dis(145); //1 ~ 45까지 균등하게 나타나는 난수열을 생성하기 위해 균등 분포 정의 
 
    rand_number = dis(gen);
 
    //새롭게 발생된 보너스번호를 생성된 1등 번호와 충첩되는지 체크 한다.
    //1등번호와 충첩되면 다시 보너스 번호를 생성 한다.
    for (int i = 0; i < vec.size(); i++) {
        if (rand_number == vec[i])
            BonusLotteryNumber(vec);    
    }
 
    return rand_number; // 생성된 보너스번호 리턴.
}
 
void Lottery::CreateLotteryNumber(/*vector<int>& vec*/)
{
    //랜덤으로 1 ~ 45의 중복되지 않는 숫자를 생성 한다.
    //보너스 번호는 별도로 생성. 1 ~ 45에서 중복되지 않는 값으로 생성 한다. 
 
    int bonus_number = 0;
    int create_lottery_num = 0;
    random_device rand;        //시드 값을 얻기 위한 random_device 생성.
    mt19937_64 gen(rand());    //random_device를 통해 난수 생성 엔진을 초기화.    (메르센 트위스터 알고리즘 사용)
    
    uniform_int_distribution<int> dis(145); //1 ~ 45까지 균등하게 나타나는 난수열을 생성하기 위해 균등 분포 정의 
    
    for (int i = 0; i < LOTTO_MAX - 1; i++) {
        create_lottery_num = dis(gen);
        
        //중복 검사.
        for (int j = 0; j < machine_vec.size(); j++) {
            if (create_lottery_num == machine_vec[j])
                CreateLotteryNumber();
        }
        machine_vec.push_back(create_lottery_num);
    }
 
    bonus_number = BonusLotteryNumber(machine_vec);
 
    machine_vec.push_back(bonus_number);
 
    cout << "생성된 1등번호 + 보너스번호 : ";
    for (int i = 0; i < machine_vec.size(); i++) {
        cout << "[" << machine_vec[i] << "] ";
    }
 
    cout << endl;
 
    int rank;
    rank = ret_ranking(machine_vec, user_vec);
 
    cout << "당신은 " << rank << "입니다." << endl;
}
 
bool check_number(int num)
{
    if (num > 45 || num < 1) {
        cout << "잘못된 숫자를 입력 하셨습니다. 다시 입력 하세요." << endl;
 
        return false;
    }
    else
        return true;
}
 
//중복 체크. 처음에 체크되는 부분은 true 이후 중복이 발견되면 fail
bool Lottery::duplicate_check(int input, vector<int>& vec)
{
    int check_cnt = 0;
 
    cout << "input : " << input << endl;
    cout << "vector size : " << vec.size() << endl;
 
    for (int i = 0; i < vec.size(); i++){
        cout << "vec : " << vec[i] << endl;
        if (input == vec[i]) {            
            cout << "데이터 중복." << endl;
            return false;            
        }
    }
 
    return true;
}
 
void Lottery::Lotto_Input(vector<int>& vec)
{
    cout << "번호를 입력하세요." << endl;    
 
    while (1) {        
        cout << lotto_idx +1 << "번째 번호 입력 : ";
        cin >> lotto_num;
 
        if (check_number(lotto_num)){
            if (duplicate_check(lotto_num, vec)) {
                check_list[lotto_idx] = 1;
                vec.push_back(lotto_num);
                lotto_idx++;
            }
        }
        else Lotto_Input(vec);        
        
        if (lotto_idx > 5break;
    }
}
 
void Lottery::UserInterFace_Init()
{
    cout << "안녕하세요. 로또 테스트 프로그램에 오신 것을 환영 합니다." << endl;
    cout << "총 6개의 번호를 입력하세요 1 ~ 45 입니다." << endl;
    cout << "총 6개를 맞추면 1등입니다." << endl;
    cout << "총 5개를 맞추고 보너스번호 1개를 맞추면 2등입니다. ( 억울 하겠네요... ㅎㅎ ) " << endl;
    cout << "총 5개를 맞추면 3등 입니다. " << endl;
    cout << "총 4개를 맞추면 4등 입니다. " << endl;
    cout << "총 3개를 맞추면 3등 입니다. " << endl;
    cout << endl;
 
    Lotto_Input(user_vec);
 
    printLottoNumber(user_vec);
 
    CreateLotteryNumber();
}
 
void Lottery::printLottoNumber(vector<int>& vec)
{
    cout << "Lotto Number :";
 
    for (int i = 0; i < vec.size(); i++) {
        cout <<  "[" << vec[i] << "] ";
    }    
    
    cout << endl;
}
 
int main(int agrc, char** argv)
{
    Lottery lot;
 
    lot.UserInterFace_Init();
    
    return 0;
}
cs
728x90
728x90
반응형

그동안 베란다 구석에 보관중인 볼풀을 정리 하기로 했다.

오랜만에 보니 일단 보관 중이던 봉지에 곰팡이 및 상태가 매우 안좋았다.

그렇다고 버릴 수도 없고..... 

청소를 해보는데 일일이 손으로 하기에는 너무 많아서 세탁기를 사용 해보기로 ...하였음..

 

이렇게 두 봉다리가 있다..엄청 많다는.... 

 

너무 많아서 일단 전부를 세탁 할 수는 없고 일부만 세탁 하기로 하였다.

 

먼저 세탁기에 넣고. 구연산등을 넣고 세탁기를 동작 시켰다. 일단 세탁기능은 제외하고 헹굼하고 탈수만 하는걸루.

 

스타트~!

 

 

헹굼과 탈수가 완료 되고, 살짝 물기가 있어서 간단하게 건조기를 돌리기로 하였다. 약하게~ 망가질수 있으니!!

 

근데 이게 다 끝나고 고무 냄새가 나서 몇시간정도는 열어두니 냄새는 사라졌다.

 

 

새로운 봉지에다가 보관~

상태는 이상이 없고, 다음에 아가들 놀때 볼풀 풀어서 놀 생각임돠~!

728x90
728x90
반응형

안녕하세요.

 

리눅스 환경에서의 OPENSSL 크로스 컴파일 방법 입니다.

필요에 따라서 ./configure --help하여 필요한 옵션만 추가 해서 하면됩니다.

리눅스 환경은 ubuntu 14.04에서 하였고 동작은 임베디드 환경에서 동작 테스트 완료 하였습니다.

arm기반의 브로드컴칩에서 동작됩니다.

 

* 소스컴파일

./Configure linux-generic32 shared -DL_ENDIAN --prefix=/home/shlee/openssl-arm --openssldir=/home/shlee/2_nanogrid/openssl

make;make install 

 

make install을 하면 configure의 prefix로 지정된 경로로 파일을 복사 합니다.

 

또 다른 방법.

  • toolchain source해줄것.
  • configure
    ./Configure linux-generic32 shared -DL_ENDIAN --prefix=/home/shlee/xml_rpc/openssl-arm --openssldir=/home/shlee/xml_rpc/openssl
  • make 
    make install CC=arm-linux-gcc RANLIB=arm-linux-gnueabihf-gcc-ranlib LD=arm-linux-gnueabihf-ld MAKEDEPPROG=arm-linux-gnueabihf-gcc PROCESSOR=ARM
  • 참고 사이트
  • 빌드 완료 된 openssl 파일을 타겟에서 실행 하면
    symbol lookup error: ./openssl: undefined symbol: i2d_DHxparams
    위에 같은 에러가 발생 하는 경우 컴파일 하면서 생성 된 lib파일을 타겟의 libs/lib 에 복사 해 주면된다.
  • ps) libssl이나 lib crypto는 현재 타겟 이미지를 만들면서 만들어지는 라이브러리 인데 openssl 컴파일 하면서 생성된 라이브러리로 교체 해주었을 때 타겟 이미지가 정상 적인 동작을 하는지 확인이 필요하다.
  • openssl.cnf path 설정.
  • openssl 실행 후 WARNING: can't open config file: /home/shlee/xml_rpc/openssl/openssl.cnf 발생 할 경우
    export OPENSSL_CONF=/mnt/hd/openssl.cnf
    위 처럼 설정 해주면 해당 warning메세지 발생 안함. libpath 파일에 등록 하고 소싱 해주면 됨.
  • 최종 실행 방법
    1. openssl
    2. version
    이후에 본인이 설정한 버전이 맞는지 확인 하면 일단 설치는 완료.

 

 

728x90
728x90
반응형

1. 포트 추가

 )vi /etc/sysconfig/iptables

 적용 ) service iptables restart or start

 

2. 네트워크 설정

 ) vi /etc/

 

telnet 사용법

 

리눅스 각종명령어

 

/etc/hosts 처럼 윈도우 xp 에서는 windows/system32/drivers/etc/hosts 를 추가할수있다.

 

df -> 용량 체크

df -h

 

vim에서 하이라이트기능

on:set hlsearch

off:nohl

 

 

 

tree

 

======== svn ========

svn st

svn st -h | less

 

======== 찾기 명령어들 ========

find .(현재경로) -name (찾고자하는 이름) -print

 -ls

 

find /절대경로 -name (찾고자하는 이름)

 

grep -i 찾는이름 *        대소문자 구분없음

-B 는 위에 라인을 보여준다

-F 는 ㅋ

 

grep -n         행의 줄표시

 

================================

vi servers

.srbversion

 

store-plaintext-passwords = yes

이걸로인해 권한설정이안‰獰珦?

 

gedit

 

우분투 프로그램 강제종료

ps -A

kill -9 [pid]

 

리눅스 path 추가경로

1. /etc/environment

 

2. source environment 실행

 

 

디렉토리 통째 압축

 

gzip사용시

>tar zcvf 파일명 디렉토리명

(파일명은 .tar.gz으로)

 

bzip사용시

>tar jcvf ...

 

 

tar.gz 풀때

xvzf 

tar 풀때

xvf

 

z: 압축률

 

cvf tar의 옵션이고, z/j gzip/bzip으로 압축한다는 옵션임.

즉 압축없이 묶기만 할땐, z/j를 빼면 된다는..

 

-------------------------------------------------------

디렉토리 압축  tar cvf 파일명.tar.gz  디렉토리명

해제                tar xvf 파일명

-------------------------------------------------------

 

덧붙여 .xz 가 있는데 xz -d 로풀어준다

 

 

가끔 아래의 메시지와 같은 에러가 발생하면서 프로그램 실행이 안돼는 경우가 있다.

 

=======파일에서 단어찾기

grep 단어 파일명

 

-b

-i 대소문자 구별 x

-n 행까징

 

grep

r 하위디렉토리까지 검색

 

 

make -j multithread build

엄청빨라짐

 

 

 

 

 

 대표적으로 make를 실행할 때 가끔씩 발생한다.

 /bin/sh: Syntax error: Bad fd number

 

 우분투에서는 다음과 같은 명령어 커맨드로 해결할 수 있다.

sudo rm /bin/sh

sudo ln -s /bin/bash /bin/sh

[출처] /bin/sh: Syntax error: Bad fd number|작성자 괴도키드

 

 

 

 

쉘확인

echo $SHELL

 

vim 편집기

n line <= line 으로 이동

 

오류메세지 남기는법 log 파일에

makefile 2>>log

 

 

vim 에서 모르는 구조체나 함수가 있다면 그곳에서 ctrl+] 누르면 정의된 곳으로 가고

다시 되돌아 가려면 ctrl + t 를 누르면 복귀

 

ctags 로 생성되어진 파일은 그 디렉토리에서만 사용가능함. 그래서

./etc/vimrc 에서 추가로 set tags += 파일 디렉토리/tags 파일을 추가한다.

 

추가로

명령모드에서 tag 로 이동하고 싶다면

ex)

:ta task_struct (== :tag task_struct)

검색겨로가 next

:tn (==:tag next)

:tp (==:tag previous)

 

:ta [name] : name 과 일치하는 tag 로 이동

:ts [name] : name 과 일치하는 tag 목록 출력

:tags            : 이동한 tag 히스토리 목록 출력

 

 

사용자 변경

chown -R 폴더안 파일들까지

형식 : chown [계정명] [파일명] #파일의 소유자만 변경할경우

형식 : chown [계정명:그룹명] [파일명] #파일의 소유자및소유그룹을 함께 변경할경우

or . 으로 테스트해보기

ex)

-. 파일의 소유자 변경하기

 

testfile의 소유자를 root에서 user1로 변경하였다.

[root@os1 ~]# ls -l testfile

-rw-r--r-- 1 root root 0 2013-01-19 15:07 testfile

[root@os1 ~]# chown user1 testfile

[root@os1 ~]# ls -l testfile

-rw-r--r-- 1 user1 root 0 2013-01-19 15:07 testfile

 

-. 파일의 소유자와 소유그룹 함께 변경하기

testfile의 소유자와 소유그룹을 root에서 user1로 변경하였다.

[root@os1 ~]# ls -l testfile

-rw-r--r-- 1 root root 0 2013-01-19 15:07 testfile

[root@os1 ~]# chown user1:user1 testfile

[root@os1 ~]# ls -l testfile

-rw-r--r-- 1 user1 user1 0 2013-01-19 15:07 testfile

 

 

다음과 같이 scp 명령어를 이용하여,

서버에서 다른 서버로 복사할 때 속도를 설정하여, 복사할 수 있다

 

# scp -l [KB 속도] [파일명] [복사될서버경로]

 

다음은 위에서 제시한 방식으로 명령어를 수행한 내용이다.

400KB 속도로 test.tar.gz 파일을 다른 서버의 /opt 경로로 복사하는 예제이다.

# scp -l 400 test.tar.gz root@server:/opt

 

파일옮기기

scp -fr

 

scp -옵션 [옮길파일] [서버계정@ 서버아이피:/저장공간]

A서버 프로필(Source) :

IP : 10.1.51.169

사용계정 : develop

옮길 파일 : /home/search/test/

 

B서버 프로필(Destination) :

IP : 10.1.51.168

사용계정 : search

올릴 경로 : /home/solution/

 

다음의 명령으로 전송할 수 있다.

절대경로로

$ scp -r /home/search/test search@10.1.51.168:/home/solution/

 

아파치란(Apache)

- 한마디로 웹서버(웹서비스를 제공하는 서버)

 

 

vim etc/hosts

서버주소

ex) 218.36.33.100 figi 하면 define

 

apt-cache search 이름 -> serch

 

 

 

정규식 표현을 이용한 grep

hg st | grep ^M | awk '{print $2}'

 

awk 2번째 문자열을 parsing

 

hg remove `hg st | grep ^M | awk '{print $2}'` --dry-run

hg remove `hg st | grep ^M | awk '{print $2}'` -f

find drivers/sys_lib -name '*.x' | sed -e 's/\.x//' | xargs -I @ mv @.x @.a

 

find drivers/sys_lib -name '*.a' | sed -e 's/\.a//' | xargs -I @ mv @.a @.x

find /source/newcon4/newcon4/boot/msd7816/u-boot-1.1.6 -type f \

\( -name 'core' -o -name '*.bak' -o -name '*~' \

-o -name '*.o'  -o -name '*.a' -o -name '*.depend' \) -print \

| xargs rm -f

find drivers/sys_lib -name '*.x' | sed -e 's/\.x//' | xargs -I @ mv @.x @.a

 

grep -v 제외

 

make 2>log -> log warning 이랑 error 이 들어간다.

 

 

export NEWGUI=1

->env 설정에 newgui=1 이 등록됨

728x90

'프로그래밍 > Linux' 카테고리의 다른 글

[DataBase] DB - Mysql Dump  (0) 2020.12.31
[CROSS-COMPILE] openssl 컴파일  (0) 2020.12.24
[openssl] Cross-compile 방법.  (0) 2020.12.17
[FTP] Anonymous 접속 설정  (0) 2020.12.17
[삼바] 삼바 설치 및 설정 방법 (samba setup)  (0) 2020.06.30

+ Recent posts