자바스크립트 슬라이드 쇼 - jabaseukeulibteu seullaideu syo

1. 선언과 동시에 0으로 초기화 2. memset() 함수를 이용한 초기화 3. 초기화 목록을 이용한 초기화 4. 반복문을 이용한 초기화 #include <stdio.h> #include <string.h> struct student {         char name[20];         int age;         long number; }; int main() {         //1. 선언과 동시에 0으로 초기화         struct student students[3] = {0};         //2. memset() 함수를 이용한 초기화         struct student students2[3];         memset(students2,0,sizeof(students2));         //3. 초기화 목록을 이용한 초기화         struct student students3[3] = {                 {"kim", 25, 45607},                 {"기리",28,60121315},                 {"Lee",23, 45609}         };         //4. 반복문을 이용한 초기화         int i = 0;         struct student students4[3] = {0};         int size = sizeof(students4) / sizeof(struct student );         for(i = 0; i < size ; i++ )         {                 printf("이름 입력 : ");                 scanf("%s", students4[i].name);                 printf("

자세한 내용 보기

C 언어 문자열 함수 strstr() 사용한 문자열 찾기

-9월 30, 2018

#include <stdio.h> #include <string.h> int main() {         char str_source[1024] = {0};         char str_find[1024] = {0};         char *pFind = NULL;         int count = 0;         printf("첫 번째 문자열은 ? ");         scanf("%s",str_source);         printf("찾고 싶은 문자열은 ? ");         scanf("%s",str_find);         if(strlen(str_source) <= 0 || strlen(str_find) <= 0 )         {                 printf("공백 문자열은 안되요!\n");                 return 0;         }         pFind = strstr(str_source, str_find);         while (NULL != pFind)         {                 count++;                 pFind = strstr(pFind + strlen(str_find), str_find);         }         printf("문자열 \"%s\" 에는 문자열 \"%s\" 이 %d번 있습니다\n", str_source, str_find, count);         return 0; } 실행시 : ndgndg91@LAPTOP-CCFK7MKV:~$ ./find_string_input 첫 번째 문자열은 ? 남동길입니다.남동길이에요.안녕하세요!남동길이니까!남동길이에요! 찾고 싶은 문자열은 ? 남동길

자세한 내용 보기

SI 탈출기 - 나는 개발자로 살고 싶다.

-4월 15, 2019

나는 개발자로 살고 싶다. 오늘은 SI업계를 탈출한 역사적인 날이다.  그래서 작년부터 지금까지 나의 선택을 되돌아 보려고 한다. 먼저 SI업계에 관련된 재밌는 글들이다... https://brunch.co.kr/@javajigi/4?fbclid=IwAR3ouBbBmMZckOkCwF8aM5vYheEVctwafQaUMSiG89iVvzkh_Pu7dyCDK34 http://blog.hwang.gg/20190327/?fbclid=IwAR1_Hf4hXeIqJ70jk6egO6OIURa1RGZN36ggzU5jrPGXMlKkN7kOSezJmDY 2018년 2월 학교를 졸업했다. 대략 2017년 9월 ~ 2018년 2월 사이에 나는 아래와 같은 생각을 가지고 있었다. 1. 개발을 할 수 있는곳이면 SI업계에서도 좋을 것 같다.  - 나는 신입이니까 어딜가도 뭘 해도 많이 배울거야.. ( 왜 이런 생각을 했을까) 2. 연봉은 마지노선 3천으로 정하자. (돈 보다 중요한게 정말 많은걸 이땐 왜 몰랐을까) 3. 빨리 일해서 경력을 쌓고 싶다. (너무 조급 했었다.) 위의 3가지 생각을 가지고 나는 취업을 준비했다. 그래서 열심히 서류넣고 면접보다보니 나의 바램대로 졸업하자마자 바로 일할 수 있게 되었다. 선택권은 총 4가지로 아래와 같았다. 1. OCR 스타트업 - 연봉 2900 2. 철강제조업 전산실 - 연봉 4000 3. 공장생산시스템 개발직 - 연봉 3천 중반? 4. GS ITM - 연봉 3천 중반이라고 들었었다. (조금 이상하다..) 사실 스타트업은 먼저 연락이 와서 서류를 제출하고 면접을 봤다. 여기서 나는 OCR 스타트업과 GS ITM을 굉장히 고민했다. 스타트업은 연봉만 약할 뿐 굉장히 재밌게 일할 수 있을것 같았다. 철강제조업 전산실 같은 경우는 돈은 많이 주지만, 개발이 너무 하고 싶었다. 공장생산시스템 같은 경우에는 도메인이 너무 특수해서 망설였다. 하지만 그 당시

자세한 내용 보기

DataGrip 기존 table data INSERT 문으로 export && CREATE TABLE 문 export

-4월 03, 2020

자바스크립트 슬라이드 쇼 - jabaseukeulibteu seullaideu syo

혼자서 이거저거 만지고 개발하다 보니까 mysql, mariadb, postgre 등 여러 RDB를 사용했었다. 그러다가 문득 다른 DB 간에 테이블과 해당 테이블에 있는 Data가 필요하게 되어 편하게 옮기는 방법 없을까? 찾다가 내가 한 방법을 블로깅 한다. DataGrip 툴을 이용해서 먼저 DDL CREATE TABLE 을 뽑아낸다. 아래 이미지 처럼 해당 스키마이든 해당테이블을 선택하고 오른쪽 클릭을 하고, SQL Scripts 에 마우스를 올리면 오른쪽 처럼 Generate DDL 이라는 문구를 찾을 수 있다. 아래 처럼 DDL 을 뽑을 수 있다. 물론 mysql, mariadb 같은 경우 SHOW CREATE TABLE 문을 사용할 수 있지만, 테이블이 여러개일 경우, 혹은 전체 스키마를 다 따야할 경우 테이블 하나하나 하고 있을 수 없다. 그럴 때 이렇게 사용하면 좋을것 같다. 그렇다면 이제는 특정 테이블의 Data 들을 INSERT 구문으로 뽑아보자. 아래와 같이 우선 SELECT * FROM table; 을 하든 뭘 하든 추출하려는 데이터셋을 query 로 돌린다. 그리고 아래처럼 row 들을 선택하고 오른쪽 클릭을 한다. 우선 아래처럼 Data Extractor:~ 를 보면 여러가지 방법이 있다. INSERT 문의 두 가지가 가능하다. 1. SQL Inserts 2. SQL-Insert-Statements.sql.groovy 두 가지 중 하나를 선택한다. 그리고 아래 처럼 Dump Data 로 가서 파일을 생성하든지 클립보드에 출력하든지 선택하면 된다. 나같은 경우, 파일로 생성했다. 따라서 아래처럼 파일을 생성한다. 그리고 파일이 생성되면, DataGrip 오른쪽 하단에 아래와 같은 얼럿이 나온다. 파일을 눌러서 열어보면 아래 이미지와 같이 Insert 문으로 변환된 것을 볼 수 있다.

자세한 내용 보기

IntelliJ 인텔리제이 - Git commit squash (Interactively Rebase)

-4월 25, 2020

자바스크립트 슬라이드 쇼 - jabaseukeulibteu seullaideu syo

Git 을 이용해서 진행하는 개발 업무를 하다보면, 급한 이슈로 인해서 현재 작업하던 것을 제쳐두고 해당 이슈를 처리해야 할 일이 있다. 그러면 해당 작업을 불가피하게 commit 혹은 stash 를 이용하여 현재까지 작업한 상태를 보존해야 한다. 여담으로, 개인적으로 stash 를 상당히 비추한다. 그 이유는, commit 이 안된 stash 의 경우 실수로 날려버리면 복구가 불가능하다. 실제로 업무를 하다가 실수로 기존 stash 를 clear 해버려서 하루종일 작업한게 날아갈 뻔해서 진땀을 한바가지 흘린 적이 있다. 다행히도 commit 을 했어서, commit hash 를 통해서 복구를 했었다. 따라서 stash 보단 commit 을 자주하여, squash 를 애용하겠다고 생각했다. 다시 돌아와서 얘기하자면, 급한 이슈가 자주 발생하면 할수록, 도중에 흐름이 끊겨서 설계한 대로 commit 단위를 쪼개기가 어려워지고 의미있는 commit message 작성이 어려워진다. 따라서 commit 단위를 관리하기 위해서 squash 를 통해 commit 메세지를 관리하는 방법을 블로깅 해보려고 한다. 단적인 예로 아래와 같이 Pageable 이라는 feature 에 대해서 3가지로 나눠졌다. 해당 예제는 여러사람들과 같이 협업이 아니라 혼자 진행하고 있는 사이드 프로젝트라서 브랜치가 하나이다. 또한 전제로 이 기능은 매우 간단하며, 하나의 commit 으로 관리되는것이 더 효율적이라고 판단된 사항이다. 따라서 3개의 commit 을 하나로 통합하는 예제이다. 그렇다면 이제 진행해 보자. 아래와 같이 commit 내역에 오른쪽 클릭을 하고, interactively rebase from here.. 를 선택한다. 아래와 같이 하나의 commit 내역만 대상에 뜬다. 따라서 HEAD~3 을 합치고 싶은경우, HEAD~3 의 commit 을 다시 오른쪽 클릭하고 동일하게 진행해준다. 아래와 같이 HEAD~3 co

자세한 내용 보기

erwin DM 으로 Oracle 연결 할 때 뜨는 에러들 해결

-11월 13, 2017

자바스크립트 슬라이드 쇼 - jabaseukeulibteu seullaideu syo

첫 번째 에러 ! ora7nt.dll 라이브러리 어쩌구 저쩌구 한다. 본인은 구글링을 해본 결과 erwin이 32bit만 지원하니까 64bit 오라클을 설치했으면 지우고 32bit를 재설치하고 해보라는 답글들을 많이 봤는데 64bit문제가 아니였다. 왜냐면 내 친구가 오라클을 64bit 설치했는데 erwin이랑 잘만 연결이 되었다. 따라서 32, 64bit 개같은 소리는 듣지 않기로 하고 다른 방법을 찾아보니까 시스템환경변수에서  PATH에 oracle client를 지정해주지 않아서라는 답을 얻었다. 위에 에러 메세지에서도 적절한 클라이언트 소프트웨어를 설치하라고 한다. 그래서 PATH설정을 해주니 ora7nt.dll에러는 해결 되었다. 하지만 다음 에러에 봉착했다! ORA-01041 에러 구글링 해본 결과 아래 링크에 답이 나와있었다. https://erwinhelp.zendesk.com/hc/en-us/articles/230410267-Receiving-Error-ORA-01041-internal-error-hostdef-extension-doesn-t-exist-on-re-establishing-a-connection-to-Oracle- Locate the 'sqlnet.ora' file and set: SQLNET.AUTHENTICATION_SERVICES = (NONE) 위 처럼 sqlnet.ora 파일에서 설정을 변경해주니까 연결이 잘되었다. 잘 되는 모습, 먼저 forward Engineer 그 다음은 preview

자세한 내용 보기

C 언어 구조체 배열의 동적 할당

-10월 07, 2018

포인터변수를 선언하고 malloc()함수를 사용해서 메모리를 할당하고 free()함수로 해제 #include #include struct s_teacher {         char name[20];         int age;         long number; }; struct s_student {         char name[20];         int age;         long number;         struct s_teacher* pTeacher; //포인터 변수 }; void inputCounts(int *sCnt, int *tCnt); int main() {         int sCnt =0, tCnt =0;         inputCounts(&sCnt, &tCnt);         if(sCnt <= 0 || tCnt <= 0)         {                 printf("선생과 학생수는 1명 이상이여야 됩니다.\n");                 return 0;         }         printf("선생 수 : %d, \t 학생 수  : %d\n", tCnt, sCnt);         struct s_teacher *pTeachers =NULL;         struct s_student *pStudents =NULL;         pTeachers = (struct s_teacher *)malloc(sizeof(struct s_teacher) * tCnt);         //memset(pTeachers, 0 , sizeof(struct s_teacher) * tCnt);         pStudents = (struct s_student *)malloc(sizeof(struct s_student) *