cheese_jelly_의 등록된 링크

 cheese_jelly_로 등록된 네이버 블로그 포스트 수는 211건입니다.

[c언어][버블정렬] [내부링크]

#include<stdio.h> void main() { int data[10] = { 90,78,100,30,55,24,52,70,12,95 }; //숫자정의 bubble(data); //버블함수 호출 for (int a = 0; a < 10; a++) { printf("%d\n", data[a]); } } int bubble(int a[10]) { int i, k; int empty; for(i = 0; i < 10; i++) { for (k = 0; k < 9-i; k++) { //여기다가 i를 넣어두면 횟수를 줄일수있다 if (a[k] > a[k + 1]) { empty=a[k + 1]; a[k + 1] = a[k]; a[k] = empty; } } } }

[c언어][원형Queue] [내부링크]

#include<stdio.h> #include<stdlib.h> #define SIZE 6 struct Queue { int data[SIZE]; int front; int rear; }; //값을 넣는 함수 int Enqueue(struct Queue* q, int data) { static int full = 0; //초기상태 if ((q->rear + 1) % SIZE == q->front&&full == 1) //포화상태 검출하는 부분 { return 0; } q->data[q->rear] = data; //값을 넣는다 q->rear = (q->rear + 1) % SIZE; //남는부분계산가능 full = 0; if ((q->rear + 1) % SIZE == q->front) {//rear의 위치와 front의 위치가 같을때의 예외처리 full = 1; } return 1; } //값을 빼내는 함수부분 int Dequeue(struct Queue* q, int* data

[c언어][Baby Gin] [내부링크]

#include<stdio.h> #pragma warning(disable:4996) void main() { int n[7], temp; for (int i = 0; i < 6; i++) { printf("숫자를 입력하세요: "); scanf("%d", &n[i]); }//숫자 입력 for (int i = 0; i < 6; i++) { for (int j = 0; (j + i) < 6; j++) { if (n[j] > n[j + 1]) { temp = n[j]; n[j] = n[j + 1]; n[j + 1] = temp; } } } for (int i = 1; i < 7; i++) printf("%d\t", n[i]);//정렬 if (n[1] == n[2]&&n[2]== n[3]) { if (n[4] + 1 == n[5] && n[5] + 1 == n[6]) printf("Baby gin"); else if (n[4] == n[5] && n[5] == n[6]) printf("Ba

[c언어][팩토리얼] [내부링크]

#include<stdio.h> int main() { int i, n,result=1; printf("몇번째 팩토리얼을 보시겟습니까"); scanf("%d", &n); for (i = 0;n>i;n--) { result = result*n; } printf("%d", result); }

[c언어][포인터 링크리스트] [내부링크]

#include <stdio.h> struct stu { int data; struct stu *next; //next는 다음 노드를 가르킨다. }; void main() { /* 1. head =>list의 첫번째 노드를 가르키는 포인터이름 head는 첫번째를 삭제하거나 추가할때 빼고는 움직이지 않는다. head= 이라는 코딩은 하지않기 head를 움직이는 코딩이니까 2. newnode => 새로운 노드를 가르키는 포인터 3. del => 삭제할때 사용하는 포인터 4. cur => 모든 잡일을 담당하는 포인터 */ struct stu a, b, c; struct stu *head, *newnode, *del, *cur; a.data = 5; b.data = 7; c.data = 10; head =cur= &a; cur->next = &b;// a.next = &b; cur->next->next = &c; //b.next=&c; cur->next->next->next = NULL;

[메모리할당 성적처리프로그래밍][malloc을 사용] [내부링크]

#include <stdio.h> #include<stdlib.h> struct student { char name[10]; int kor, eng, mat,total; float avg; }; //메모리할당함수 struct student*myalloc(int *num) { return malloc(sizeof(int)*(*num)); } //입력함수 void myinput(struct student *stu,int num) { int i; for (i = 0; i < num; i++) { printf("이름을 입력하시오"); scanf("%s", (stu + i)->name); printf("점수를 입력하시오"); scanf(" %d", &(stu + i)->kor); scanf("%d", &(stu + i)->eng); scanf("%d", &(stu + i)->mat); (stu + i)->total = (stu + i)->kor + (stu + i)->eng + (stu +

[c언어][포인터를 사용한 출력] [내부링크]

#include <stdio.h> int main(void) { int a=3; int b[4] = { 4,3,2,1 }; int c[2][2] = {4,3,2,1}; int d[2][2][2] = {8,7,6,5,4,3,2,1}; int*p = &a; int*p_a = &a; int *p_b = b; int(*p_c)[2] = c; int(*p_d)[2][2] = d; int**pp = &p; printf("%d\n", a); printf("%d %d %d %d\n", *p_b, p_b[1], p_b[2], p_b[3]); printf("%d %d %d %d\n", p_c[0][0], p_c[0][1], p_c[1][0], p_c[1][1]); printf("%d %d %d %d %d %d %d %d\n", (*p_d)[0][0], (*p_d)[0][1], *(p_d)[0][1], (*p_d)[1][1], *(p_d)[1][0],p_d[1][0][1],*(p_d)[1][1],p_d

[java를 사용한 로또] [내부링크]

import java.util.Random; import java.util.Scanner; public class Lotto { public static void main(String[]args){ int []lotto=new int[7]; Random random=new Random(); //int random=(int)(Math.random()*45); int i,j; Scanner sc=new Scanner(System.in); System.out.println("몇번을 돌릴꺼니"); for(i=0;i<7;i++){ lotto[i]=random.nextInt(44)+1; for(j=0;j<6;j++){ if(lotto[j]==lotto[j+1]){ j--; break; }} for(j=1;j<7;j++){ if(lotto[j]==lotto[j-1]){ j++; break; } } System.out.print(" "); System.out.print(lotto[i]); } }

[java를 사용한 1인성적처리] [내부링크]

package Java.sun.busan; import java.util.Scanner; public class Test { public String []name; public int [][]score; public int result; public int j=0,i=0; public float[] avg; public Test(){ score=new int[3][4]; avg=new float [3]; name=new String[3]; } public void stu_name(String name1){ name[j]=name1; } public void score_kor(int num){ score[i][0]=num; } public void score_mat(int num){ score[i][1]=num; } public void score_eng(int num){ score[i][2]=num; } public int sum(){ score[i][3]=score[i][0]+sc

[java를 사용한 3인성적처리] [내부링크]

import java.util.Scanner; public class CalStudent { public static void main(String[]ar){ char [][]name; name=new char[3][10]; int[][]score; score=new int[3][4]; float []avg; avg=new float[3]; Scanner sc=new Scanner(System.in); for (int i = 0; i < 3; i++) { System.out.println("학생의 이름을 입력하시오 :"); name[i][0]=sc.next().charAt(0); for (int j = 0; j < 3; j++) { System.out.println("점수입력:"); score[i][j]=sc.nextInt(); } score[i][3]=score[i][0]+score[i][1]+score[i][2]; avg[i]=score[i][3]/ 3.f; } System.ou

[c언어][구조체포인터함수] [내부링크]

#include <stdio.h> void input(struct student *p); void output(struct student *p); struct student //구조체 선언 { char name[10]; int score[4]; float avg; };//aa; //전역변수 int main(void) { const char score[6][10] = { "Name","Kor","Eng","Mat","Total","Avg" }; struct student aa[3] = { 0 }; struct student *p = aa; input(aa); output(aa); } void input(struct student *p) { int j,i; for (i = 0; i < 3; i++) { scanf("%s", (p + i)->name); for (j = 0; j < 3; j++) { scanf("%d", (p + i)->score + j); (p + i)->score[3]

[c언어][구조체포인터성적] [내부링크]

#include <stdio.h> struct student //구조체 선언 { char name[10]; int score[4]; float avg; };//aa; //전역변수 int main(void) { struct student aa; //지역변수 struct student *p; int i; p = &aa; (*p).score[3] = 0; scanf("%s", (*p).name); //name 해도 문제 없음 배열명은 그 배열의 시작주소를 의미 for (i = 0; i < 3; i++) { scanf(" %d", (*p).score+i); (*p).score[3] += (*p).score[i]; } /* scanf(" %d %d %d", &aa.score[0], &aa.score[1], &aa.score[2]); aa.score[3] = aa.score[0] + aa.score[1] + aa.score[2]; */(*p).avg = (*p).score[3] / 3.f; p

[c언어][2차원배열] [내부링크]

#include<stdio.h> #include<string.h> int input(char(*name)[10], int(*score)[4]); int ex(int(*score)[4], float *avg); int output(char(*name)[10], int(*score)[4], float *avg); int main() { /*int a = 1; int b = 2; int c = 3; int i; int *p[3]; //={&a,&b,&c} p[0] = &a; p[1] = &b; p[2] = &c; for (i = 0; i < 3; i++) printf("%d\t", *p[i]); */ char name[3][10]; int score[3][4] = { 0 }; float avg[3]; input(name, score); ex(score, avg); output(name, score, avg); } int input(char (*name)[10], int (*score)[4

[c언어][포인터3명성적] [내부링크]

#include<stdio.h> #include<string.h> void input(char *name,int *score); void ex(int *score, float *avg); void output(char *name, int *score, float *avg); int main() { char name[3][10]; int score[3][4] = { 0 }; float avg[3]; input(*name, *score); ex(*score, avg); output(*name, *score, avg); } void input(char *name, int *score) { int i,j; for (i = 0; i < 3; i++) { printf("이름을 입력하시오:"); scanf("%s", name + i * 10); for (j = 0; j < 3; j++) { printf("성적을 입력하시오:"); scanf(" %d", score + j); } } } void e

[c언어][배열성적표] [내부링크]

#include <stdio.h> #include <string.h> int main() { char name[3][10]; int score[3][4] = { 0 }; float avg[3]; int i, j; for (i = 0; i < 3; i++) { printf("이름을 입력하시오: "); scanf("%s", &name[i][0]); //printf("성적을 입력하시오 (국,영,수) :"); //scanf(" %d %d %d", &score[i][0],&score[i][1],&score[i][2]); printf("성적을 입력하시오 (국,영,수) :"); for (j = 0; j < 3; j++) { scanf(" %d", &score[i][j]); } } printf("이름 국어 수학 영어 합계 평균\n"); for (i = 0; i < 3; i++) { score[i][3] = score[i][0] + score[i][1] + score[i][2]; //합계 avg[i

[c언어][strcmp함수] [내부링크]

#include<stdio.h> int main(){ char buf1[10] = "superman"; char buf2[10]; int ans,i; scanf(" %s", buf2); for (i = 0; buf1[i] != '\0'; i++) { if (buf1[i] != buf2[i]) { printf("안같다"); break; } else { printf("같다"); break; } } }

[c언어][별찍기] [내부링크]

#include <stdio.h> //1번 문제 int main(void) { int i,n;//i는 가로 n은 세로 for (n = 0; n < 3; n++) { for (i = 0; i < 4; i++) { printf("*"); } printf("\n"); //띄울려고 } return 0; } #include <stdio.h> //2번 문제 int main(void) { int i, n; //i는 세로 n은 가로 for (i = 1; i < 4; i++) { {for (n = 1; n <= i; n++) printf("*"); } printf("\n"); } return 0; } int main(void) //3번문제 { int x, y; //x는 가로 y는 세로 for (x = 1; x < 4; x++) { for (y = 0; y <3 - x; y++) //빈공간이 맨처음에는 두칸인데 두번돌릴려면 0과1이면 되니까 저렇게뺀다 나중에 한개씩 줄여서 하려면 어처피 x가 커지니까

[c언어][구구단] [내부링크]

#include <stdio.h> int main(void) { int i, n,result; //i는 뒷쪽 n 은 앞쪽 for (i = 1; i <= 9; i++) { for (n = 2; n <= 9; n++) { result = i*n; printf("%d*%d=%d\t", n, i, result); } printf("\n"); } return 0; }

[c언어][성적프로그램] [내부링크]

/*성적프로그램 한사람성적프로그램 입력:이름, 국,영,수 연산: 총점, 평균 출력:이름,국,영,수,총,평*/ #include <stdio.h> void main() { char name; int score[4];//국 영 수 총 float avg; printf("이름을 입력하시오"); scanf("%c", &name); printf("국어 영어 수학 점수를 입력하시오"); scanf("%d %d %d", &score[0], &score[1], &score[2]); score[3] = score[0] + score[1] + score[2]; avg = score[3] / 3; printf("이름:%c\n", name); printf("국어점수, 수학점수, 영어점수:%d %d %d\n", score[0], score[1], score[2]); printf("총점:%d\n", score[3]); printf("평균:%f\n", avg); return 0; }

[c언어][이진트리 삭제알고리즘] [내부링크]

삭제할 노드가 단말노드(leaf node)인 경우 -그냥 그 노드만 지우면 된다. 삭제할 노드가 하나의 자식노드를 갖는경우 -그 노드를 지우고 자식을 부모로 올려주면 된다. -자식이 오른쪽에 있건 왼쪽에 있건 상관이 없다. 삭제할 노드가 두개의 자식노드를 갖는경우 -왼쪽에서 가장 큰값을 가진 노드를 그 자리로 옮긴다. -오른쪽에서 가장 작은 값을 가진 노드를 그자리로 옮긴다.

[c언어][삽입정렬] [내부링크]

#include<stdio.h> #include<stdlib.h> #include <time.h> void InsertionSort(int data[], int size); int RandNum(int flagChange); void main(void) { int data[1000]; for (int i = 0; i < 1000; i++) { data[i] = RandNum(1); } InsertionSort(data, 1000); for (int i = 0; i <= 998; i++) { //printf("%d ", data[i]); if (data[i] > data[i + 1]) puts("Err"); } } int RandNum(int flagChange) { if (flagChange == 1) { static int flag = 0; if (flag == 0) { flag = 1; srand((unsigned int)time(0)); } } return rand(); } /

[c언어][더블링크] [내부링크]

#include<stdio.h> #include<stdlib.h> #pragma warning(disable:4996) struct stu { int data; struct stu *next; struct stu *prev; }; // 동적메모리할당함수 선언 // 추가, 삭제, 검색기능 구현. // 1. 추가 ( 노드의 마지막에 무조건 추가 ) + 처음 실행시 추가할수없다. ( 최소 1개이상 노드가 있을경우만 동작 ) // 2. 삽입 ( 위치 선정해서 노드 추가 ) + 예외처리 // 3. 검색 ( 커서가 검색해서 커서를 이용해서 출력 ) + 예외처리 // 4. 삭제 ( 선택 삭제 + 전체 삭제 ) + 예외처리 // 5. 출력 ( 전체 출력 ) void myalloc(struct stu **newnode); // 메모리 할당함수 void append(struct stu *head, int *count); // 마지막 노드 추가함수 void insert(struct stu **head,

[c언어][링크드리스크모듈화] [내부링크]

#include<stdio.h> #include<stdlib.h> #pragma warning(disable:4996) struct stu { int data; struct stu *next; }; // 동적메모리할당함수 선언 // 추가, 삭제, 검색기능 구현. // 1. 추가 ( 노드의 마지막에 무조건 추가 ) + 처음 실행시 추가할수없다. ( 최소 1개이상 노드가 있을경우만 동작 ) // 2. 삽입 ( 위치 선정해서 노드 추가 ) + 예외처리 // 3. 검색 ( 커서가 검색해서 커서를 이용해서 출력 ) + 예외처리 // 4. 삭제 ( 선택 삭제 + 전체 삭제 ) + 예외처리 // 5. 출력 ( 전체 출력 ) void myalloc(struct stu **newnode); // 메모리 할당함수 void append(struct stu *head, int *count); // 마지막 노드 추가함수 void insert(struct stu **head, int *count); // 선

[c언어][싱글링크드리스트] [내부링크]

#include<stdio.h> #include<stdlib.h> #pragma warning(disable:4996) struct stu { int data; struct stu *next; }; void main() { struct stu *head, *cur, *del, *newnode; int num; head = cur = del = newnode = (struct stu*)malloc(sizeof(struct stu)); cur->data = 1; cur->next = NULL; cur ->next = (struct stu*)malloc(sizeof(struct stu)); cur->next->data = 2; cur->next ->next = NULL; cur->next->next = (struct stu*)malloc(sizeof(struct stu)); cur->next->next->data = 3; cur->next->next->next = NULL; while (

[c언어][구조체 링크드리스트] [내부링크]

#include <stdio.h> struct stu { int data; struct stu *next; //next는 다음 노드를 가르킨다. }; void main() { /* 1. head =>list의 첫번째 노드를 가르키는 포인터이름 head는 첫번째를 삭제하거나 추가할때 빼고는 움직이지 않는다. head= 이라는 코딩은 하지않기 head를 움직이는 코딩이니까 2. newnode => 새로운 노드를 가르키는 포인터 3. del => 삭제할때 사용하는 포인터 4. cur => 모든 잡일을 담당하는 포인터 */ struct stu a, b, c,d,e; struct stu *head, *newnode, *del, *cur; int num; a.data = 1; b.data = 2; c.data = 3; d.data = 4; e.data = 5; head =cur= &a; cur->next = &b; // a.next = &b; cur->next->next = &c; //b.ne

[c언어][동적메모리할당 malloc] [내부링크]

#include<stdio.h> #include <stdlib.h> void main() { char *p_char; int *p_int; float *p_float; //동적메모리할당 p_char = (char*)malloc(sizeof(char)); p_int = (int*)malloc(sizeof(int)); p_float = (float*)malloc(sizeof(float)); *p_char = 'A'; *p_int = 300; *p_float = 4.7f; printf("%c %d %f\n", *p_char, *p_int, *p_float); //메모리해제 free(p_char); free(p_int); free(p_float); }

[c언어][성적처리함수모듈] [내부링크]

#include<stdio.h> #pragma warning(disable:4996) #include <string.h> void input(struct student *p); void erase(struct student *p);//수정 void search_name(struct student *p); void search_score(struct student *p); void remove_name(struct student *p); void output(struct student *p); struct student //구조체 선언 { char name[10]; int score[4]; float avg; }; int main() { struct student aa[30] = { 0 }; struct student *p = &aa; int i; int num; do { printf("****MENU****\n1.입력\n2.수정\n3.이름검색\n4.점수검색\n5.삭제\n6.출력\n*

[c언어][계산기모듈화] [내부링크]

#include <stdio.h> int input(int *num1, char *op, int *num2); int ex(int num1, char op, int num2, int *reslnt); int ans(); int main() { int num1, num2; char op, ans; int reslnt; float resFloat; do { input(&num1, &op, &num2); ex(num1, op, num2, &reslnt); printf("계속:(y/n):"); scanf("%c", &ans); } while (ans == 'y' || ans == 'Y'); } int input(int *num1,char *op,int *num2) { printf("값을 입력하시오"); scanf(" %d,%c,%d", num1,op,num2); } int ex(int num1, char op, int num2, int *reslnt) { switch (op) { case

[c언어][계산기 메인에때려박은거] [내부링크]

#include <stdio.h> #pragma warning(disable:4996) int main(void) { float a, b; char push, op; do { printf("입력하시오: "); scanf("%f %c %f", &a, &op, &b); switch (op) { case '+': printf("결과값: %f\n", a + b); break; case '-': printf("결과값: %f\n", a - b); break; case '/': printf("결과값: %f\n", a / b); break; case '*': printf("결과값: %f\n", a*b); break; default: break; } printf("계속하려면 y/Y를 누르시오\n"); //fflush(stdin); //이게 엔터를 scanf가 차지하는걸 막아주는 기능을 한다 //scanf("%c",&push); //c는 두번 반복하는거 싫어하니까 다른방법이 또 잇음 바로위에꺼 //s

[c언어][숫자갯수세기] [내부링크]

#include<stdio.h> int main() { int sum; int num; int check = -1; int temp; while (check < 9) { check = check + 1; num = 0; sum = 0; while (num < 1000) { num = num + 1; temp = num; while (temp != 0) { if (temp % 10 == check) sum = sum + 1; temp = temp / 10; } } printf("%d: %d\n", check, sum); } }

[java][5*5행렬 덧셈과 곱셈] [내부링크]

public class Sauce { public static void main(String[]args){ int score[][]={{1,2,3,4,5},{6,7,8,9,0},{0,9,8,7,6},{5,4,3,2,1},{1,2,3,4,5}}; int score2[][]={{3,4,5,6,7},{2,1,0,9,8},{7,6,5,4,3},{8,9,0,1,2},{8,7,6,5,4}}; //덧셈 int [][]add; add=new int[5][5]; for(int i=0;i<score.length;i++){ for(int j = 0;j<score[i].length;j++){ add[i][j]=score[i][j]+score2[i][j]; System.out.print(add[i][j]+" "); } System.out.println(); } System.out.println(); //곱셈 int [][]mul=new int[5][5]; for(int i=0;i<5;i++){ for(i

[java][Hashtable를 사용한 전화번호부] [내부링크]

import java.util.*; import java.io.*; public class PhoneBook { private Hashtable<String, String> phoneBook; public PhoneBook(){ this.phoneBook = new Hashtable<String, String>(); } public void add(String name, String number){ if (this.phoneBook.containsKey(name) ){ System.out.println("이름"+ name +"이 전화번호부에 있습니다."); } else{ this.phoneBook.put(name,number); System.out.println("이름"+ name +"을 전화번호부에 추가하였습니다."); } } public void find(String name){ if(this.phoneBook.containsKey(name)){ String number=this

[c언어]오일러의 수 구하기 [내부링크]

#include <stdio.h> double factorial(double n); int main() { int i,j; double x,k=1; printf("어디까지 계산할까요.:"); scanf("%d",&i); for (j = 1; j <= i; j++) { x =1/factorial(j); k = k + x; } printf("오일러의 수는 %lf 입니다.",k); return 0; } double factorial(double n) { double i, j; j = 1; for (i = 1; i <= n; i++) { j = j*i; } return j; }

[c언어][부동 소수점 근사값 구하기] [내부링크]

#include <stdio.h> #define e_min 0.000001 int f_equal(double a, double b); double absolute(double a); double min(double a, double b); int main(void) { double a, b; printf("값을 입력해라 두개"); scanf("%lf %lf", &a, &b); if (f_equal(a, b) == 0) printf("다르다"); else printf("유사하다"); } int f_equal(double a, double b) { double d, f, a1, b1; d = absolute(a - b); a1 = absolute(a); b1 = absolute(b); f = min(a1, b1); if (d / f < e_min) return 1; else return 0; } double absolute(double a) { if (a > 0) return a; el

[c언어][윤년 구하기] [내부링크]

#include <stdio.h> int is_leap(int year); int main(void) //1년이 몇일인지 구하는 프로그램 { int year, result, z; printf("연도를 입력하시오 :"); scanf("%d", &year); result = is_leap( year); printf("%d년은 %d일입니다.", year, result); } int is_leap(int year) { if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) return 366; else return 365; }

[c언어][전화번호부][포인터]malloc사용 [내부링크]

#include <stdio.h> #include <string.h> #define CAPACITY 100 #define BUFFER_SIZE 20 char *names[CAPACITY]; char *numbers[CAPACITY]; int n = 0; void add(); void find(); void status(); void remove_entry(); void save(); void read(); void main() { char command[BUFFER_SIZE]; while (1) { printf("$ "); scanf_s("%s", command, sizeof(command)); if (strcmp(command, "add") == 0) add(); else if (strcmp(command, "find") == 0) find(); else if (strcmp(command, "status") == 0) status(); else if (strcmp(command,

[c언어][배열활용][주사위] [내부링크]

#include <stdio.h> #include <stdlib.h> #include <time.h> int get_dice_face(); int main() { srand((unsigned)time(NULL)); for(int i=0;i<1000;i++) { get_dice_face(); } } int get_dice_face() { static int y = 0; static int dice[5] = { 0, }; int x=0; x = rand() % 6; if (x == 0) dice[0]++; else if (x == 1) dice[1]++; else if (x == 2) dice[2]++; else if (x == 3) dice[3]++; else if (x == 4) dice[4]++; else if (x == 5) dice[5]++; y++; if (y!=0&&y % 100 == 0) printf("%d %d %d %d %d %d \n", dice[0], dice[1]

[c언어][순환 호출 사용] [내부링크]

#include <stdio.h> void show_digit(int n); int main() { int x, y; printf("정수를 입력하시오"); scanf("%d", &x); show_digit(x); } void show_digit(int n) { if (n == 0) return; show_digit(n / 10); printf("%d ", n % 10); }

[c언어][포인터 매개 변수] [내부링크]

#pragma warning(disable:4996) #include <stdio.h> void get_sum_diff(int x, int y, int *p_sum, int *p_diff); int main() { int x, y, sum, diff; printf("인수를 입력하시오"); scanf("%d %d", &x, &y); get_sum_diff(x, y, &sum, &diff); printf("x + y = %d", sum); printf("x - y = %d", diff); } void get_sum_diff(int x, int y, int *p_sum, int *p_diff) { int diff, sum; diff = x - y; sum = x + y; *p_sum = sum; *p_diff = diff; }

[c언어][점수 변환] [내부링크]

#pragma warning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <time.h> #define STUDENT 10 void convert(double *grades, double *scores, int size); int main() { double grades[STUDENT] = { 0, }; double scores[STUDENT] = { 0, }; float x,y; int i; for (i = 0; i < STUDENT; i++) { srand((unsigned)time(NULL)); convert(grades, scores, STUDENT); printf("%f\n", scores[i]); } } void convert(double *grades, double *scores, int size) { int i; double stu_score,stu_grade; for (i = 0; i < size; i

[c언어][길이가 같은지 판단] [내부링크]

#include <stdio.h> struct point { int x, y; }; int equal(struct point p1, struct point p2) { if ((p1.x == p2.x) && (p1.y == p2.y)) return 1; else return 0; } int quadrant(struct point p) { if (p.x > 0 && p.y > 0) return 1; else if (p.x > 0 && p.y < 0) return 4; else if (p.x < 0 && p.y>0) return 2; else if (p.x < 0 && p.y < 0) return 3; else return 0; } int main() { int z, r; struct point p1; struct point p2; struct point p; printf("x and y 값을 넣어라"); scanf("%d %d", &p1.x, &p1.y); printf("x and y

[c언어][파일입출력][파일 내용일치] [내부링크]

#include <stdio.h> #include <string.h> int main() { int x, y,result; char buffer1[256],buffer2[256]; char f_name[100], f2_name[100]; FILE *fp1; FILE *fp2; scanf("%s", f_name); scanf("%s", f2_name); printf("첫번째 파일 이름:%s\n", f_name); printf("두번째 파일 이름:%s\n", f2_name); if ((fp1 = fopen(f_name, "r")) == NULL) { fprintf(stderr, "Can not find file"); } if((fp2 = fopen(f2_name, "r")) == NULL){ fprintf(stderr, "Can not find file"); } while (fgets(buffer1, 256, fp1) != NULL) { fgets(buffer2, 256, fp2); r

[c언어][파일 입출력][학생성적을 평균으로 바꾸기] [내부링크]

#include <stdio.h> struct stu { char name[30]; int kor, math, eng; float avg; }; int main() { struct stu s; char buffer[256]; float result; FILE *fp1; FILE *fp2; if ((fp1 = fopen("student.txt", "r")) == NULL) { fprintf(stderr, "Can not find file"); } if ((fp2 = fopen("student_avg.txt", "w")) == NULL) { fprintf(stderr, "Can not find file"); } printf("이름 국어 수학 영어"); while (!feof(fp1)) { fscanf(fp1, "%s %d %d %d", s.name, &s.kor, &s.math, &s.eng); result = s.kor + s.math + s.eng; s.avg = result/3;

[c언어][전처리 및 비트필드][#ifdef 하기] [내부링크]

#include <stdio.h> #define DEBUG 2 #define LINE 3 double power_a(int x, int y) { double result = 1.0; int i; for (i = 0; i < y; i++) { #ifdef DEBUG printf("result=%f\n", result); #endif result *= x; } return result; } double power_b(int x, int y) { double result = 1.0; int i; for (i = 0; i < y; i++) { #if DEBUG==2 printf("result=%f\n", result); #endif result *= x; } return result; } double power_c(int x, int y) { double result = 1.0; int i; for (i = 0; i < y; i++) { #if (DEBUG==2 && LEVEL==3) pr

[c언어][점의 좌표가 어디에 위치하는지 알아내는 함수] [내부링크]

#include <stdio.h> struct point { int x, y; }; int equal(struct point p1, struct point p2) { if ((p1.x == p2.x) && (p1.y == p2.y)) return 1; else return 0; } int quadrant(struct point p) { if (p.x > 0 && p.y > 0) return 1; else if (p.x > 0 && p.y < 0) return 4; else if (p.x < 0 && p.y>0) return 2; else if (p.x < 0 && p.y < 0) return 3; else return 0; } int main() { int z, r; struct point p1; struct point p2; struct point p; printf("x and y 값을 넣어라"); scanf("%d %d", &p1.x, &p1.y); printf("x and y

[c언어][구조체의 포인터를 받아서 점이 어디에 위치하는지] [내부링크]

#include <stdio.h> struct point { int x, y; }; int equal(struct point *p1, struct point *p2) { if (((*p1).x == (*p2).x) && ((*p1).y == (*p2).y)) return 1; else return 0; } int quadrant(struct point *p) { if ((*p).x > 0 && (*p).y > 0) return 1; else if ((*p).x > 0 && (*p).y < 0) return 4; else if ((*p).x < 0 && (*p).y>0) return 2; else if ((*p).x < 0 && (*p).y < 0) return 3; else return 0; } int main() { int z, r; struct point *pp1; struct point *pp2; struct point *pp; struct point p1; struct poi

[c언어][사각형 함수][쉽게풀어쓴c언어 express] [내부링크]

#include <stdio.h> struct point { int x, y; }; struct rectangle { struct point a, b; //a는 오른쪽 상단 b 는 왼쪽 하단 }; int area(struct rectangle r) { //a의 x값이랑 b의 x값이랑 빼서 가로길이 찾기 int low, high,result; low = r.a.x - r.b.x; high = r.a.y - r.b.y; result = low*high; return result; } int parimeter(struct rectangle r) { int low, high, result; low = r.a.x - r.b.x; high = r.a.y - r.b.y; result = 2 * (low + high); if (result > 0) return result; else return -result; } int is_square(struct rectangle r) { int low, h

정보처리기사 필기 독학 공부방법, 합격후기(+공부 시간, 노트) [내부링크]

#정보처리기사 #큐넷 #자격증 안녕하세요. 코드만 올리다 처음으로 이런 정보글을 작성해 보네요! 제 글을 보시는 분들 중 it계열 전공자가 아니시더라도 무관하게 제 글을 참고하셔도 좋을듯 합니다. 우선 제목과 같이 정보처리기사 필기 공부법에 관하여 작성하려합니다. 일단 제 상태는 이러합니다. 1. it계열 전공자(4학년) 2. 필기 과목중 '운영체제'만 학습이 되어있는 상태 3. 코드는 쉽게 해석 + 이해 가능 2019년도 까지의 정보처리기사 필기시험은 총 5과목으로 이루어져있습니다. 시험 시간은 2시간 30분입니다. 1. 데이터베이스 2. 전자계산기구조 3. 운영체제 4. 소프트웨어공학 5. 데이터통신 저는 이 다섯가지 중에서 3번 운영체제만 학습이 되어있어서 시험공부를 어떻게 해야할지 너무 막막했습니다. 일단은 다들 전공자면 2주면 충분하다는 글 많이들 보셨으리라 생각합니다. 하지만, 5과목중에서 어느 과목도 40점 이하인 과락이 나오면 안되며, 평균은 60을 넘어야합니다. 공부

[python] 파일 확장자 변경 [내부링크]

#파이썬 #파일확장자 #변경 안녕하세요. .tar를 windows에서 압축을 풀어보니 txt파일에 확장자가 없더라구요. 그래서 코드를 찾다가 python 파일의 확장자를 변경하는 방법을 찾아서 여러분에게 도움이 되고자 포스팅해요. import glob import os.path fpath = 'C:\\Users\\*' files = glob.glob(fpath) for x in files: os.rename(x, x + '.txt') 위의 코드 fpath에 변경하고자 하는 파일들이 담긴 위치를 복사해서 넣어주시고, 뒤에 *을 붙이면 해당 위치에 있는 모든 파일에 대해서 확장자를 변경해줍니다. 만약에 특정 확장자를 변경하고 싶다면 import glob import os.path fpath = 'C:\\Users\\*.txt' //특정확장자(txt)원하시는 것으로 변경하면 돼요 files = glob.glob(fpath) for x in files: if not os.path.isdir

[python] 텍스트 파일 인코딩 변환 [내부링크]

#파일인코딩 #python #유니코드 #텍스트파일 안녕하세요. 오늘은 텍스트 파일 인코딩을 변환하는 방법을 가지고 왔습니다. import os fpath = 'C:\\Users\\' //input file이 들어있는 곳으로 wpath = 'C:\\Users\\' //write file이 작성될 곳으로 flist = os.listdir(fpath) for x in flist: input_name = fpath + x input = open(input_name, "r", encoding="utf-8") //encoding type은 원하시는 대로 변경해주세요 chunk = input.read() output_name = wpath + x output = open(output_name, "w", encoding="ANSI") //여기도 마찬가지입니다. output.write(chunk) 저는 utf-8 파일을 ANSI로 변환을 예제로 들었는데요. encoding에 들어갈 타입은 여러분이

[python] 특정 위치 문자 제거 [내부링크]

#파이썬 #python #문자열 #문자제거 오늘은 python 에서 특정한 위치의 문자를 제거하는 방법에 대해서 알려드리겠습니다. replace는 왼쪽에서 오른쪽으로 작동하는 함수인데요. 만약 오른쪽에 있는 하나만 제거하고 싶다면 replace보다는 다른 방법을 추천하고 싶습니다. x = 'Hello World' print(x) //Hello World y = x[:4] + x[5:] //문자열 슬라이싱 print(y) //Hell World 위와 같이 사용하시면 됩니다. 하지만 내가 지우고자 하는 문자열이 어디에 위치했는지 모른다면 index함수를 사용해주세요. x = 'Hello World' num = x.index('o') //찾고자 하는 문자열 넣기 y = x[:num] + x[num+1:] print(y) //Hell World 위와 같이 출력됨을 알 수 있습니다.

[tensorflow 2.] tensorflow 설치 및 nvidia-driver 설치 [내부링크]

#머신러닝 #tensorflow #텐서플로 안녕하세요. tensorflow설치와 nvidia-driver설치에 관해 포스팅 할게요. 하단의 url을 들어가셔서 본인의 환경에 맞게 터미널에 입력하시면 됩니다. https://www.tensorflow.org/install/gpu?hl=ko GPU 지원 | TensorFlow TensorFlow 설치 GPU 지원 목차 Pip 패키지 이전 버전의 TensorFlow 하드웨어 요구사항 소프트웨어 요구사항 TensorFlow GPU 지원에는 다양한 드라이버와 라이브러리가 필요합니다. 설치를 단순화하고 라이브러리 충돌을 방지하려면 GPU를 지원하는 TensorFlow Docker 이미지 를 사용하는 것이 좋습니다(Linux만 해당). 이 설정에는 NVIDIA GPU 드라이버 만 있으면 됩니다. 아래의 설치 명령어는 최신 버전의 TensorFlow에 적용됩니다. 이전 TensorFlow 출시에 사용할 CUDA ... www.tensorflow.o

[numpy] axis = -1 이란? [내부링크]

#numpy #python #tensorflow numpy를 잘 사용하기 위해서는 축(axis)에 대한 개념이 필요하다. 축은 잘 알겠으나 axis = -1은 어디인가?라는 질문에 대한 대답은 다음과 같다. '해당 np.array의 마지막 축을 의미한다.' 예를 들어, (13,62,80,300)의 shape을 가진다고 치면, axis = 0 의 값은 13 axis = 1 의 값은 62 axis = 2 의 값은 80 axis = 3 의 값은 300 이를 반대로 표현하면, axis = -1 의 값은 300 axis = -2 의 값은 80 axis = -3 의 값은 62 axis = -4 의 값은 13 위와 같이 표현할 수 있다.

[python] 한글 인코딩 byte 변환 (encode, decode) [내부링크]

#python #한글인코딩 #encode #decode #이진 안녕하세요 오늘은 python으로 한글의 인코딩 타입을 byte로 변환하는 방법을 가지고 왔습니다. encode() 함수와 decode() 함수를 통해 변환할 수 있습니다. encode() 함수는 글자를 byte로 바꿔주고, decode() 함수는 byte를 글자로 바꿔줍니다. a = '가' a = a.encode('euc-kr') print(a) # b'\xb0\xa1' a = a.decode('euc-kr') print(a) # '가' a = '가' a = a.encode('utf-8') print(a) # b'\xea\xb0\x80' a = a.decode('utf-8') print(a) # '가' 한글 인코딩에 관련해서 더 많은 설명은 아래 링크에서 확인해주세요. 한글코드 (ks완성형, cp949, utf-8) 인코딩 & 디코딩 hyejinwon.github.io

[git] git으로 백업하기 [내부링크]

#github #git #백업 안녕하세요. git으로 백업하는 방법에 대해 작성해보려 합니다. 우선 git의 로그인을 하시고, 'New repository'를 눌러주세요 그 다음에는 레포지토리에 원하시는 이름을 넣으셔서 생성하시면 됩니다. 그리고, 여러분이 백업하고 싶은 자료가 담긴 컴퓨터에서 터미널을 여세요. $ git init # .git이라는 폴더가 생성됩니다. $ git add %%% # 백업하고 싶은 자료인 %%%를 git에 넣어주세요 $ git status # 현재 어떤 자료가 .git에 올라갔는지 보여줍니다. $ git commit -m 'first commit' # 커밋을 하고, 메세지는 first commit으로 보냈습니다. $ git remote add origin @@@ #위의 주소와 같은 형식을 @@@에 넣어주세요 $ git remote -v # 잘 올라갔는지 확인해봅시다. $ git push -u origin master # 에러가 안생겼다면 제대로 잘 올라간

[git] reset error [내부링크]

#github #git 안녕하세요 git에 자료를 push하려는 도중 에러가 발생하면 commit을 취소하여 해당 파일을 빼고 다시 commit하면 됩니다. 그때 사용되는게 'reset'인데요. 저는 파일의 사이즈가 커서 에러가 발생했습니다. 이렇게요! 이를 해결하기 위해서 둘 중 하나를 터미널에 작성하시면 됩니다. 가장 마지막에 커밋한 것을 제거하는 명령어 입니다. $ git reset HEAD^ $ git reset HEAD~1 하지만 저처럼 'fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree.' 위의 에러가 발생한다면 이 해결방법이 큰 도움이 됐습니다. 이와 같이 터미널에 작성해주시고, 다시 커밋 -> add -> push 해주시면 깃에 제대로 올라가는 것을 확인할 수 있습니다. 해당 글에서 명령어에 대한 설명이 자세히 나와있으니 참고하시면 좋겠습니다. Git repository

[ubuntu] 우분투 ssd mount 하기 [내부링크]

#우분투 #ssd #mount 안녕하세요 우분투에서 ssd 장착한뒤 시스템에서 mount하는 방법 알려드리겠습니다. 일단 제 우분투 환경은 '16.04 LTS' 입니다. # 디스크의 상태 확인 sudo fdisk -l /dev/nvme0n1 이 새로 mount할 하드입니다. 현재 디스크의 상태 확인 sudo fdisk /dev/nvme0n1 #을 치시고 아래와 같이 순서대로 눌러주세요 (n, p, w) 새로 mount한 디스크를 초기화 합니다. /dev/nvme0n1p1 의 uuid와 type을 복사하시고 그전에 마운트를 할 폴더를 하나 생성하세요. mkdir @마운트할 폴더@ 아래와 같이 빔을 열어서 복사하신 정보를 넣어주시면 되요 sudo vim /etc/fstab 저는 'UUID=eb3758e1-849c-4f47-8003-fe6cd5c2ec37 마운트할 폴더 ext4 errors=remount-ro 0 1'로 작성했습니다. sudo mount -a df -h 제대로 따라오셨다면

[python] ModuleNotFoundError: No module named 'numpy.random._pickle' 에러 해결 [내부링크]

#gensim #numpy #python #error 안녕하세요 오늘은 python에서 나타나는 에러 해결법을 들고왔습니다. 'ModuleNotFoundError: No module named 'numpy.random._pickle'' 에러인데요. 이 에러의 발생원인은 간단했습니다. 바로 numpy의 version이 안맞았기 때문입니다. 저의 경우에는 서버에서 돌린 word2vec.bin 파일을 로컬 컴퓨터로 데리고 와서 돌리려고 할때 나타났습니다. 한번 확인해 보니, 서버의 numpy version 은 1.18.1 인 반면에 로컬 컴퓨터의 버전은 1.16.5 였습니다. 그래서 numpy version을 1.18.1로 변경하고나니 잘 돌아갔습니다! # numpy install pip3 install numpy # 최신버전 설치 pip3 install numpy==1.18.1 # 1.18.1로 설치 감사합니다.

[ubuntu] 마운트한 하드 권한 얻기 및 사용하기 [내부링크]

#ubuntu #mount #하드마운트 #우분투 #사용권한 #우분투마운트 #ssd마운트 안녕하세요 저번에 마운트한 하드를 사용하려고 보니 사용권한이 없어서 안되더라구요 이 문제를 해결하는 방법은 명령어 몇개만 치시면 됩니다. 일단 마운트 하신 폴더로 들어갑니다. $ cd <마운트하신 폴더명> $ sudo chown 계정이름:계정이름 . $ cd ../ $ chmod +w ./마운트하신 폴더명/ 아래와 같던 접근권한이 다음과 같이 변하게 되면서 쓰기 권한이 생겼습니다 ㅎㅎ

[git] private <--> public 변경하는 방법 [내부링크]

#git #깃허브 #깃허브공개설정 안녕하세요 요즘 git을 사용하고 있는데 천천히 찾아가면서 알아가고 있습니다. 비공개로해서 repo를 만들어놨는데 공개로 변경하고 싶으신 경우에 해결방안 알려드리겠습니다. 우선 깃허브에 들어가시고, 변경하고싶은 repo에 들어갑니다. 'settings' -> 쭉 스크롤 내리기 -> 'Danger Zone' -> 'Change repository visibility' -> 'Change visibility' -> 원하시는 방법 누르기 -> 하단의 타이핑 치기 -> 확인 버튼 이렇게 하시면 변경하실 수 있어요!

[python] dictionary add [내부링크]

#python #dictionary #add 안녕하세요 오늘은 python dictionary 딕셔너리 값을 추가하는 방법 알려드리겠습니다. sample = dict() # dictionary add sample['apple'] = 1 print(sample) #결과 : {'apple':1} 딕셔너리에 값을 추가하는 방법은 다음과 같이 추가하시면 됩니다. 혹시 조건문을 주어서 딕셔너리를 업데이트 하고싶으시다면 sentence = 'abac' #예문 sample = dict() for i in sentence: if sample[i] in dict: sample[i] += 1 else: sample[i] == 1 다음과 같은 방법으로 사용하시면 되겠습니다~

[python] Counter 값 변경 [내부링크]

#python #Counter #value #change 안녕하세요 파이썬에서 counter를 사용하다보면 counter의 value값을 변경하고 싶으실 때가 있으실겁니다. 저역시 위와 같은 이유로 코드를 찾다가 만들어봤습니다. from collections import Counter s = '1234' Counter(s) #결과:Counter({'1': 1, '2': 1, '3': 1, '4': 1}) 기존의 카운터는 위와 같이 사용합니다. 딕셔너리형으로 만들어서 겉에 카운터를 씌우면 카운터형으로 변환이 됩니다. 이렇게 되면 counter에서 most_common을 사용할 수있더라구요! temp = dict() for i in Counter(s): if i == '1': temp[i] = 10 else: temp[i] = 1 Counter(temp) #결과:Counter({'1': 10, '2': 1, '3': 1, '4': 1}) 감사합니다.

[windows] windows cmd에서 파일 라인 카운트 [내부링크]

#windows #cmd #linux #wc 안녕하세요 오늘은 windows환경에서 파일 라인을 카운트하는 방법 알려드리겠습니다. 리눅스에서 파일 라인을 카운트 할때는 아래와 같이 사용합니다. $ wc -l FILE_NAME 윈도우 command에서 파일 라인을 카운트 할때는 아래와 같이 사용합니다. $ type FILE_NAME | find /v /c "" 감사합니다.

[python] os.system 을 통해 파이썬에서 .exe 파일 실행 [내부링크]

#python #os.system #exe 안녕하세요 오늘은 파이썬에서 .exe파일을 실행시키는 방법 알려드리겠습니다. import os os.system(FILE_NAME) 다음과 같이 실행시키면 파이썬 환경에서 exe파일을 실행시킬 수 있습니다.

[python] 외부 파일 읽기 및 파일 이름 변경 [내부링크]

#python #os #system #파일읽기 #파일이름변경 안녕하세요 오늘은 python에서 외부 파일 읽는 방법과 파일 이름 변경하는 법 알려드리겠습니다. import os file_list = os.listdir(PATH) #result : ['xaa', 'xab', 'xac'] 이번엔 파일 이름 변경하는 방법입니다. file_change = [os.rename(PATH+file, PATH+file+'.txt') for file in file_list] #result : ['xaa.txt', 'xab.txt', 'xac.txt'] os.rename함수를 통해서 변경할 수 있습니다. 감사합니다.

[python] os.system exe파일 yes or no 입력하기 [내부링크]

#python #os.system #file #input 안녕하세요 오늘은 python 에서 exe파일을 읽는데, 여기에 input으로 yes or no를 입력하는 방법 알려드리겠습니다. 이 부분은 리눅스 terminal이나 윈도우 cmd에서도 쓸수 있습니다!! 기존 cmd나 terminal을 사용하면 하단과 같이 출력되고 사용자의 입력을 기다립니다. $ overwrite or not? <y or n> 이와 같은 경우 사용자가 'y' 나 'n' 을 입력해야하는데요. 우선 exe 파일을 파이썬을 통해서 읽은 상태에서 다음과 같이 사용자의 입력을 받는다고 가정합시다. import os os.system('FILE_NAME.exe') 위와 같은 경우는 기존의 방법으로 파이썬을 사용해서 exe파일을 실행시키는것이죠. 여기에 echo문을 추가하게되면 사용자의 입력을 넣을 수 있습니다. import os os.system('echo y | FILE_NAME.exe') 만약 여러개의 입력을 넣어

[c언어] command 에서 compile하기 [내부링크]

#c언어 #cmd #compile c언어를 컴파일할 때 대부분 visual studio를 통해서 작업 많이 하실텐데요. 이를 cmd에서 컴파일하여 실행파일 만드는 방법 알려드리겠습니다. $ gcc FILE_NAME.c -o FILE_NAME 이렇게 작성하시면 FILE_NAME.c가 FILE_NAME.exe로 생성됩니다. 이렇게 생성된 실행파일로 코드 작성하시면 되겠습니다!

[python] pickle을 사용하여 dictionary save & load [내부링크]

#python #dictionary #save #load python의 딕셔너리 dictionary을 통해 작업할 일이 많습니다. 하지만 dictionary로 생성한 데이터를 매번 코드를 실행할때 마다 dictionary를 만들기는 힘들죠 이를 해결하기위해 dictionary를 저장하고, 불러옵니다. 함수는 아래와 같고, pickle_name으로 dictionary를 저장합니다. import pickle def savepickle(pickle_name, data): with open(pickle_name, 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL) def loadpickle(pickle_name): with open(pickle_name, 'rb') as f: data = pickle.load(f) return data 하드코딩하지 않고 사용할 수 있는 방법입니다.

[python] TypeError: unhashable type: 'list' [내부링크]

#python #error #typeerror 해당 에러는 딕셔너리의 key값에 list자료형을 넣으려는 시도하는 경우에 발생합니다. a = {['a']:3, 'b':1} --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-28-d713cc1dd0b7> in <module> ----> 1 a = {['a']:3, 'b':1} 2 print(a) TypeError: unhashable type: 'list' 다음과 같이 key부분에 list가 들어가지 않게 수정해주면 됩니다. a = {'a':3, 'b':1} print(a)

[python] regex 한글 및 아스키 범위 [내부링크]

#python #regex #한글 #acsii 안녕하세요 오늘은 python 에서 regex를 사용해서 한글과 아스키 범위를 잡아보겠습니다. import re def check_hangul(word): return re.match('.*[ㄱ-ㅎㅏ-ㅣ가-힣]+.*', word) def check_ascii(s): #return True/False return all(ord(c) < 128 for c in s) 위의 함수를 사용하게 되면 문장에서 한글이 들어가면 True를 반환하게 됩니다. s = '안녕하세요' if check_hangul(s): print(True) else: print(False) check_ascii함수를 사용하면 문장에서 아스키 코드 범위에 해당하는 단어가 들어가면 True를 반환합니다. s = 'abc02' if check_ascii(s): print(True) else: print(False) 아스키 코드에 해당하는 범위는 하단의 url에 들어가보시면 좋을듯

[python] dictionary split by value [내부링크]

#python #dictionary #split 안녕하세요 오늘은 python에서 dictionary를 value값을 기준으로 쪼개는 방법을 알려드리겠습니다. python으로 작업하다보면 딕셔너리를 많이 사용하게 되는데요. 본인이 원하는 key & value만 넣고 싶은 경우도 많이 생길것 같습니다. data = {"FP3": 1, "FP4": 2, "X": 3, "Y": 4, "Foo": 5} print('before : ',len(data)) # before : 5 data2 = {key: data[key] for key, value in data.items() if value >= 3} print('after : ',len(data2)) # after : 3 print(data2) # {'X': 3, 'Y': 4, 'Foo': 5} {key: data[key] for key, value in data.items() if value >= 3} 바로 이 부분이 dictionary를

[python] python 2.x vs 3.x range 함수 차이 [내부링크]

#python #range 안녕하세요 깃허브에 있는 코드를 살펴보던 중 코드가 이상해서 살펴보니, python 버전 차이로 인한 것이더라구요. 제가 이상하다고 느낀 부분은 이 것인데요. #python2.x d = range(4) d = d + range(3) 위의 코드는 python2.x 에서 지원되는 코드 입니다. 보시면 뭔가 이상함을 느끼실까요? 저는 python3.x 버전을 사용하는데요, 보면서 느낀건 'range함수끼리 덧셈이 되나?' 싶더라구요 그래서 확인해보니, 역시나 에러(TypeError: unsupported operand type(s) for +: 'range' and 'range')를 내뱉었습니다. 하지만 위의 코드의 결과는 다음과 같습니다. #python2.x d = range(4) d = d + range(3) # [0, 1, 2, 3, 0, 1, 2] 위와 같이 range + range를 실행하기 위해서, python3.x 에서는 다음과 같이 실행하면 됩니다

[python] gensim word2vec/fasttext bin file convert to txt file [내부링크]

#python #word2vec #gensim #binaryfile #textfile 안녕하세요 오늘은 자연어처리에 사용되는 라이브러리 중에서 gensim의 word2vec을 사용할때, bin 파일을 txt 파일로 변경하는 방법 알려드리겠습니다. import gensim model = gensim.models.KeyedVectors.load(WORD2VEC_BINARY_FILE) #put your w2v.bin file name model.wv.save_word2vec_format(WORD2VEC_TEXT_FILE) #put your w2v.txt file name 변경하는 코드는 다음과 같고, word2vec과 fasttext 둘 다 적용가능합니다. 이렇게 코드를 돌리게 되면, word2vec.bin 파일이 word2vec.txt 파일로 변환하게 됩니다. 감사합니다.

[python] SyntaxError: Non-ASCII character '\xed' in file [내부링크]

#python #encoding #error 안녕하세요 구글링 조금만 해도 해결방안을 바로 알아낼 수 있는 이 에러에 관한 것을 저도 포스팅하려 합니다 ㅎㅎㅎ 에러는 다음과 같습니다. SyntaxError: Non-ASCII character '\xed' in file 이 에러는 코드 내에 한글이 들어간 경우에 발생합니다. 이를 핸들링하기 위해서는 간단하게 코드 위에 한줄만 적으시면 됩니다. # -*- coding: utf-8 -*- 위의 코드를 여러분께서 에러가 발생한 파일 제일 위에 첫번째 줄에 작성해주시면 해결됩니다! 감사합니다.

[python] gensim word2vec 사용법 [내부링크]

#python #gensim #word2vec 자연어처리에서 제일 처음으로 단어벡터를 만들때 많이들 사용하시는 라이브러리인 gensim에 대해 알려드리려 합니다. gensim 의 공식 문서는 https://radimrehurek.com/gensim/ 입니다. Gensim: topic modelling for humans Efficient topic modelling in Python radimrehurek.com 단어를 벡터로 표현하는 방법은 gensim에서 word2vec, fasttext, glove 등 을 제공합니다. 여기서 저희는 word2vec 사용법을 배워보겠습니다. 우선 gensim을 설치하셨다는 가정하에 진행하겠습니다. import gensim with open('./TRAIN_CORPUS.txt','r') as f: fline = [i.strip().split() for i in f.readlines()] #word2vec model create model = gen

[python] used word2vec, fasttext C source file [내부링크]

#word2vec #fasttext 단어를 벡터로 표현하는 방법은 다양합니다. 그중에서 대표적으로 많이 사용하시는 것이 gensim일것이라고 생각됩니다. 오늘은 gensim외에 단어 벡터를 사용하는 방법을 알려드리려 합니다. word2vec Google Code Archive - Long-term storage for Google Code Project Hosting. Tool for computing continuous distributed representations of words. Introduction This tool provides an efficient implementation of the continuous bag-of-words and skip-gram architectures for computing vector representations of words. These representations can be subsequently used in many nat

[python] TypeError: 'dict_items' object does not support indexing [내부링크]

#python #dictionary #indexing #pythonerror 안녕하세요 오늘은 파이썬에서 딕셔너리를 사용할 때, indexing으로 접근가능한 방안 알려드리겠습니다. a = '안녕하세요' dictionary = dict() for i in a: if i in dictionary: dictionary[i] += 1 else: dictionary[i] = 1 print(dictionary) #{'안': 1, '녕': 1, '하': 1, '세': 1, '요': 1} 다음과 같이 딕셔너리를 만들었다고 가정합니다. 그럼 여기서 이제 리스트처럼 인텍싱을 사용해서 접근하고 싶으면 이렇게 타이핑 치시겠죠. b = dictionary.items() print(b[0]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'dict_items' object is not subscriptabl

[python] TypeError: 'NoneType' object is not subscriptable [내부링크]

#python #error #None 안녕하세요 오늘 발생한 에러는 TypeError: 'NoneType' object is not subscriptable 인데요. 이 에러가 발생하게 된 이유는 'None'타입인 값에 index로 접근하려해서 발생했습니다. a = None print(a[0]) TypeError: 'NoneType' object is not subscriptable 위와 같은 에러가 발생하게 되죠. 이를 해결하기 위해서는 a에 None말고 리스트나 문자열을 넣어주시면 됩니다. 여러분의 코드에 따라 수정해야할 것이 다를것으로 보입니다. 감사합니다.

[python] string index find vs index [내부링크]

#python #string #index #find 안녕하세요 오늘은 python에서 string의 index를 찾기위해 사용되는 함수 'index' 와 'find'의 차이를 작성하려 합니다. 사용되는 이유는 둘 모두 문자열에서 원하는 단어의 index를 찾기 위해서입니다. a = '안녕 반가워' a.index('반') # 3 a.find('반') # 3 또는 이렇게 시작 위치를 지정할 수도 있습니다. a = '안녕 반가워 반은 어디니?' a.index('반', 5) # 7 a.find('반', 5) # 7 둘이 매우 비슷해 보이지만 없는 단어를 찾으려 할때, 차이점이 나타납니다. index는 없는 단어를 찾을 때, 에러를 발생하는 반면에, find는 -1을 리턴합니다. a = '안녕 반가워' a.index('하') # ValueError: substring not found a.find('하') # -1 감사합니다.

[python] matplotlib 한글 깨짐 및 마이너스(-)기호 깨짐 [내부링크]

#python #matplotlib #한글깨짐 #마이너스깨짐 #ubuntu jupyter notebook 환경에서 matplotlib를 보기 편해서 많이들 사용하죠. jupyter notebook에 한글이 기본으로 잡혀있지 않아서 별도로 설정해줘야 합니다. 저는 ubuntu 16.04 운영체제 환경 기준으로 설명드리겠습니다. ubuntu 에는 기본적으로 나눔폰트가 설치되어 있습니다. 만약 없으시다면 별도로 설치하시면 됩니다. ls -l /usr/share/fonts/truetype/nanum/ -rw-r--r-- 1 root root 4184028 10월 3 2014 NanumBarunGothic.ttf -rw-r--r-- 1 root root 4413912 10월 3 2014 NanumBarunGothicBold.ttf -rw-r--r-- 1 root root 4343844 10월 3 2014 NanumGothic.ttf -rw-r--r-- 1 root root 4288380 10

[python] Segmentation fault (core dumped) [내부링크]

#python #pytorch #transformers Segmentation fault (core dumped)와 같은 에러는 C에서 주로 포인터를 사용할때, 허용되지 않은 메모리 부분에 접근하려할 때나, 허용되지 않은 방법으로 메모리를 접근하려할 때 발생하는 에러이다. 나는 python환경에서 transformers를 사용할 때, 모델을 불러오는 과정에서 에러가 발생했고, Segmentation fault (core dumped)뿐만 아니라, Illegal instruction (core dumped)도 번갈아서 발생했다. 이를 해결하기 위해서 구글링을 해보니, sentence piece의 버전을 0.1.91로 낮추면 에러가 잡힌다는 말을 보게 되었다. 놀랍게도, 성공적으로 돌아간다. pip install sentencepiece==0.1.91

[python] bert embedding 사용하기 [내부링크]

#python #bert #embedding bert embedding을 사용하기 위해서 구글링 하던중, 다양한 에러를 만났지만 해결해낸 과정을 작성해보고자 한다. 1. hugging face의 transformers의 버전 차이 pip install transformers 여러분의 python버전에 따라 설치되는 transformers의 버전이 다르다. 저는 python3.5에서는 transformers 2.x까지만 설치되는 까닭에 TypeError: 'BertTokenizer' object is not callable 이런 에러를 만나게 되었다. python3.6이후에는 transformers 3.x가 설치되었고, 위의 에러는 해결할 수 있게 되었다. 2. output hidden state값 가져오기 대부분의 블로그는 bert의 'bert-base-uncased' 모델을 사용했다. 내가 하고 싶었던 부분은 한국어를 다루기 위해 bert를 사용하는 것이라 적합하지 않았다. 따라서

조경현 교수님의 강의파일 [내부링크]

#조경현 #nlp #nyu 조경현 교수님께서 2016년도 뉴욕대학교에서 강의하신 강의파일과 강의영상 1시간짜리를 올려주셨습니다. Lecture note <Brief Introduction to Machine Learning without Deep Learning> - Kyunghyun Cho This past Spring (2017), I taught the undergrad <Intro to Machine Learning> course. This was not only the first time for me to teach <Intro to Machine Learning> but also the first time for me to teach an undergrad course (!) This course was taught a year before by David Sontag who has now moved to M... sites.google.com 블로그에 들어가시면 많은 도

[python] json dump 한글 깨짐 [내부링크]

#python #json #dump json file을 읽어들어오는데는 문제가 없었지만, dump하는 과정에서 한글이 유니코드로 보이는 문제가 있었다. import json data = json.load(file) print(json.dumps(data)) #{word:'w\u3141'} 이를 해결하기 위해 ensure_ascii=False 을 집어넣으니 한글이 제대로 보였다. import json data = json.load(file) print(json.dumps(data, ensure_ascii=False)) #{word:'한글'}

[python] ModuleNotFoundError: No module named 'tensorflow.contrib' [내부링크]

#python #tensorflow ModuleNotFoundError: No module named 'tensorflow.contrib' 이 에러는 인터넷에서 가지고 온 코드에 tensorflow.contrib를 사용하려할 때 발생했다. 이를 해결하기 위해서, 찾아보니 tensorflow version 차이 때문이라는 답을 얻었다. 1.14버전까지만 지원한다는 것!! 따라서, 버전을 낮추면 해결된다. pip install tensorflow==1.14 #cpu version pip install tensorflow-gpu==1.14 #gpu version

[python] RuntimeError: Given input size: . Calculated output size: . Output size is too small. [내부링크]

#python #pytorch 오늘의 에러 'RuntimeError: Given input size: (256*100*20). Calculated output size: (256*0*0) . Output size is too small.' 괄호에 들어간 숫자는 여러분의 input shape에 따라 달라질듯 에러 발생원인 input size가 kernel 에 비해 작으면 발생했음 해결방안 input shape을 늘리거나, pooling layer의 kernel size을 줄이면 해결

[python] RuntimeError: mat1 dim 1 must match mat2 dim 0 [내부링크]

#python #pytorch #cnn 오늘의 에러 'RuntimeError: mat1 dim 1 must match mat2 dim 0' 에러 원인 cnn network에서 nn.Linear()를 통과할 때, input shape이 nn.Linear()의 입력 shape과 다를 때, 발생 해결 방안 nn.Linear layer를 통과하기 전에 shape을 찍어보고 nn.Linear의 shape과 같은지 확인하기

[pytorch] ValueError: Expected input batch_size (_) to match target batch_size (_) [내부링크]

#python #pytorch #RNN 안녕하세요 오늘의 에러는 ValueError: Expected input batch_size (_) to match target batch_size (_) 이고 발생 원인과 해결 방안을 알아보겠습니다. 발생원인 저의 경우에는 input size가 3차원이고, [배치, 문장길이, 사이즈]였는데요. 여기서 문장길이가 지정된 모델의 사이즈랑 안맞아서 발생했습니다. 즉, 모델에서 요구하는 2차원의 값은 20이었는데, 문장길이가 19였던 문제입니다. 해결방안 이를 해결하기 위하여 입력값의 shape를 확인해 보면서 어디서 틀어지는지 확인하는게 가장 좋았습니다. 이런 함수를 하나 써도 금방 잡힐 것 같네요. if ( (target.shape[0],target.shape[1]) != (2,20)): print('error') print(source.shape) print(target.shape)

[KenLM] KenLM 설치 방법 [내부링크]

#python #kenlm 안녕하세요 올해의 마지막 포스팅은 KenLM 설치 방법입니다. 본 포스팅은 우분투 환경을 기준으로 합니다. 박사과정 중에서 최적화만 하셔서 만들어낸 결과물 이라고도 하죠 ㅎ 설치방법은 공식 홈페이지에도 나오지만 자세하게 적혀있는 곳을 찾아서 한글로 번역하였습니다. 공식사이트 kpu/kenlm KenLM: Faster and Smaller Language Model Queries. Contribute to kpu/kenlm development by creating an account on GitHub. github.com 참고한 사이트 kmario23/KenLM-training Training an n-gram based Language Model using KenLM toolkit for Deep Speech 2 - kmario23/KenLM-training github.com 1. 설치 준비사항 $ sudo apt-get install build-ess

[ubuntu] 자주 쓰는 명령어 정리 [내부링크]

#ubuntu #terminal #command 1. 파일 찾기 ls -al | grep '.*.txt$' #.txt로 끝나는 파일 찾기 ls -al | grep 'KCC.*' #KCC가 파일명에 들어가는 파일 찾기 ls -alR | grep '.*.txt$' #.txt로 끝나는 파일을 하위 폴더에서 찾기 2. 두 파일 간의 다른점 찾기 diff a.txt b.txt vim a.txt :diffs b.txt 3. 파일 변경, 삭제, 이동 cp a.txt b.txt # copy a.txt file to b.txt mv a.txt b.txt # move a.txt to b.txt 덮어쓰기 mv a.txt ./data/a.txt #move a.txt to data folder 파일 이동 rm a.txt # delete a.txt 4. 파일 라인, 단어, 음절 개수 wc a.txt #result : 문장수, 단어수, 음절수

[pytorch] ERROR: Command errored out with exit status 1: [내부링크]

#python #pytorch #fairseq fairseq라는 툴을 요즘 사용중이다. 로컬에서는 잘 설치되지만 가상환경에서는 아래와 같은 에러가 발생했다. WARNING: The user site-packages directory is disabled. error: can't create or remove files in install directory The following error occurred while trying to add or remove files in the installation directory: [Errno 13] Permission denied: '/usr/lib/python3.6/site-packages' The installation directory you specified (via --install-dir, --prefix, or the distutils default setting) was: /usr/lib/python3.6/site-packa

[ssh] WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! [내부링크]

#ssh #error 위의 에러는 RSA 공유키가 충돌되어 발생한 에러이다. 발생원인 기존에 IP 203.000.000.77로 접속한 적이 있는 상태에서, 다른 IP가 203.000.000.77 변경되어서 접근하려할때 발생 즉, 원래 203.000.000.77인 IP 와 RSA를 공유했는데, 시간이 지나면서 다른 IP가 203.000.000.77를 가지고 있는 상태로 변경되면서, 기존의 RSA와 현재 RSA가 달라서 발생하는 에러임, 해결방안 ssh-keygen -R 203.000.000.77 위의 command를 치고, 다시 접속하면 해결됌!

sparse vector란? [내부링크]

정의 원핫인코딩과 같이 벡터의 많은 부분이 0으로 채워진 벡터 원핫인코딩이란? (one-hot encoding) 단 하나의 1과 수많은 0으로 표현된 인코딩 방식 예시 단어 원핫벡터(one-hot vector) 강아지 0,0,0,0,1 개 0,0,0,1,0 고양이 0,0,0,1,1 단점 원핫인코딩의 차원은 전체 어휘의 개수가 되고, 전체 어휘의 개수가 많아 질 수록 차원이 엄청나게 커지게 된다. sparse vector의 단점 앞선 원핫인코딩의 단점과 같이, sparse vector(희소 벡터)는 벡터간 연산시 결과값이 0이 된다는 점이다. 쉽게 이야기 하면, 강아지랑 개의 유사도는 높지만 계산을 진행해보면 결과값이 0이 나온다는 이야기이다. 또한, '차원의 저주'라는 단점을 가진다. 차원의 저주란? 높은 차원에 비해 들어있는 정보가 매우 낮은 밀도로 퍼져있어 빈 공간이 많은 경우 이러한 문제는 머신러닝에서 큰 단점으로 작용함 예시), 3000차원에서 one-hot vector로는

[python] AttributeError: 'module' object has no attribute 'generate_tokens' [내부링크]

#python #error 오늘의 에러 AttributeError: 'module' object has no attribute 'generate_tokens' (AttributeError: module 'tokenize' has no attribute 'tokenize') 발생 원인 파이썬 파일 이름 중에서 tokenize.py를 가진 파일을 내가 생성했었고, 파이썬 모듈에서도 tokenize.py 모듈을 불러오는 함수가 있었던것, 즉, 파일 이름이 충돌되면서 내가 만든 파일을 사용하게 되었고, 에러가 발생하게 됨 해결 방안 import tokenize print(tokenize) #<module 'tokenize' from '/home/hyejin/.../tokenize.py'> 위와 같이 실행시켜보면 모듈의 위치가 존재하는 곳의 경로가 뜬다. 해당 파일의 이름을 변경시키면 에러없이 잘 돌아간다.

python3.7 install ubuntu 16.04 [내부링크]

#python #ubuntu #shell 오늘은 ubuntu 16.04의 파이썬 버전을 업그레이드 시켜줄껍니다. 아래와 같이 쉘을 작성하고, 실행시키면 설치가 완료 됩니다! vim install_python37.sh vim을 열어서 아래의 쉘을 작성해주세요! # Install requirements sudo apt-get install -y build-essential sudo apt-get install -y checkinstall sudo apt-get install -y libreadline-gplv2-dev sudo apt-get install -y libncursesw5-dev sudo apt-get install -y libssl-dev sudo apt-get install -y libsqlite3-dev sudo apt-get install -y tk-dev sudo apt-get install -y libgdbm-dev sudo apt-get install -y lib

[shell script] 쉘에서 source가 작동하지 않을 때 [내부링크]

쉘로 스크립트를 작성하시다 보면 실행을 시키죠! 여기서 저는 주로 'sh'를 사용해서 실행시켰는데요. source를 포함하는 경우에는 sh로 실행시키면 soure가 작동되지 않는 문제가 있었습니다. 이를 해결하기 위해서는 'bash'로 실행시키면 작동이됩니다! sh python_install37.sh -> bash python_install37.sh

[python] sys.args vs argparse [내부링크]

#python #sys #argparse 파이썬 파일에 인자를 준다면 여러분은 어떤 것을 사용하시려나요. 대표적으로는 sys.args 와 argparse 를 사용하실 것 같습니다. 이 둘은 비슷한것으로 보이지만 사실은 좀 다른 것 같아요. 그래서 오늘은 이 둘의 차이점을 보려고 합니다. Python sys.argv and argparse I have been looking for ways to add argument values to a script when I run it from the command line. The two packages I have found that seem to do this are sys.argv and argparse. I'd also like to be stackoverflow.com sys.args 이것은 command line 인자들을 간단하게 리스트로 받는 명령어 입니다. 리스트로 인자를 받기 때문에 해당 인자가 들어가는 위치를 기억하는 것이

how to make evaluation metric in GEC? [내부링크]

#precision #recall #evaluation #metric #deeplearning 본 포스팅은 아래의 논문을 발췌독 하여 GEC task에서 evaluation metric를 어떻게 구성하는지에 관한 부분만 작성되어있습니다. The CoNLL-2014 Shared Task on Grammatical Error Correction Hwee Tou Ng, Siew Mei Wu, Ted Briscoe, Christian Hadiwinoto, Raymond Hendy Susanto, Christopher Bryant. Proceedings of the Eighteenth Conference on Computational Natural Language Learning: Shared Task. 2014. www.aclweb.org sample sentence - There is no a doubt , tracking system has brought many benefits in

대칭이동, 평행이동 cost function [내부링크]

매번 헷갈리는 대칭이동, 평행이동 개념을 이번 기회에 바로잡기위해 작성한다. 대칭이동이란 - 점이나 도형을 한 점 또는 한 직선에 대하여 대칭인 점이나 도형으로 이동하는 것을 의미 ex. x축에 대한 대칭이동 : (x,y) -> (x,-y) y축에 대한 대칭이동 : (x,y) -> (-x,y) 원점에 대한 대칭이동 : (x,y) -> (-x, -y) 평행이동이란 - 좌표평면위의 임의의 점을 좌표축에 나란하게 이동시키는 것을 평행이동이라 한다. ex. 점 p(x,y)를 x축으로 a, y축으로 b만큼 평행이동시키게 되면 P′(x + a, y + b)로 옮겨지게 된다 좀 더 자세히 설명된 그림을 첨부한다. 출처 : https://pythonkim.tistory.com/28 딥러닝에서 cost함수를 열어 공부하다보면 이 개념이 나타난다. 이 그림을 cost함수와 엮어서 사용한다면, 아래와 같다. original : y = logX a. x축 대칭이동 => y = -logX b. y축 대칭이

[python] argparse multi-argument [내부링크]

#python #argparse 파이썬에서 argparse를 사용하는데, 한개의 값 말고 옵션값에 다른 값들을 넣고 싶었다. 그래서 구글링 해보니 아래와 같은 해답을 얻게 되었다. 해결방안 action='append', nargs='+' import argparse parser = argparse.ArgumentParser() parser.add_argument("--i", action='append', nargs='+') args = parser.parse_args() #실행결과 $ run_test.py -i input1_url input1_name input1_other_var -i input2_url nput2_name input2_other_var -i input3_url input3_name $ [['input1_url', 'input1_name', 'input1_other_var'], ['input2_url', 'input2_name', 'input2_other_var']

shell script set option [내부링크]

#shell #set #option shell을 통한 프로그래밍을 하다보니 재밌는 옵션이 있어서 기억하고자 작성한다. 바로 'set'인데, 여기서 -x와 -e에 관해 정리하려고 한다. #!/bin/bash set -e 위와 같이 사용하며 이 옵션은 스크립트 실행 중 오류가 발생하면 종료시키는 옵션이다. 둘러보다 보니, 이 옵션은 사용시 주의 해야한다고 한다. 그 이유는 명령어를 실행한 리턴코드가 0이 아니면 프로그램을 종료하게 만들기때문이다. 예를 들어 grep를 작성하여 작성된 스크립트에서는 반환값이 없는 경우에는 강제종료하게 만들어 버린다. 원래 의도한 바가 반환값 없을 때를 겨냥하고 다음 코드를 작성해 두었다면 문제가 될 여지가 있는 부분이다. 그래서 stackoverflow에서는 set -e보다는 trap 을 권유한다. #!/bin/bash set +e 위와 반대되는 내용으로는 set +e가 있는데, 이는 에러가 발생해도 계속 명령을 실행하도록 한다. 다음으로는 set -x이

[ubuntu] 우분투 움짤 만들기 [내부링크]

#우분투 #움짤 뭔가 ppt를 만들 때 실험 결과를 조금 더 멋스럽게 보여주고 싶어서 찾다 보니, 움짤을 생각해 내게 되었다. 우분투에서도 움짤을 만들 수 있을 지 궁금해서 찾아보니 역시 pip로 존재했다. 이름은 'peek'이며 설치는 터미널에서 간단하게 3줄이면 된다. sudo add-apt-repository ppa:peek-developers/stable sudo apt update sudo apt install peek -y 타이핑 해보면 '엔터'를 치라는 문구가 나오는데 그때 엔터를 누르면 다운로드가 이어진다. 이렇게 다운되었다면, win키를 누르고 'peek' 타이핑하면 된다. 그럼 우분투에서 움짤 만들기 끝!

[pytorch] squeeze, unsqueeze [내부링크]

텐서를 사용하다보면 텐서의 모양을 바꿔야 하는 경우가 생긴다. torch 에서는 이를 위하여 squeeze, unsqueeze를 제공한다. squeeze는 차원을 줄일때 사용하며, unsqueeze는 차원을 늘릴때 사용한다. 주의 : squeeze는 차원이 1인 경우에 해당하는 모든 차원을 줄여준다. unsqueeze는 특정 위치에 차원이 1인 경우를 추가한다. - 여기서 특정 위치의 시작은 0부터 시작하며, 앞에서 부터 올라간다. x = torch.zeros(1,1,32,32) x.size() #torch.Size([1, 1, 32, 32]) x = torch.squeeze(x) x.size() #torch.Size([32, 32]) x = torch.unsqueeze(x,0) x.size() #torch.Size([1, 32, 32]) 만약 특정 위치가 1이 아닌 경우에 차원을 줄이려고 하면, 결과는 변하지 않는다. x = torch.zeros(1,32,32) x = torch.

[python] NumPy array is not JSON serializable [내부링크]

#numpy #json 안녕하세요 오늘은 NumPy array is not JSON serializable 에러를 해결해 보겠습니다. numpy로 만들어진 array를 return하는 과정에서 return하는 부분이 딱 정해진 type이 있거나 코테를 푸는데 코테 문제의 답이 원하는 형식이 numpy ndarray가 아닐때 발생하는 것 같아요. 해결방안 에러가 난 ndarray에 .tolist()를 적용해 줍니다! import numpy as np a = [1,3] a = np.array(a) #list to ndarray a.tolist() # ndarray to list

[vim] vim window split [내부링크]

안녕하세요 vim에서 window split하는 방법에 대해서 알려드리려고 합니다. terminal을 사용하다 보면 vim을 사용하게 되는데, window창을 나눠서 작업하게 되면 훨씬 일의 효율이 올라가는 것을 느낄 수 있을 거에요. 아래처럼 ternimal에 command을 작성하고 나면 editor가 열리는데요. $ vim test.txt 그 상태가 새 글을 작성할 수 있는 상태입니다. i 를 누르고 입력을 하시면 글이 작성됩니다. 그리고, 오늘 포스팅의 목적인 window split하는 방법은 아래와 같이 작성하시면 됩니다. :sp <file_name> #가로로 나눠짐 :vs <file_name> #세로로 나눠짐 위의 명령어를 사용하면 창이 나눠지게 되는데요. vim은 마우스로 창 변경이 안됩니다. 그래서 키보드로 움직여 주셔야 해요. Ctrl+ww 컨트롤 키와 ww 즉, w를 두번 누르면 창간의 이동이 됩니다! 마지막으로 열린 창들을 모두 끄고 싶다면 아래와 같이 치면 vi

[python] zfill, rjust 문자열 앞에 원하는 문자 채우기 [내부링크]

#python #zfill #rjust 파이썬을 사용하다보면 문자열의 맨 앞에 원하는 문자를 넣고 싶은 경우가 생긴다. 단순히 '+'연산자를 사용해서 이어 붙일 수도 있지만, 정해진 길이가 들쑥날쑥하다면 함수를 사용하는 것이 편하다. 중요한건 위의 함수들은 모두 문자열에서 작동하는 것이기 때문에 출력도 문자열 이라는 것! 1. zfill # zero 를 채우는 함수 '1'.zfill(5) #'00001' '12'.zfill(3) #'012' '123'.zfill(5) #'00123' 2. rjust # 오른쪽에 원하는 문자열을 채우는 함수 # rjust(width, char) '1'.rjust(5, '0') #'00001' '12'.rjust(3, '0') #'012' 'abc'.rjust(5,'d') #'ddabc'

[pytorch] in-place-operation [내부링크]

In-place-operation : 값을 변경할 떄 copy와 같은 함수를 사용하지 않고도 바로 변경해버리는 함수 예를 들어, a=3 b=5 c = a + b 라고 가정하자 기존에는 a+b를 진행해도 a값은 3이고 b의 값은 5이다. 그러나 여기서 ' a.add_(b)'로 작성한다면 (a+b의 의미임) a의 결과값은 8이 된다. import torch a = torch.tensor(3) b = torch.tensor(5) c = a + b # c = tensor(8) # a = tensor(3), b = tensor(5) a.add_(b) print(a) # a = tensor(8), b = tensor(5) 기존 파이썬에서는 이와 같은 연산을 진행하려면 copy와 같은 것을 사용해야 하는데, 이를 대신해서 값을 바로 바꿀 수 있는 함수라고 생각하면 되겠다. 장점 : 메모리를 아낄 수 있다. c를 담을 그릇을 만들 필요가 없음! 단점 : 기존에 a가 가지던 값을 기억해야할 경우에는

Tensorboard 원격으로 열기 [내부링크]

#tensorboard #tensorflow #pytorch 서버환경에서 딥러닝 모델을 돌릴 때, 어느정도 수렴했는지 보기 위하여 tensorboard라는 것을 사용한다. 그러나 서버 환경에서는 웹으로 열어서 확인이 어렵기 때문에 원격으로 들어가서 봐야한다. 이를 해결하는 방법을 까먹지 않게 적어두려 한다. tensorboard 로그가 쌓이고 있는 서버에 아래와 같이 작성한다. <서버 terminal> $ tensorboard --logdir='로그 작성해둔 path' 그다음, 크롬창을 열어서 아래와 같이 작성한다. <로컬 크롬 url> http://서버ip:6006 아마 디폴트 값이 6006일텐데 서버의 사용자마다 포트번호가 다를 수 있으니 확인하시길! 만약에 위의 방식에서 접속할 수없다면, port forwarding을 진행해야 한다. <로컬 terminal> $ ssh -L 16006:localhost:6006 서버ID@서버ip 그 다음은 다시 크롬창을 열어서 url에 아래와

[pytorch] repeat() vs expand() [내부링크]

1. repeat() : 특정한 shape으로 텐서 값을 반복하여 채워주는 함수, expand()와는 다르게 tensor data를 복사해오는 성질이 있다. >>> x = torch.tensor([1, 2, 3]) >>> x.size() torch.Size([3, 1]) >>> x.repeat(4, 2) tensor([[ 1, 2, 3, 1, 2, 3], [ 1, 2, 3, 1, 2, 3], [ 1, 2, 3, 1, 2, 3], [ 1, 2, 3, 1, 2, 3]]) >>> x.repeat(4, 2, 1).size() torch.Size([4, 2, 3]) 주의 ! numpy.repeat 과는 다른 성질을 지니니 혼동하지 않도록 주의하라고 한다. 2. expand() : 위와 마찬가지로 특정 텐서값을 반복하여 생성하지만, 차원의 크기가 1인 경우에만 적용가능하다. repeat과의 차이는 원래의 텐서를 참조 하여 생성하기 때문에 원본이 바뀐다면 expand된 텐서도 바뀌게 된다. >>

[python] How to add virtualenv in Jupyter Notebook kernel? [내부링크]

오늘은 virtualenv를 jupyter Notebook의 Kernel에 추가하는 방법을 적어두려고 합니다. virtualenv는 리눅스 환경에서 작업을 할 때 버전 충돌을 막기 위해서 많이 사용하는데요. 기존에 구현해둔 모델(코드)의 version이 특정 version에서만 돌아간다면 더 필수적으로 사용해야 합니다. 저도 마찬가지로 virtualenv를 여러개 create해서 사용하고 있습니다. 하지만, local에서 jupyter를 사용한다면 default로 local이 잡혀서 virtualenv의 tensorflow나 torch가 import되지 않습니다. 그래서 이를 해결하려면 Jupyter Notebook의 Kernel을 추가해서 사용하면 됩니다. 사용법은 정말 간단하고, 이미 virtualenv를 가졌다는 전제하에 작성해봅니다. 1. 가상환경을 activate 합니다. source myenv/bin/activate 2. ipykernel을 설치합니다. pip instal

[linux] > 와 >> 차이 [내부링크]

리눅스에서 파일에 저장하는 기호로 '>'를 사용할 것이다. 하지만 '>>'도 있는데, 이를 잘 구분하여 사용해야 앞전의 파일이 날라가는 불상사는 피할 수 있을 것 입니다ㅜㅜ > : 파일을 새로 작성합니다. 기존에 파일이 존재한다면 '덮어쓰기'를 진행합니다. : python에서 file option에서 'w' 와 같습니다. >> : 파일의 뒤에 이어서 작성합니다. 기존에 파일이 존재한다면 '이어쓰기'를 진행합니다. : python에서 file option에서 'a'와 같습니다. 꼭 둘을 혼동하지 말고 사용하시길 바랍니다!!

[ubuntu] How to clean 'swap' memory [내부링크]

오늘은 컴퓨터 메모리의 swap을 지우는 방법을 작성해 보려고 합니다. 우분투 환경이고, shell script나 명령어로 가능한 방법이에요! 아래와 같이 terminal에 작성해 주시면 되는데요. 혹시 premission denied 가 뜬다면 sudo를 붙여주세요! $ swapoff -a && swapon -a 저는 자주 쓰기 때문에 shell로 작성두고 씁니당! 오늘도 감사합니다.

[python] sort, sorted 차이 [내부링크]

sort() t = [5, 2, 3, 1, 4] t.sort() print(t) # [1, 2, 3, 4, 5] - list 에 한정되며, return 값이 None이다. - 원본 리스트의 값을 변경한다. sorted보다 빠르다. sorted() t = [5, 2, 3, 1, 4] print(sorted(t)) # [1, 2, 3, 4, 5] print(t) #[5, 2, 3, 1, 4] - iterable 한 자료형(튜플, 리스트, 딕셔너리, 문자열)에 모두 사용가능하다. - return 값으로 정렬된 값을 내보낸다. - 원본 리스트 값이 변하지 않는다. c = ['ccc','aaaa','bb','ddddd'] sorted(c, key=len) #['bb', 'ccc', 'aaaa', 'ddddd'] c = ['ccc','aaaa','bb','ddddd'] c.sort(key=len) print(c) #['bb', 'ccc', 'aaaa', 'ddddd'] c = ['ade','c

How to get wikipedia corpus? [내부링크]

삽질하며 얻은 위키피디아 데이터를 얻어내는 방법을 정리한다. 1. 데이터 다운로드 Wikimedia Downloads Database backup dumps (current page) A complete copy of all Wikimedia wikis, in the form of wikitext source and metadata embedded in XML. A number of raw database tables in SQL form are also available. These snapshots are provided at the very least monthly and... dumps.wikimedia.org 위의 사이트에 들어가서 위키피디아 데이터를 다운로드 한다. 여기서 주의 할 점은 다양한 포맷으로 위키 데이터가 존재하는데, .XML 로 된 파일을 받아야 한다는 점이다. 나중에 이를 처리하는 파일에서 XML 파일만 처리하기 때문이다. 아래 그림과 같이 , XML이고,

Github Sorry, something went wrong. Reload? 해결 [내부링크]

깃에서 ipynb으로 저장된 글은 열어보려고 해도 위의 에러를 내뱉으며 잘 보여주지 않는다. 이를 해결하기 위해서는 아래의 url에 들어가서 보려고 하는 ipynb 파일의 주소를 넣으면 아주 깔끔하게 볼 수 있다. nbviewer nbviewer A simple way to share Jupyter Notebooks Enter the location of a Jupyter Notebook to have it rendered here: Go! Programming Languages IPython IRuby IJulia Books Python for Signal Processing O'Reilly Book Probabilistic Programming Misc Data Visualization with Lightning Interactive plots with ... nbviewer.jupyter.org 사용법도 어렵지 않으며, 위의 주소로 접속하면 아래와 같은 창이 뜬다. 여기서 창에

du 'Permission denied' 해결하기 [내부링크]

리눅스 환경에서 폴더별 디스크의 용량을 확인하고 싶을 때 ,du나 df를 사용한다. (주로 du사용, df는 전체 용량 나옴) du를 사용하면 permission denied가 나오는 경우가 있는데, 이를 해결하는 방법을 작성해두려한다. 우선 폴더별 용량 표시 방법 du -sh {원하시는 경로} 위와 같이 누른다면 폴더별로 쭉 돌아서 모든 파일의 용량이 나오고 마지막에 최종 현재 경로의 용량이 나온다.. 만약 경로에 1천개의 데이터/폴더 가 있다면 벌써 머리가 지끈해진다. 또한, permission denied도 만날 수 있는데 이를 해결하는 방안은 다음과 같다. 현재 폴더를 기준으로 용량 파악하는 방법은 다음과 같다. (permisstion denied도 피하고, 기다림 없는 방법) du -h --max-depth=1 2>/dev/null 그럼 permission denied로 고생하거나, du를 쳐서 마지막까지 기다리지 않아도 된다! reference [Linux] 폴더 용량 큰

[python] dictionary sort 하기 [내부링크]

파이썬 딕셔너리를 정렬하는 방법에 관해 작성하려 한다. 딕셔너리를 정렬할 때는 lambda를 사용해서 정렬하는데, 처음에는 이해하기 어렵겠지만 쓰다보면 이만한 방법이 없다. 아래와 같은 딕셔너리가 있다고 가정하자. 이를 key를 기준으로 내림차순 정렬 하려한다. a = {'a' : 1, 'b' : 2, 'c' : 3} sorted(a.items(), key=lambda x : x[0], reverse=True) # [('c', 3), ('b', 2), ('a', 1)] 이제 value 값을 기준으로 내림차순 정렬하는 방법 a = {'a' : 1, 'b' : 2, 'c' : 3} sorted(a.items(), key=lambda x : x[1], reverse=True) # [('c', 3), ('b', 2), ('a', 1)] value값의 길이를 기준으로 오름차순 정렬하는 방법 a = {1:'aaa',2:'bbbbb', 3 : 'cc'} sorted(a.items(), key=l

[git] github profile badge 만들기 [내부링크]

github profile을 Readme로 생성할 수 있다! 생성하게 되면 프로필의 옆에 생기게 된다. 여기서 badge를 달 수 있는데, 이를 생성하는 방법을 꽤나 찾다가 삽질로 얻어낸 방법을 작성하려 한다. 1. shields.io 에 들어간다. 2. your badge 에서 아래와 같이 'MESSAGE' & 'COLOR' 를 작성한다. (원하시는 메시지를 넣으시면 됩니다.) 3. Make Badge 를 누른다. 그럼 이런 창이 생길 건데, 여기 url을 복사해서 쓰면 된다. 4. 여기서 로고를 넣고 싶으면, simpleicons 에 들어가서 원하는 로고를 찾는다. 5. https://img.shields.io/badge/-Naver%20blog-brightgreen?style=flat-square& 에서 여러분이 찾으신 로고를 뒤에 연결시켜주면 되는데, 연결을 & 로 한다. 그럼, logo=Naver& 을 넣으시면 되고, 최종적으로 네이버 블로그 배지의 주소는 아래와 같다. (

[shell script] check file is exist [내부링크]

shell script에서 파일의 유무를 체크해야 할 경우가 더러 있다. 이를 위해서 다양한 옵션을 넣어서 확인할 수도 있지만, 주로 많이 사용하는건 -f 옵션일 것이다. (파일 유무체크함) 사용법은 아래 코드와 같고, 주의 할 점은 꼭 공백을 잘 넣어줘야 한다는 것이다..!! 공백을 안넣고 했다가 [: missing `]' 와 [-f: command not found 이런 에러를 만나게 되어서 삽질을,,,,ㅜㅜ 아무튼 그냥 아래의 코드를 그대로 복사하시는게 에러없이 잘 될것이다. if [ -f "$filename" ]; then echo "file exist" else echo "file not exist" fi -f 옵션 말고 다양한 것을 넣을 순 있지만, 그것은 아래 참고된 글을 확인해서 보시면 좋을 듯 싶다 shell script (bash) 에서 file 유무 체크하는 방법과 파일 존재 검사 옵션 (file exist check) shell script (bash) 에서 f

[python] copy dictionary key from other dictionary [내부링크]

파이썬에서 딕셔너리의 키를 다른 딕셔너리로 부터 copy하는 방법을 작성해두려 한다. 같은 딕셔너리 키를 가지지만, 새로운 딕셔너리를 선언할 때마다 if문을 사용해서 넣지 않아도 된다! 코드는 정말 간단한 한줄로 해결된다. NEW DICTIONARY = dict.fromkeys(YOUR DICTIONARY.keys(),[]) # 결과 # YOUR DICTIONARY = {1: [1,2,3], 2:['a','b'], 3:[0] } # NEW DICTIONARY = {1 : [], 2: [], 3:[]} YOUR DICTIONARY 가 다음과 같은 값들을 지녔다고 가정하면, 위의 코드를 실행시키게 된다면 YOUR DICTIONARY의 key는 그대로 유지된 채, value 값에는 빈 리스트가 들어가게 된다. 아주 유용하게 사용될 듯 싶다.

[python] How to subtract value in two dictionary [내부링크]

딕셔너리 2개의 value값의 차이를 계산하는 방법을 알아보자. 1. pythonic 한 방법 이 방법은 dictionary comprehension을 사용하는 방법이다. 제일 마지막줄이 핵심인데, 이를 차근차근 뜯어보면 아래와 같이 구동된다. 1. a의 key값을 loop를 통해서 순차적으로 얻어낸다. 2. a의 value값과 b의 value값의 차이를 구하여, 1의 key값을 기준으로 구해진 값이 value값이 되도록 한다. 3. 반복하여 새로운 dictionary c를 만들어 낸다. 여기서 get은 Key에 대응되는 Value를 돌려준다. 그리고 이를 뜯어보면 dictionary.get('키값', '디폴트값')을 의미하는데, 디폴트 값은 옵션이라 안넣어도 무관하다. 다만, 없는 key에 대한 접근이 나면 error가 나는데, 이를 디폴트 값으로 0이라고 넣어두면 에러없이 두 개의 딕셔너리 간의 value값의 차이를 구할 수 있다. a = {'a':3,'b':1} b = {'a'

한글코드 ks완성형, cp949, 유니코드 [내부링크]

한글 코드의 ks완성형과 cp949, 유니코드에 관한 글을 아래 링크에 작성해두었습니다. 기술 관련 글은 git blog에 작성하니 많이 방문해주세요. 한글코드 (ks완성형, cp949, utf-8) 인코딩 & 디코딩 hyejinwon.github.io

[python] raise warning [내부링크]

우리가 기본적으로 에러를 임의로 발생 시키거나 회피할 때는, try-except / raise / assert 등을 사용한다. 그러나 위의 함수를 만나게 되면 코드가 중간에 끊기게 된다. 이런 점을 피하기 위해서는 warning을 잘 사용하는 것도 방법이다. (물론 warning과 error의 경우가 다르긴 하다.) python에는 warning 라이브러리가 있다. 이를 사용하는 법에 대해서 알아보자. 간단하게 import해주면 되는데, 여기에 함수가 여러개 있지만 가장 기본적인 warn을 사용한다. import warnings warnings.warn('warning message', UserWarning) 결과 test.py:4: UserWarning: warning message warnings.warn('warning message', UserWarning) 이와 같이 작성한다면 에러를 terminal에 띄울 것이다. 근데 뒤에 'UserWarning'은 python docu

[python] raised warning make one line [내부링크]

앞전에 포스팅한 warning에 대해서 조금 더 찾아보니 한줄로 에러를 발생시킬 수 있다는 것을 알게 되었다. 이전의 warning은 아래와 같이 2줄로 print되지만, test.py:4: UserWarning: warning message warnings.warn('warning message', UserWarning) 두 번째 줄을 제거하고도 warning을 print할 수 있는 방법을 가져왔다. 우선 결과를 먼저 보면 아래와 같이 출력된다. test.py:4: UserWarning: warning message 그럼 이렇게 만드는 코드를 아래에서 설명하겠다. 바로, formatwarning을 사용하는 것이다. def warning_on_one_line(message, category, filename, lineno, file=None, line=None): return '%s:%s: %s:%s\n' % (filename, lineno, category.__name__, mes

[pytorch]TypeError: '<' not supported between instances of 'Example' and 'Example' [내부링크]

에러 : TypeError: '<' not supported between instances of 'Example' and 'Example' 발생 원인 : torchtext sort 옵션의 기본값이 True이었고, 배치에 해당하는 값을 정렬하는 과정에서 생긴 에러이다. 처음에는 iterator 데이터가 망가진줄 알고 놀랐는데 그건 아닌것 같았다. 해결 방안 : torchtext의 iterator를 split할 때, sort옵션을 False로 명시해주었다. 기존 train_iter, valid_iter, test_iter = data.Iterator.splits((train_data, valid_data, test_data),\ batch_size=batch_size, device=device) 변경 train_iter, valid_iter, test_iter = data.Iterator.splits((train_data, valid_data, test_data), \ batch_si

[pytorch] 네이버 영화평 감성분류 (LSTM, RNN) [내부링크]

pytorch로 네이버 영화평 (nsmc data)를 감성분류 하는 법을 알아봅니다. 전체 코드는 아래의 주소에서 보시면 더 편하게 보실 수 있습니다. (star 많이 눌러주세요~) HyejinWon/pytorch-nsmc-classification pytorch sentiment classification example used NSMC data - HyejinWon/pytorch-nsmc-classification github.com Dependency - pytorch - torchtext (0.9.0) - pandas - konlpy - sklearn 모델 layer는 lstm만 사용했지만, gru나 rnn으로 변경해도 큰 무리없이 작동 될거에요. import torch import torch.nn as nn import torch.optim as optim import pandas as pd from sklearn.model_selection import train_test

[shell] terminal 이 종료되어도 프로그램은 작동되게 하는 방법 (nohup) [내부링크]

딥러닝 모델을 학습시키다 보면, 로컬에 붙어서 학습시키기 보단 딥러닝 서버에 붙어서 작업하는 경우가 많다. 딥러닝 서버에 접근할 때, ssh 와 같은 방법을 사용하고, 만약, 로컬 컴퓨터를 꺼야하는 상황이 생긴다면 이제 눈앞이 아찔해진다.. (ssh로 접근해서 돌려놓은 코드도 꺼지기 때문) 이런 상황을 벗어나는 방법은 nohup이라는 명령어를 사용하는 것이다. 사용법 nohup [작동시킬 명령어] & 사용 예제는 다음과 같다. # example nohup python main.py & nohup ./shell.sh & 여기서 주의할 점이, shell script는 권한이 755 이상이어야 한다. 따라서, nohup을 하기 전에 chmod 755 shell.sh 를 해야한다. 뒤에 나오는 &는 프로세스를 돌리는 것이 background로 돌린다는 의미이다. 그래서, &를 넣게 되면 터미널 창에는 아무것도 안나오지만, jobs 나 bg 으로 확인해보면 실행 시킨 코드가 도는걸 확인할 수

[python] ParserError: Error tokenizing data. [내부링크]

오늘의 에러 : ParserError: Error tokenizing data. C error: Buffer overflow caught - possible malformed input file. 발생 원인 : pandas에서 read_csv 를 통해서 데이터를 읽는 과정에서 발생함. : 입력 데이터의 마지막 column이 \n으로 끝나거나 시작해서 발생했다. 나의 경우는 좀 특이했는데, \n은 제일 첫번째 column의 시작점에 들어가 있고, \r이 제일 마지막 column의 마지막에 들어가 있었다. 해결 방안 : 기존 read_csv에 line delinetor를 넣어줌으로써 해결 #기존 data1 = pd.read_csv('./data.tsv', sep='\t') #해결 data1 = pd.read_csv('./data.tsv', sep='\t', lineterminator='\n') reference Error in Reading a csv file in pandas[CPar

[python] jupyter notebook 줄바꿈 [내부링크]

주피터 노트북을 통해서 과제를 하거나, 코드를 짜는 사람이 많을 것으로 보인다. 메모를 사용해서 작성을 하는데, 1개의 cell 에서는 엔터를 쳐도 하나의 단락으로 출력되는 문제가 있다. 입력 : 출력 : 이를 해결하기 위해서는 html tag를 하나 넣어주면 되는데, 바로 <br> 이다. 입력 : 출력 : 해결방안 : 문장 뒤에 <br> tag를 넣어줌

CLM vs MLM [내부링크]

BART paper에서 언급된 개념 CLM (Causal Language Model) : models the probability of a word given the previous words in a sentence, Trasformer Decoder part - 트랜스포머 디코더 부분과 같이, 모델이 이전 단어정보를 가지고 현재 단어를 예측하는 모델 MLM (Masked Language Model) : The masked language modeling objective of BERT. - BERT와 같이 입력을 마스킹 해서 예측하는 방법으로 학습하는 모델

[python] matplotlib plt google colab 한글 깨짐 [내부링크]

1. 아래와 같이 작성하여 셀을 실행한다. !sudo apt-get install -y fonts-nanum !sudo fc-cache -fv !rm ~/.cache/matplotlib -rf 2. 코랩의 런타임을 재시작한다. 3. 아래의 코드를 실행 한다. import matplotlib.pyplot as plt plt.rc('font', family='NanumBarunGothic') # 주의 2번을 실행한 뒤에 1번을 절대 실행시키지 마세요! 2번 -> 3번 이렇게 하셔야 합니다. 로컬 컴퓨터에서 matplotlib.pyplot 한글 깨짐 [python] matplotlib 한글 깨짐 및 마이너스(-)기호 깨짐 #python #matplotlib #한글깨짐 #마이너스깨짐 #ubuntu jupyter notebook 환경에서 matplotlib를 보기 편해... blog.naver.com

[pytorch] AttributeError: cannot assign module before Module.__init__() call [내부링크]

에러 : AttributeError: cannot assign module before Module.__init__() call 아래의 코드처럼 돌렸더니 에러가 발생했다. class CustomModule(nn.Module): def __init__(self): self.conv1 = nn.Conv2d(1, 20, 5) # Add key conv1 to self._modules self.conv2 = nn.Conv2d(20, 20, 5) 발생 원인 : Module을 만들고서 super class의 init을 호출하지 않아서 발생한다고 한다. 해결 방안 : super().__init__() 을 넣어준다. 아래와 같이 super(Module name, self).__init() 으로 하는 것도 좋다. class CustomModule(nn.Module): def __init__(self): super(CustomModule, self).__init__() # Initialize self

[python] requirements.txt 으로 패키지 설치하는 법 [내부링크]

가끔 깃으로 코드 전체를 받는다던가, 과제를 할 때 requirements.txt 라는 이름을 가진 파일을 볼 수 있다. 이런 파일에는 해당 코드가 돌아가는 패키지의 버전이 명확하게 적혀있는데, 이를 설치하는 방법은 다음과 같다. 1. 가상환경을 active 한다.(가상환경이 있을 시) 2. terminal에 작성한다. $ pip install -r requirements.txt 위와 같이 pip 한다면 패키지를 쭉쭉 설치하는 것을 볼 수 있다. 만약 에러가 난다면 해당 부분을 주석처리 '#' 하고 일단 다른 패키지를 다 설치하고, 나중에 stackoverflow나 google으로 검색해서 해결방안을 찾아야 할것이다...

CS231n assignment3 inline question1 GAN part [내부링크]

문제 : We will look at an example to see why alternating minimization of the same objective (like in a GAN) can be tricky business. Consider c(c,c)=ccf(x,y)=xy . What does mincmaxcc(c,c)minxmaxyf(x,y) evaluate to? (Hint: minmax tries to minimize the maximum value achievable.) Now try to evaluate this function numerically for 6 steps, starting at the point (1,1)(1,1) , by using alternating gradient (first updating y, then updating x using that updated y) with step size 11 . Here step size is the le

벡터(Vector)의 정의와 실좌표공간(Real corrdinate spaces) [내부링크]

본 포스팅은 Khan 수업을 기반으로 작성된 글입니다. Vector란 : 크기(magnitude) + 방향(direction) 을 동시에 나타낸다. : 크기만 주어진 경우에 vector라 부르지 못한다. 예를 들어, 5km 는 크기에 해당하고 동쪽 은 방향을 의미한다. 이 둘이 모두 합쳐 졌을 때, velocity라 부르고 이는 벡터라 명한다. 만약 크기와 방향이 같은 벡터가 있다면 이는 동일한 벡터이다. (초록색) 벡터는 column vector(열벡터)로 표현할 수 있다. Real coordinate spaces (실좌표공간) : n 차원 실수 공간을 의미 표현 방법 만약 R^2 라고 한다면 2차원적 실수공간을 의미한다. 위의 그림에서 열벡터 [3,4] 는 2차원 실좌표공간을 가진다. 여기서 R^2 는 분리해서 생각해볼 수 있는데, R 은 실수좌표공간을 의미하고, 2는 실수값을 가지는 모든 2-튜플을 의미한다. 튜플은 순서를 가지는 리스트로, 즉, 2개의 순서리스트를 의미한다.

Unit Vector(단위벡터)의 크기 구하기 [내부링크]

본 포스팅은 Khan의 선형대수를 토대로 작성된 포스팅입니다. boostcourse의 연습문제 단위벡터를 푸는데 배우지 않은게 나와서 당황했지만, Khan에는 있는 강의였다ㅎㅎ 혹시 막혀서 포스팅을 찾은거라면 아래 주소로 들어가서 강의를 듣고 와주세여 https://ko.khanacademy.org/math/precalculus-new/x9e81a4f98389efdf:vectors/x9e81a4f98389efdf:unit-vec/v/unit-vector-intro unit vector란 행 또는 열로만 움직이는 벡터를 의미한다. 즉, i = (1,0) j = (0,1) 이라는 의미다. 만약 2i라면 행으로 2칸 움직인다는 의미고, 3j라면 열로 3칸 움직인다는 의미다. 이제 연습문제에서는 unit vector의 크기를 구하라고 나온다. 구하는 방식은 다음과 같다. (네이버는 latex이 안맞아서 그림으로 첨부한다.) 이렇게 공부하고 나면 연습문제를 풀 수 있을 것이다..!!

[ubuntu] cp: omitting directory 'FOLDER NAME' [내부링크]

오늘의 에러 cp: omitting directory 'FOLDER NAME' 발생 원인 - cp(복사)를 하는데 폴더가 포함된 경우에 발생하였다. 해결 방안 -r 옵션을 넣어줌 $ cp -r ./data(복사대상) ../data(복사할 위치)

[python] chardet 문자열 인코딩 타입 확인하는 방법 [내부링크]

Python string encoding type check 파이썬에서 문자열 인코딩 타입을 확인하는 방법에 대해서 알아보자 어떻게 알아낼지 정말 많이 찾아봤는데 영어권은 인코딩에 대해서 별로 관심이 없는것 같았다. (구글링으로 안나옴,,,, 한국어로 쳐야 나오더라) (ascii랑 utf-8이면 다 되서 그런듯 싶다) 그래서 찾아낸 방법으로는 라이브러리 chardet를 사용하는 방법이다. 사실 터미널에서 file을 통해서 파일의 인코딩은 확인할 수 있지만, 내가 필요한건 파일이 아니라 파이썬에서 output으로 나오는 문자열의 타입이 궁금했다. 무튼 방법은 chardet 패키지를 사용하는 방법이다. 1. 설치 하기 $ pip install chardet 2. 사용하기 import chardet a = '안녕하세요'.encode() print(chardet.detect(a)) # {'encoding': 'utf-8', 'confidence': 0.9690625, 'language':

[python] 파이썬에서 커맨드 출력 가져오기 how to get shell output string in python [내부링크]

파이썬을 사용하다보면 커맨드에 직접 명령을 날리는 os 라이브러리를 사용할 때가 있다. 이때, shell을 사용해서 쉘이 잘 돌아갔는지 또는 결과문을 print해서 얻는다. 하지만 이렇게 얻은 print string은 terminal 에 결과를 출력해 주는 방식이라, python의 변수로 입력을 받고 싶으면 다른 방법을 찾아야 한다. 1. os.popen(command).read() 가장 좋은 방법은 위의 명령어를 사용하는 것이다. 또한 가장 추천한다. import os result = os.popen('ls -al').read() print(result) # 현재 폴더의 리스트가 나열된다. # -rw-rw-r-- 1 hyejin hyejin 32 6월 15 14:41 test.txt # -rw-rw-r-- 1 hyejin hyejin 52 5월 15 12:41 test2.txt 2. os.system(command) 두 번째로는 os.system을 쓰는건데, 이 방법은 그저 명령문

내적, 아마다르 곱 차이 [내부링크]

1. 내적 : 두 벡터간의 element를 곱하고, 모두 더하여 scaler 값으로 나타낸 것을 의미한다. : 부르는 이름이 참 많은데, dot product , inner product, scaler product 등으로 불린다. : 기호는 아래와 같은 (점) 기호를 사용한다. 아래의 예시를 보자 벡터 a, 벡터 b가 다음과 같은 값을 가질 때, 이를 내적하면 결과는 다음과 같다. 2. 아마다르 곱 : 두 벡터간의 element를 곱한 것을 의미한다. 즉 벡터의 shape은 남는다! : element wise 라고 부르며, 기호는 아래와 같은 기호를 사용한다. 아래의 예시를 보자 벡터 a, 벡터 b가 다음과 같은 값을 가질 때, 이를 아마다르 곱을 하면 결과는 다음과 같다. 위의 내적과는 다르게, 벡터의 모양 (1,4)의 shape은 지켜지는 것을 확인할 수 있다.

Adaptive learning rate vs Learning rate scheduler 의 차이 [내부링크]

1. Adaptive learning rate - 매개변수마다 모두 동일한 learning rate를 가지고 매개변수를 업데이트하는 문제를 해결하기 위해 등장 - 각 매개변수마다 자신의 상황에 따라 학습률을 조정해 사용 - 일정한 시간적 규칙을 가지고 학습률을 조정하는 것이 아니라, 매개변수 마다 사용한다는 점 - ex. AdaGrad, RMSProp, Adam 2. Learning rate scheduler - 일련의 학습과정에서 동일한 학습률을 가지고 업데이트하는 문제를 해결하기 위해 등장 - 미리 정한 시간적 규칙(scheduler)을 통해 학습률(learning rate)를 decay(낮추는)시키는 방법 - ex. time-based decay, step decay, exponential decay

[git] git blog에 latex 넣기 (+ $$ 안되는 경우 해결) [내부링크]

solution of Jekyll MathJax display math problem 전체적인 방법은 아래 블로그를 통해서 git blog에 latex을 넣는 것을 완료했다. 하지만, inline latex만 작동되고, display latex은 작동이 되지 않았다...!! 즉, $~$은 잘 되는데, $$~$$은 안되었다. 모든 수식은 inline으로 작성할 순 없기에 해결방안을 찾았다. 1. _config.yml 수정 위의 블로그와 동일하다. # Conversion markdown: kramdown highlighter: rouge lsi: false excerpt_separator: "\n\n" incremental: false 2. mathjax_support.html 파일 생성 <중요> %여기가 다르다% _includes 폴더에서 mathjax_support.html을 생성하며, 아래와 같이 작성한다. <script type="text/x-mathjax-config"> Mat

UAS, LAS 의 차이 [내부링크]

ML의 sequence labeling 의 평가 지표로 UAS와 LAS을 주로 사용하는데, 이 둘 간의 차이를 비교해보자. dependency parsing을 기준으로 설명하며, 해당 자료는 CS224n의 강의에서 가져옴. 1. UAS : Unlabeled Attechment Score의 약자로, 의미론적 관계를 고려하지 않는다. 의미론적 관계를 고려하지 않는다는 말의 의미는 다음과 같다. Universal Dependency(UD) Tag를 고려하지 않는 다는 말인데, UD tag에는 nsubj, ROOT, det, conj, ... 등이 있다. 그러나 UAS에서는 Unlabeled 를 고려하면 이와 같은 relation tag는 고려하지 않고, dependency parsing의 head와 dependent의 관계가 제대로 연결되었는가 만 고려한다. 위의 그림에서 UAS를 구해보자. Gold(정답)와 Parsed(모델예측 결과)에서 가장 오른쪽에 위치한 tag는 신경쓰지 않고,

[docker] jovyan passward & how to use vim [내부링크]

docker를 통해서 작업을 하다보면 매번 컨테이너를 올릴때 vim을 설치해야만 vim을 사용할 수 있다. 근데 vim을 설치하려면 sudo passward가 필요한데, 이를 작성해보고자 한다. passward jovyan의 default passward는 'jovyan'이나, 'jupyter'이다. vim 설치 방법 # container는 올린 상태라고 가정 $ sudo apt-get update $ sudo apt-get install vim

[python] 멜론 노래가사 크롤링 코드 [내부링크]

멜론 음악 탭에서 노래 가사를 크롤링 하는 코드 입니다. 모든 장르를 다 가져오는데, 300장까지만 뒤로 갈 수 있는 것으로 기억하네요. 이게 한글 노래를 기준으로 하다보니, 영어만 들어간 노래가사는 제외되었습니다. 선 작업 진행하셔야 하는게, chromedriver랑 path 이런 것들은 여러분 환경에 맞게 해주셔야 해요. #-*- coding:utf-8 -*- from selenium import webdriver from bs4 import BeautifulSoup from time import sleep import re import random driver = webdriver.Chrome('/home/hyejin/song/chromedriver') driver.implicitly_wait(3) #url = 'https://www.melon.com/genre/song_list.htm#params%5BgnrCode%5D=GN0100&params%5BdtlGnrCode%5D=&

[SQL] google bigquery 시작하기 [내부링크]

SQL도 요즘 같이 공부하고 있습니다. 그러던 중, google 의 bigquery가 무료 크레딧도 주면서, 공공 데이터로 연습할 수 있다는 것을 알았습니다. 그래서 이부분에 대해서 한번 작성해보려 합니다. 역시나 가장 좋은 교과서는 공식 문서입니다. 아래 링크 참조 https://cloud.google.com/bigquery/docs/quickstarts/quickstart-web-ui?hl=ko-KR 빠른 시작: Cloud Console 사용 | BigQuery | Google Cloud Google을 선택해야 하는 이유 More 솔루션 More 제품 More 가격 책정 More 시작하기 More 문서 개요 가이드 참조 샘플 지원 리소스 지원 콘솔 문의하기 무료로 시작하기 BigQuery 시작하기 샘플 안내 가이드 데이터 보안 및 거버넌스 BigQuery 지리 정보 시스템 가이드 빠른 시작: Cloud Console 사용 Google Cloud Console을 시각적 인터페이스로

[ubuntu] tmux 사용하기 [내부링크]

딥러닝 모델학습은 엄청난 시간을 소요하기 때문에 로컬 컴퓨터가 꺼져도 원격에서 명령한 명령어는 작동해야 한다. 그래야 학습이 꺼지지 않고 돌아가기 때문! 이 전에는 백그라운드에서 돌려서 이러한 문제를 해결했다. 이 명령어는 nohup 이다. 하지만, 이를 대신할 엄청난 명령어를 알게 되었는데, 삽질과정과 tmux 에 대해서 알아보려고 한다. tmux 는 세션을 기준으로 다시 세션에 접속/퇴장 이 가능한데, 세션이 무엇이냐면, 명령어에 연결된 문이라고 생각하면 쉽다. 세션을 하나 열고, 이 세션에서 여러 터미널을 열어서 사용 가능하기도 하고, 또는 이 세션을 원격 컴퓨터에서 열었다면, 로컬에서 SSH로 접속한 터미널을 종료해도 다시 원격 컴퓨터의 세션에 접근이 가능하다. (정말 놀랍지 않은가...?) 그럼 이를 차근차근 진행해보자. tmux를 로컬에 설치할지, 원격에 설치할지 고민이 많았는데, 원격에 설치하고, 로컬에서는 ssh로 접근하는 방식으로 진행하였다. 즉, 로컬 컴퓨터에서 원

[python] NaN 값 잡아내기 [내부링크]

How to take NaN value in python pandas로 열어보면 Nan값이 보이는 경우가 종종 있다. 이를 조건문으로 거르기 위해서 아래와 같이 if 문을 열심히 칠해도 안잡히는 NaN....!!!!!!!! if row['A'] == 'nan': continue #-------------------------- if row['A'] == 'Nan': continue #-------------------------- if row['A'] == float('NaN'): continue 참고로 임의로 nan 값을 생성하는 방법은 아래 코드와 같다. float('NaN') #nan 저런 if 문에도 잡히지 않는 Nan 값!!! 너무너무 화나지만 역시 갓 구글은 해답을 알려주심! 나또한 잊지 않기 위해서 글을 작성한다. Nan 값 잡는 방법 def isNan(value): return value != value 위의 함수를 사용하면 된다. value에는 pandas의 colu

GCP(linux) anaconda install [내부링크]

GCP 구글 클라우드 (linux 환경)에서 anaconda install 하는 방법 1. download anaconda installer # 만약, Downloads 폴더가 없다면, 아래와 같이 생성해줌 $ mkdir Downloads $ cd Downloads # python 3.7 version $ wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh 2. install anaconda $ bash Anaconda3-2020.02-Linux-x86_64.sh 중간에, [yes] 와 엔터키를 누름! 3. add path $ source ~/.bashrc 4. create virtural env $ conda create --name [YOUR_NAME] # activate virtural env $ conda activate [YOUR_NAME] # deactivate $ conda deactivate

[pytorch]ModuleNotFoundError: No module named 'transformers.tokenization_bert' [내부링크]

만약 이런 에러를 만나게 된다면 해결 방법은 2가지 이다. 1. transformers 의 패키지 버전을 내린다. 아마 현재 사용하고 있는 transformers 의 패키지 버전이 가장 최신일 가능성이 높다.(ex. 4.x 버전) 그렇다면, transformers 버전을 3.x 로 낮춰주면 에러는 해결된다 pip install transformers==3.5 2. 4.x 버전을 유지한다면, from 선언을 달리하면 된다. #기존 from transformers.tokenization_bert import BertTokenizer #변경 from transformers import BertTokenizer

[카페] 청라 카페 콘트라베이스 [내부링크]

원래 자주 가던 카페를 리뷰해보려고 합니다. 이 카페의 특징은 특정한 날에 재즈 카페로 변신한다는 점인데요. 재즈 공연하는 날은 콘트라베이스 인스타그램에서 확인해보시면 됩니다! www.instagram.com www.instagram.com 크리스마스에는 재즈를 본격적으로 즐길 수 있는 카페로 변신하였고, 다녀온 그 현장을 블로그에도 남깁니다. 축제 타이틀은 "옥빛로 크리스마스 거리 축제"로 기간은 12.24~12.26까지 진행되었습니다. 저는 사전예약을 네이버를 통해서 했기 때문에 입장료를 25% 할인 받은 15,000원을 지불하였고, 이 입장료에는 아래 두 번째 사진에서 나열된 음식들 중 택 1을 할 수 있었습니다. 저는 그 중에서 "오늘의 브런치 - 부르스게타"를 주문하였고 진짜 맛있었어요..!! 부르게스타는 아래 사진과 같으며 토마토, 양파, 레몬즙, 올리브유, 등이 올라간 핑거푸드인데 정말 좋았습니다. 저는 5:30PM 시간에 참석하여 "이승현 퀸텟"의 재즈 공연을 관람하였

[python] tolist() 함수 [내부링크]

오랜만에 올리는 코딩관련 포스팅이다! 그동안 에러를 안만난건 아니지만, 바쁘게 지내와서 포스팅할 시간이 없었다...ㅠ 나중에는 2021년도 회고의 글도 한번 작성해보고 싶다! 사담은 여기까지 하고, 오늘은 tolist() 함수에 대해서 작성하려고 한다. 저는 주로 pandas의 dataframe이나 series 타입을 list 형태로 변경할 때 사용하며, 함수 이름에서 예상되듯이 list 타입으로 변경시켜주는 함수다. 사용 방법은 아래와 같다. import pandas as pd # 임의의 DataFrame 선언 a = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D']) # DataFrame For loop for idx, row in a.iterrows(): print(type(row)) # <class 'pandas.core.series.Series'> print(row) # A 0 # B 1 # C 2

[pytorch] TypeError: object of type 'int' has no len() in torchtext [내부링크]

오늘 다룰 에러는 TypeError: object of type 'int' has no len() 이다. /opt/conda/lib/python3.9/site-packages/torchtext/legacy/data/field.py in <genexpr>(.0) 246 return minibatch 247 if self.fix_length is None: --> 248 max_len = max(len(x) for x in minibatch) 249 else: 250 max_len = self.fix_length + ( TypeError: object of type 'int' has no len() 전체적인 에러 형식은 위와 같다. 이 에러를 검색하면, int 타입에 len()을 붙여서 에러가 났다는 말만 나오는데,,,, torchtext에서는 나오지 않길래 해결 방안을 작성하려고 한다. 결론부터 말하면, torchtext의 LABEL이 들어가는 Field에 이를 LABEL이라고 명시하

[pytorch]AttributeError: '_IncompatibleKeys' object has no attribute 'cuda' [내부링크]

발생 에러 AttributeError: '_IncompatibleKeys' object has no attribute 'cuda' AttributeError: '_IncompatibleKeys' object has no attribute 'to' 첫번째 에러를 보고 모델을 load하는 과정에서 cuda로 매핑이 안되나? 싶어서 to(device)로 변경했었다. 그랬더니 두번째 에러가 발생했다. 모델을 gpu로 못 보내는게 아니라 뭔가 문제가 있는 것 같아서 다시 코드를 살펴봤다. 해결방안 문제는 간단했다. model을 load하는 과정에서 아래와 같이 작성했기 때문이다. model=model.load_state_dict(torch.load('model.pt')) model.eval() 변경 model.load_state_dict(torch.load('model.pt')) model.eval() 에러없이 잘 돌아간다

[pandas] dataframe to text file [내부링크]

내가 까먹지 않기 위해서 쓰는 글...! 일반적으로 csv나 txt파일로 dataframe을 만들기 위해서는 pd.read_csv()라는 함수를 쓴다. 그럼 그 반대로, dataframe을 csv나 txt로 저장하는 방법은 무엇일까? pd.to_csv() 이다. csv로 저장하는 방법은 아래 파일 확장자를 .csv로 변경해주면 된다. 아래 코드는 dataframe을 "sample.txt"라는 이름으로 저장할 것이며, 구분자는 탭을 사용할 것이고, dataframe에 나타나는 index는 없는 상태로 저장함을 의미한다. import pandas as pd df.to_csv('./sample.txt', sep="\t", index=False)

[pytorch]RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublasCreate(handle)` [내부링크]

오늘의 에러 RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublasCreate(handle)` 더불어, 아래와 같은 warning도 같이 등장했다. /pytorch/aten/src/ATen/native/cuda/Indexing.cu:662: indexSelectLargeIndex: block: [257,0,0], thread: [64,0,0] Assertion `srcIndex < srcSelectDimSize` failed. 원인 - torch.nn.Embedding layer에 정의된 크기보다, 모델의 input으로 주어지는 값이 더 크기 때문. 즉, torch.nn.Embedding(3, 256) 일 때, input sequence는 [0, 10, 10]과 같이 embedding 숫자보다 더 큰 값이 들어갔기 때문이다. 해결 방법 1. 가장 큰 이유는 tokenizer가 잘못 됐을 가능성이 크다.

[python] TypeError: unhashable type: 'list' [내부링크]

오늘의 에러 : TypeError: unhashable type: 'list' 발생 원인 : dictionary 의 key를 접근할 때, list를 넣었기 때문 해결 방안 : list type을 int type으로 변경해준다. # dictionary a = {0:0, 1:0} result = [1] a[result] += 1 위와 같이 코딩하게 된다면, 위에서 나온 에러(TypeError: unhashable type: 'list')를 만날 수 있다. 왜냐하면, 사실상 a[result]에서 요청하는 값이 a[[1]] 이런 모양이기 때문이다. 따라서 이를 해결하기 위해서는 a[1]과 같이 접근해야하고, 그럼 int type으로 변환이 필요하다. 1. indexing a[result[0]] += 1 2. str to int b = [str(i) for i in result] b = ''.join(b) a[int(b)] += 1 개인적으로는 1의 방법을 추천한다.

[python] defaultdict [내부링크]

python에는 dictionary가 있다. 이 자료형은 key와 value로 구성되는데, 사전에 정의하지 않은 key로 접근하면 KeyError를 내뱉는다. 그렇다고, 모든 key에 대해서 사전에 정의하기란 쉽지 않다. 이런 문제를 해결하기 위한 방법으로 defaultdict라는 것을 소개한다. Defaultdict defaultdict은 사전에 정의되지 않은 key로 접근하여도 에러를 내뱉지 않는 특징을 가진다. 외부 함수를 꼭 import 해줘야 하며, 사용 방법은 아래와 같다. from collections import defaultdict a = defaultdict(list) a[1] = 10 print(a) # defaultdict(<class 'list'>, {1:10}) 위의 코드에서 defaultdict의 인자로, list를 넣은 것을 확인할 수 있다. defaultdict에는 3개의 type을 넣을 수 있고, 각 type의 default값은 다음과 같다. - li

[카페] 완정역 애견 동반 가능 "서원안길" [내부링크]

오늘은 완정역에 애견 동반 가능한 카페 "서원안길"을 리뷰해보려 합니다. 위치는 다음과 같아요. 서원안길 인천광역시 서구 원당대로608번안길 14 저는 올라가면서 입구가 어딘지 헷갈리더라구요... 어떻게 들어가긴 들어갔습니다 ㅎㅎ 이렇게 들어가면, 대나무 + 돌 길이 반겨줍니다. Previous image Next image 서원안길은 앞서 언급한 바와 같이 애견동반 가능한 카페로, 반려견을 데리고 오실 수 있어요. 그러나, 반려견은 데리고 올 때는 야외에 있어야 하고, 만약 상황상 야외에 앉을 수 없다면, 실내에 목줄을 묶어두는 곳이 있으니 이 부분 참고하시면 좋을 것 같아요. (강아지가 뛰어놀 수 없는 카페에요) 서원안길의 메뉴는 다음과 같아요. Previous image Next image 커피 외에도 빵도 많이 파니까 참고해주세요. 음료가 나오기 전에 가게를 둘러봤습니다. 1 층 (사람들이 앉아계셔서 자리를 제대로 못찍었네요) Previous image Next image 2

[evaluation] Rouge-N / Rouge-L [내부링크]

논문에서 많이 언급되는 평가 지표를 설명한다. ROUGE v. BLEU 차이 ROUGE : 얼마나 많은 Reference sentence token이 Generated sentence token 에 포함되는지 BLEU : 얼마나 많은 Generated sentence token이 Reference sentence token 에 포함되는지 gold standard the cat was under the bed machine inference output the cat was found under the bed Rouge-N Rouge-N은 n-gram 방법을 사용하는데, n에 따라서 이름이 달라진다. 주로 Rouge-1, Rouge-2 이런 식으로 표현한다. 또한, recall과 precision 같이 사용되며 다음과 같이 표기한다. 위의 예시를 토대로 Rouge-1의 recall과 precision을 구하면 다음과 같다. 이렇게 계산하는 것을 기반으로 Rouge-2를 구해보면 아래와

[overleaf] Can be used only in preamble [내부링크]

overleaf를 처음 쓰다보면 실수하는 부분인거 같다. 에러의 원인 \begin{document} 태그를 지나고 \usepackage{...}를 쓰려고 했기 때문이다. \begin{document} ... \usepackage{} ... 즉, 아래 코드와 같이 usepackage는 begin{document}보다 상단에 위치해야 한다. \usepackage{} \begin{document} ... reference Can be used only in preamble 사용하기 쉬운 온라인 LaTex 편집기. 설치 필요없음. 실시간 협업. 버전 관리. 수백 개의 LaTex 템플릿. 그리고 그 이상. ko.overleaf.com

[overleaf] table 만들기 (feat.multirow) [내부링크]

overleaf로 table만들기는 복잡하다. 더 정확하게 말하면, 귀찮다... 왜냐하면, 표를 만들어주는 형식을 내가 작성해야하기 때문인데 이를 쉽게 해결해주는 사이트가 있어서 공유하고, 사용 방법을 알아보자. 사이트는 아래와 같다. Create LaTeX tables online – TablesGenerator.com File Edit Table Column Row Cell Help Default table style A B C D E 1 2 3 4 Generate Result (click "Generate" to refresh) Copy to clipboard \begin { table } [ ] \begin { tabular } { lllll } & & & & \\ & & & & \\ & & & & \\ & & & & \end { tabular } \end { table } Escape special TeX s... www.tablesgenerator.com 맨처음 들어가게

[overleaf] table, figure 내가 원하는 자리에 배치하기 [내부링크]

How to fix the table position in overleaf. ️ overleaf로 table 만드는 방법 [overleaf] table 만들기 (feat.multirow) overleaf로 table만들기는 복잡하다. 더 정확하게 말하면, 귀찮다... 왜냐하면, 표를 만들어주는 형식을 내... blog.naver.com 이렇게 overleaf 로 table을 만들어서, 넣어보면 다음과 같이 표가 들어가게 된다. 참고로 내가 사용한 표의 코드는 다음과 같다. \begin{table}[] \begin{tabular}{lll} & acc & f1 \\ 1 & 0 & 0 \\ 2 & 0.5 & 0.3 \end{tabular} \caption{please write caption in here} \label{tab:my-table} \end{table} 내가 원하는 자리는 이 부분이 아님에도 불구하고, 가장 상단에 표가 들어가게 된다. (현재 나는 하단에 들어가길 원하는 상황

[연회비 할인]대한항공 마일리지 적립 신용카드 추천(가입시 최소 8천 마일리지 적립) [내부링크]

오늘은 제가 이번에 새로 발급받은 대한항공 마일리지 적립되는 신용카드를 추천드리려고 합니다~! 제가 발급받은 카드는 바로 현대카드에서 나온 대한항공 카드 인데요. 아래 링크로 가입하시면 연회비 3만원이 할인되는 이벤트가 있어서 소개해드리려고 해요. 현대카드 | 중도이탈 시 링크 재접속 필수 라이프 스타일에 맞춰 카드를 선택해 보세요 가벼운 연회비로 마일리지에 집중 030 카드 실속있게 라운지 혜택까지 070 카드 강력한 적립률에 항공/면세 할인까지 150 카드 대한항공 우수회원용 프리미엄 혜택 the First 카드 대한항공카드 더 알아보기 01 대한항공카드의 강력한 마일리지 혜택 02 소수점 마일리지도 챙겨주는 대한항공카드 03 나에게 맞는 대한항공카드 찾아보기 04 직원들에게 직접 듣는 Inside 대한항공! 유의사항 연회비 : 대한항공카드 030 (3만원), 070(7만원), 150(15만원), the First... www.hyundaicard.com 1. 대한항공 마일리지

[overleaf] latex(수식) 넣기 [내부링크]

overleaf 에 수식을 넣는 방법은 간단하다. 1. 인라인에 넣기 (inline) 글을 쓰다보면, 수식 기호를 지칭하는 경우가 종종 있다. 이럴 때 $와 $ 로 수식 기호를 감싸주면 된다. If you want to add latex in inline, $y = 2x$ 2. 블럭으로 넣기 위처럼 글 쓰다가 중간에 넣는게 아닌, 수식 자리를 블럭으로 필요로 하는 경우도 있다. 이럴 때는 아래처럼 진행하면 된다. \begin{equation} h = Wx+b \end{equation} 만약, 수식의 라벨을 붙여서 나중에 이 수식을 reference 하고 싶다면, 아래와 같이 \label을 넣어서 붙여주면 된다. \begin{equation}\label{eq:라벨 이름} h = Wx+b \end{equation} 수식에 라벨 붙여서 언급하는 방법은 아래 그림과 같다.

Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. [내부링크]

오늘의 에러 ServiceException: 401 Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket. 발생 원인 google cloud에 login이 안되어 있어서 발생한 것으로, 다시 로그인을 해주면 해결된다 ㅎ 해결 방안 $ gsutil config 위의 코드를 입력한다. 나의 경우에는 아래와 같은 문구가 나왔다. CommandException: OAuth2 is the preferred authentication mechanism with the Cloud SDK. Run "gcloud auth login" to configure authentication, unless: - You don't want gsutil to use OAuth2 credentials from the Cloud SDK, but instead want to manage credentia

[python] colab 에서 .py 파일 import 하기 [내부링크]

구글 colab은 무료로 GPU 머신을 사용할 수 있다는 장점이 있습니다. 이런 장점을 가진 colab에 내가 만든 python 파일을 사용할 수 있다는 점 알고 계셨나요? 예를 들어, 제가 myfile.py 이라는 파일을 만들었다고 가정해보겠습니다. 코랩에서 이를 사용하고 싶다면, 즉 import 하고 싶다면 어떻게 하면 될까요? 방법은 아래와 같습니다. google colab에 google drive mount 하기 코랩에 구글 드라이브를 연결시킨다고 생각하시면 됩니다. 아래 코드만 실행시키면 됩니다 from google.colab import drive drive.mount('/content/drive/') * 위의 코드를 실행시키면, 아래 www.~~~ 주소가 뜨면서 code를 입력하라고 요청할 텐데요. * 해당 주소에 들어가셔서 본인 구글 계정을 연결하는 작업을 거쳐주시면 됩니다. 2. 내가 import 하고자 하는 파일이 담긴 경로를 넣어주기 아래 예시 처럼 넣어주시면 되

주간일기 챌린지 1회차 [내부링크]

별일없이 지나간 일주일 서울대입구에서 저녁을 먹었는데, 우연히 들어간 가게 음식이 맛있었다. 가게 이름은 함바그동스미비 소바에 떡갈비가 올라가는데, 안어울리는 듯 하면서 어울리더라. 소바 대신에 밥을 고를 수도 있는데, 밥은 고기가 두 덩이가 올라간다. 함바그동 스미비 서울특별시 관악구 남부순환로230길 31 걷다가 디저트 가게를 찾는데 서울대입구에서 겨우 찾았다... 가게 이름은 안녕과자점 까눌레 성애자로서 까눌레를 3개 샀는데, 맛은 그저 그랬다(그래놓고 잘먹음ㅋㅋ) 난 좀더 빠쟉한 까눌레가 취향이라 그런듯. 휘낭시에도 맛있었다!! Previous image Next image 안녕과자점 서울특별시 관악구 남부순환로228길 20 1층 안녕과자점 밤에 한강은 처음인데 왜 다들 가려는지 알겠더라. 생각보다 밤 한강 좋더라. 한강에서 빠질 수 없는 라면도 먹어주고! 힐링하고 왔다. Previous image Next image

2회차 [내부링크]

Previous image Next image 짬내서 갔던 서원안길. 카푸치노에 시나몬을 내가 원하는 대로 듬뿍 뿌려 먹을 수 있어서 좋았다 저녁 늦게 가니까 사람도 없어서 드디어 1층에 앉아본 날..! 서원안길 인천광역시 서구 원당대로608번안길 14 Previous image Next image 서울숲에 사라졌던 엔디디가 다시 오픈했다. 회사 출근한 김에 점심먹고 들린곳! 엔디디는 자두가 최고다...!!! 메뉴는 매일 바뀜 ㅎ Previous image Next image 그리고... 카멜커피 오후 5시에? 가도 사람이 많았고, 착석은 대기까지 해야했다... 포장하면 바로 주문할 수 있었다. 생각보다 작았고, 맛은 고소했다! 담에는 빵도 먹어야지 카멜커피 7호점 서울특별시 성동구 서울숲7길 4 카멜커피

3회차 [내부링크]

퍼스널 컬러를 드디어 받았다. 봄 아님 여름 이지 않을까 했는데, 왠걸...; 가을딥;; ㅋㅋㅋㅋㅋㅋ 그래도 은근히 가을에 맞는 색조가 있어서 다행이었다. 컬러가산다 서울특별시 마포구 연남로 4-1 3층 고양 스타필드가서 먹은 것들... 훠궈야 랑 무슨 카펜데, 분위기 좋더라! 커피는 그저그랬고, 먹고싶었던 빵들이 많았지만... 배불러서 먹지는 않았다. 이날 사실 렌즈가 눈에서 찢어져서 당황했지만, 운전해야해서 억지로 끼고 갓더니 저녁 내내 눈이 아팠다 ㅠ 이날 이후로 여분 렌즈 꼭 들고 다니기로 마음 먹었다... 훠궈야 스타필드고양점 경기도 고양시 덕양구 고양대로 1955 1층

4회차 [내부링크]

이번주는 별거없이 보낸 주. 유난히 비가 왔고, 무더웠다 뱅크샐러드에서 신청한 유전자검사 결과가 나왔다 ㅋㅋㅋ 생각보다 괜찮은 유전자를 가지고 있더라 쫌 의외옸음 ㅎ 중화카츠 서울특별시 성동구 서울숲2길 46-10 1층 궁금했던 중화카츠에 가봄 매콤한게 의외로 돈가스랑 어울리더라! 한번쯤은 가볼만 한 곳인거 같다 단일서울 서울특별시 성동구 왕십리로 66-33 1층 숨겨진 커피 맛집 인스타 갬성 스러우면서 커피맛은 놓치지 않은 곳. 티라미수도 맛있더라! 뭔가 많이 먹고 다닌 일주일이군...ㅋㅋㅋㅎ

[sql] double colon in sql [내부링크]

sql에서 double colon(::)이 적혀있는 코드를 볼 때가 있다. 처음 보는 부분이라 좀 많이 당황했는데 구글링을 통해서 답을 찾을 수 있었다. 정의 It is a CAST operation(cast to a SOME type). 즉, 타입을 변환시켜주는 기능을 한다고 한다. 사용 예시 SELECT price::float 이렇게 위처럼 쓰인 경우는 무엇을 의미할까? price라는 변수를 float type으로 (정수형) 변환시킨다는 의미를 가진다. SELECT now()::timestamp(0) 이렇게 위처럼 쓰인 경우에는 now()를 timestamp(0)으로 변환한다는 의미를 가진다. 위의 식은 아래와 같이 변환할 수 있으며, 그 의미는 아래와 같다. SELECT CAST (now() AS timestamp(0)); reference Value Expressions Value expressions are used in a variety of contexts, such a

[torch] torch.sparse_coo_tensor 알아보기 feat. Coordinate format (COO format) [내부링크]

우연히 open source code를 보다가 torch.sparse.FloatTensor 를 보게 되었는데 도통 검색해도 무슨 뜻인지 이해하기 어려웠다. 다행이도 구글에는 없는게 없었고, 겨우겨우 이해하게 되었는데, 미래의 나를 위하여 정리한다. torch를 통해 sparse를 만들때 torch.sparse_coo_tensor 를 사용하게 된다. torch.sparse.FloatTensor는 나중에 사라질 수도 있다고 적혀있으니 sparse_coo_tensor를 사용하자 (사실 둘다 하는 역할과 결과는 같다) Pytorch의 공식 문서에 따르면 torch.sparse.FloatTensor / torch.sparse_coo_tensor 의 정의는 다음과 같다. PyTorch implements the so-called Coordinate format, or COO format, as one of the storage formats for implementing sparse tenso

[서울 레스토랑] 한강뷰 레스토랑 63빌딩 워킹온더클라우드 [내부링크]

오늘은 워킹온더클라우드 식당 리뷰를 해보려고 한다. 식당 가는 방법 : 별관에서 내렸다면, 엘리베이터를 타고 1층으로 간다. 1층에서 걷다보면 아래 그림과 같은 표지판을 볼 수 있는데, 이 표지판을 따라서 가면 식당에 갈 수 있다. Previous image Next image 저희는 저녁 코스로 방문했고, 식사 시간은 오후 5시 부터였는데, 미리 올라가서 기다려도 괜찮았다. 일찍 오면 5시 코스의 경우 4시 45분 부터 입장을 시작했다. Previous image Next image 우리가 시킨 코스는 쉐프 코스 하나 아래 Sol 코스였고, 음식을 이렇게 준비될 예정이다. 일찍 가서 그런지 뷰가 좋은 곳에 앉은 느낌이 들었지만, 창가자리면 모두 뷰가 좋은것 같았다 ㅋㅋㅋㅎ 가장 특이했던건, 마스크 넣는 봉지를 주신다는 점인데 너무 센스있다고 생각했다. Previous image Next image 코스에 포함된 와인과 식전빵으로 본격적인 식사 시작. 저 동글동글한 빵이 진짜 맛있다

이번주 먹부림 [내부링크]

오랜만에 시켜먹은 족발 배달 족발 중에서는 여기가 진짜 찐 맛집이다. 친절하시고 너무너무 맛있음 ㅠㅠ 완정역 족발집으로 미쓰족발 추천 미쓰족발 인천당하점 인천광역시 서구 청마로 166 204호 Previous image Next image 오랜만에 파스타를 먹었다 ㅎ 잠실에 있는 더 이탈리안 클럽 이라는 가게 메뉴는 순서대로 아래와 같다. 소고기 안심 타르타르 바질과 피스타치오가 들어간 pasta verda 화이트 라구 파스타인 Ragu bianco con il cognac 돼지 오겹살 Pancetta grigliata 감자튀김 전체적인 맛이 조금 많이 짜고, 화이트 라구 파스타는 좀 느끼했지만, 트러플 맛은 아주 제대로 느낄 수 있었음 ㅎ 그래도 가게 분위기는 이뻤음. 더 이탈리안 클럽 서울특별시 송파구 잠실로 209 KT송파타워 2층 더 이탈리안 클럽 점심 식사를 마치고 바로 아래에 있는 젤라또 가게에 들어갔다 Previous image Next image 화이트 코코넛이랑 자두

[카페] 분위기 좋은 연희동 카페 애니브 [내부링크]

친구랑 우연히 연희동을 걷다가 발견한 카페 애니브 유난히 비가 많이 내리던 날인데, 외관이 너무 이뻐서 홀리듯이 들어갔다. (비가 유난히 와서 외관 사진은 쫌 아쉽당) Previous image Next image 좌석은 그다지 많지 않았고, 내부도 화이트 톤으로 매우 깔끔한 편! 베이커리 카페라서 그런지 음료는 매우 간단했다. 달달한 케익을 먹을꺼라 그냥 아이스 아메리카노 주문했다. 이집의 메인은 역시 케익인데...!! 비주얼이 진짜 미쳤다. 카페에서 먹는 그런 케익 비주얼이 아니라 고오급 케익이다. Previous image Next image 비오고 평일 오후 4시쯤 방문했더니 남은 케익은 별로 없었다. 우리는 여기서 "누아" 라는 케익을 주문했다. 아, 케익 말고 구움과자류도 팔았다. 여기서 오렌지 까눌레도 주문했다. 주문한 음식 비주얼~! Previous image Next image 맛을 평가하자면,,, 진짜 너무 맛있다. 누오 케익은 초콜릿 중에서 페레로로쉐 와 매우 흡

[술집] 연희동 로컬 철판 요리 맛집 사월 [내부링크]

연희동에 숨겨져 있는 맛집을 소개한다. 진짜 로컬만 아는 그런 장손데 더 널리널 퍼졌으면 좋겠는 마음에 공개..! 바로 연희동 사월 이라는 가게다. 휴무일 : 매주 수요일 영업 시간 : 17:00 - 23:00 기본 셋팅은 깔끔한 편 메뉴는 다음과 같다. Previous image Next image 이 가게의 특별한 점은 바로 릴레이 일기장 이다. 누군가가 질문을 남겨뒀고 이 질문에 대한 답을 다음 손님이 해주는 시스템! 그리고, 그 손님은 본인이 가지고 있는 질문을 또 다시 남긴다. 나도 친구랑 같이 답변을 해주고, 질문을 적었었다. 일기장이 특이한게 낯선 사람에게 물어보는 것일 텐데도 다들 진지한 고민을 많이 적어서 놀랐었다. 아래 사진 처럼 주방도 너무 깔끔하고, 오픈형이라서 더 믿음직 스러웠다.! 우리가 주문한 메뉴가 철판에서 만들어지는중...~~ Previous image Next image 주문한 메뉴는 다음과 같다. 순서대로 야끼 파스타 구운 주먹밥 흑돼지 목살 스테이

[멕시칸 음식] 연남동 타코 맛집 멕시칸식당 베르데 [내부링크]

연남동에 생긴 멕시칸 음식점인 "멕시칸식당 베르데"를 소개한다. 필자는 멕시코 음식을 유난히 좋아하는 편인데, 연남동에서는 정통 멕시칸 음식을 찾기 어려웠는데 이 가게를 만나고 생각이 바꼈다...! 식당의 외관과 내부 테이블은 7개 이상 있었고, 4인석이 많아서 4인이상 오는 것도 추천 Previous image Next image 메뉴는 아래와 같다. Previous image Next image 저는 2인 퀘사디아 세트를 주문했어요. 타코는 새우로 변경했고, 퀘사디아는 치킨으로 했어요~ 가장 처음에 기본으로 제공되는 나초와 칠리 소스 칠리소스가 진짜 정통이었고, 기본 나초만 해도 맛있음...️ 다음으로 나온 grilled shrimp 그릴에 구운 새우 타코 새우는 아래에 숨겨져 있었습니다 ㅋㅋㅋㅎ 2-3마리 정도 있었던것 같아요. 다음은 타코 샐러드 & 칠리 콘 카르네 이 음식은 비주얼부터 압도적인데, 안에 야채가 가득가득 들어가 있어서 너무 맛있었던 메뉴에요. 먹는 방법 : 겉

[python] dict.fromkeys() 사용법 및 주의 사항 feat. 모든 key에 값이 다 들어갈 때 [내부링크]

python list to dictionary key 파이썬에서 list의 항목들을 dictionary 의 key로 변환하는 가장 빠른 방법은 fromkeys 함수를 사용하는 것 일것이다. 사용 예제는 다음과 같다. category_per_sent = dict.fromkeys([2,3,4], list()) print(category_per_sent) [2, 3, 4]를 dictionary key로 변환해주고, 그 value에는 빈 list를 넣어줬다. print의 결과는 다음과 같다. {2: [], 3: [], 4: []} 여기까지는 잘 된것 처럼 보인다. 그럼 이제 value에 있는 list에 값을 하나 추가해보자. category_per_sent[2] += [1] print(category_per_sent) 이때 우리가 바라는 결과값은 아래 표와 같을 것이다. KEY Value 2 [1] 3 [] 4 [] print를 찍어보자 print(category_per_sent) # {2

[torch] IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1) [내부링크]

오늘의 에러 IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1) 발생 위치 torch의 crossentorpy loss에 predict와 target을 넣는 부분에서 발생 output = model(x) loss = criterion(output, target) # <- 여기서 발생 발생 원인 predict의 shape이 torch의 crossentropy 에서 요구하는 것과 맞지 않았음.. 해결 방법 torch에서는 아주 정확하게 input과 (=위 코드에서는 output) target의 shape의 명시하고 있다. document CrossEntropyLoss — PyTorch 1.12 documentation The input is expected to contain raw, unnormalized scores for each class. input has to be a Tensor

[맛집] 포천 장인더 주말/연휴 방문 후기 [내부링크]

지난 주말에 연휴가 추가된 주말에 포천 장인더를 방문한 후기 장인더 오픈 시간은 10시! 우린 그 전에 오픈런 하기 위하여 9:30 까지는 무조건 간다는 마음으로 출발했다... 포천 장인더 주차장은 큰듯 작다. 주차장 입구에 차를 대면 이런 뷰를 볼 수 있는데, 여기서 웨이팅하는 입구는 사진에서 오른쪽에 있는 잔디로 가면 된다. 위의 사진이 오른쪽에 있는 잔디 모습 차가 안막혀서 9:29분쯤? 도착했었고 앞에 사람들이 10팀이상 있었다... 도대체 다들 얼마나 빨리온것인가... 위 사진은 장인더 입구~ 10시가 알려진 오픈시간이지만, 실제로는 그보다 빨리 9시 50분? 쯤에 여는것 같다. 위 사진을 10:01 에 찍었더라! 내부는 생각보다 자리가 많았고, 10팀 정도는 앉을 수 있는듯 그냥 우리는 나갈꺼니까 앉지는 않았다! 이날도 정약과는 품절이였고, 파지약과 가격은 5500원 약과빵은 3800원 이다 Previous image Next image 약과 개수 제한 및 카페 메뉴는 다

[ubuntu] login banner 설정하기(feat. issue.net motd) [내부링크]

motd : 로그인이 성공하고서 나타나는 메세지 (telnet , SSH) issue.net : 로그인 시도시 나타나는 메세지 (telnet, 추가 설정시 SSH 도 가능) 공통적으로 저장 시도시 'readonly' option is set (add ! to override) 라는 문구가 뜬다면, sudo vi /etc/motd 이런 식으로 앞에 sudo 를 붙이거나 su 명령어로 root로 권한을 바꿔서 시도하기 motd 설정 vi /etc/motd 본인이 원하는 메세지 입력 issue.net 설정 vi /etc/issue.net 본인이 원하는 메세지 입력 2. vi /etc/ssh/sshd_config 3. Banner /etc/issue.net 4. service ssh restart 만약 CentOS 라면, service sshd restart Reference 리눅스 sshd 재시작 - 제타위키 목차 1 개요 2 우분투 3 CentOS 4 같이 보기 5 참고 1 개요 리눅스

/usr/bin/python3: No module named pip 해결하기 [내부링크]

문제 상황 terminal command 로 pip를 쳤을 때, 아래 에러가 발생 /usr/bin/python3: No module named pip 해결방안 sudo apt-get install python3-pip 발생 원인 pip 가 없어서 발생하는 것으로, 설치해주면 해결된다

huggingface dataset read error [내부링크]

에러 : FileNotFoundError: Couldn't find a dataset script at /home/jovyan/cheese/contextual-corr-analysis/mozilla-foundation/common_voice_13_0/common_voice_13_0.py or any data file in the same directory. Couldn't find 'mozilla-foundation/common_voice_13_0' on the Hugging Face Hub either: FileNotFoundError: Dataset 'mozilla-foundation/common_voice_13_0' doesn't exist on the Hub. If the repo is private or gated, make sure to log in with `huggingface-cli login`. 문제 원인 : 해당 데이터셋을 사용하려면 허깅페이스에 로그인 하고, 접

파리바게트 춘식이 런치 쿨링백 후기 [내부링크]

파리바게트 춘식이 런치 쿨링백 후기! Intro: 파리바게트에서 5월 26일 부터 빵 2 만원 구매시 4,900원에 구매가능한 춘식이 런치 쿨링백을 출시했어요! 아쉽게도 선착순 구매여서 매장 재고 상황에 따라 구매가능 여부를 여쭤보고 파리바게트로 가야합니다..ㅠ 저는 집 근처 파바에서 우연히 아래 사진처럼 여전히 쿨링백을 팔고 있는 것을 확인하고, 6월 10일에 구매했어요! - 꿀팁) 판매하고 있는 경우에는 아래 사진처럼 춘식이 쿨링백 4,900원 이라는 포스터를 붙이고 있어요. 뒤늦게라도 구매하고 싶으신 분은 근처 파바에 전화해보시는게 좋을 것 같습니다~! 아직 한개 남은 춘식이...️ Review: 자 그럼 제품 리뷰 해볼게요~! 위 색상이 가장 비슷하게 나왔어요! 참고 부탁드립니다. 크기는 가로 23cm * 세로 13cm * 높이 25cm 으로 일반적인 1 인 도시락 보냉백 치고는 큰 크기를 가져요. 쿨링백의 내부는 아래 사진처럼 세로가 넓직해서 일반적인 도시락통이 다 들어갈

[쇼룸] 뚝섬/서울숲/성수 슬로우앤드 쇼룸 - 하우스앤드 성수 평일 방문 후기 [내부링크]

무더운 7월에 오픈한 슬로우앤드 쇼룸 방문 후기 뚝섬역에서 10분 정도에 위치한 슬로우앤드 쇼룸 - houseand(하우스앤드) 가 오픈했다. 주소 : 서울시 성동구 성수동2가 284-98 시간 : 13:00 ~ 20:00 휴무 : 월, 화 인스타 : https://instagram.com/slow.and.house?igshid=MzRlODBiNWFlZA== 슬로우앤드 쇼룸, 하우스앤드(@slow.and.house) • Instagram 사진 및 동영상 팔로워 2,238명, 팔로잉 1명, 게시물 2개 - 슬로우앤드 쇼룸, 하우스앤드(@slow.and.house)님의 Instagram 사진 및 동영상 보기 instagram.com Previous image Next image 외부는 흰색과 짙은 고동색을 적절히 배치했고, 고동색에 잘어울리는 그린을 넣어서 슬로우앤드의 분위기를 한껏 살렸다. 외부부터 보이는 마네킹의 착장에서 부터 슬로우앤드 사이트에 방문한 것 같았다. 7월 7일 쇼룸

[빵집] 광안리/남천동 부산 3대빵집 서희와제과 주말 오픈런 후기(+ 서희와제과 v. 희와제과 비교) [내부링크]

비가 엄청오던 7월에 방문한 서희와제과 후기 주소 : 부산 수영구 광남로 89 1층 영업시간 : 오전 11시 ~ 오후 7시 휴무 : 월, 화 (마지막 주는 월, 화, 수) 인스타 주소 : https://instagram.com/seohwa.bread?igshid=MzRlODBiNWFlZA== 서희와제과(@seohwa.bread) • Instagram 사진 및 동영상 팔로워 5,549명, 팔로잉 10명, 게시물 16개 - 서희와제과(@seohwa.bread)님의 Instagram 사진 및 동영상 보기 instagram.com 서희와제과는 원래 부산 서면/전포에 위치한 “희와제과”의 두번째 브랜드에요. 이전에 방문한 희와제과에서 너무 맛있었던 기억으로 가득해서 두번째 가게가 유명해지기 전에 바로 방문한 후기를 작성해요 ️ 서희와제과의 대문! 비가 오는날에 방문했습니다...️ 방문한 시간과 대기 정도는 글 가장 마지막에 적어둘게요. 희와제과에서도 빵을 위생장갑을 끼고 쟁반에 담았는데, 서

[맛집] 부산 기장 한정식 맛집 고슬고슬 가마솥밥 주말 점심 방문 후기 [내부링크]

부산 기장에 위치한 한정식 및 솥밥을 먹을 수 있었던 “고슬고슬 가마솥밥” 에 대한 후기 입니다.️ 주소 : 부산 기장군 기장읍 기장해안로 236 1층 영업시간 : 평일 - 08:30 ~ 21:00 주말 - 08:30 ~ 21:00 (16:00 ~ 17:00 브레이크 타임) 휴무 : 없음 주차장 : 있음 ( 주차장 후기는 글 하단에 꿀팁과 같이 적어둘게요.) 고슬고슬 가마솥밥의 메뉴 입니다~ 대표적인 메뉴로 “톳 & 홍합밥 정식” , “쭈꾸미판 정식”, “불고기 정식”, “고등어 조림 정식”, “가자미 조림 정식”, “생선구이 정식” 이 있어요. 저희는 여기서 “쭈꾸미판 정식”, “고등어조림 정식”, “생선구이 정식” 을 시켰어요. 주문시 유의사항입니다! 1인 1메뉴를 원칙으로 하기 때문에, 방문하신 인원수에 맞춰서 주문을 하셔야 해요. 어린 아이의 경우에는 나이에 따라 달라지는데요. 초등학교 이상의 어린아이의 경우에는 1인 1메뉴이고, 미취학 아동인 경우에는 2인 1식이라 합니다!

[맛집] 부산 해운대/달맞이길 해운대기와집대구탕 (주말 웨이팅 없이 방문 꿀팁) 대구탕 맛집 [내부링크]

해운대기와집대구탕 주소 : 부산 해운대구 달맞이길104번길 46 영업시간 : 08:00 ~ 21:00 휴무 : 없음 주차장 : 있음 부산 해운대에 위치한 대구탕 맛집, “해운대기와집대구탕” 방문 후기 에요. 달맞이길에 있어서 교통의 편의성은 낮지만, 차를 빌렸거나, 자차를 보유하신 분들이라면 꼭 방문해야할 맛집 중 하나죠! 저는 운 좋게 주말에 웨이팅 없이 이 집을 방문했는데요. 그 꿀팁은 글 하단에 적어둘게요~ Previous image Next image 해운대기와집대구탕은 말그대로, 기와집 처럼 한옥 모양을 가진다. 가게에 사람이 정말 많이 방문하는지 방이 3개나 된다. “사랑채”, “안채”, “별채” 저는 이중에서 “별채”에 안내받았어요. 특이하게 20시 이후에는 선불로 계산하신다고 한다. 그리고 메뉴는 단일 메뉴로 대구탕 하나만 판매하며, 가격은 14,000원. 솔직히 대구탕 치고 싼 가격은 아니다. 별채에 안내받았음에도 불구하고, 벽에 연예인들의 사인이 한가득 한 것을 확

[맛집] 부산 기장 형제가든 (feat. 애견동반 가능) 기장 한우 맛집 [내부링크]

기장에서 고기 먹고 싶을 때 방문하는 형제가든 후기 주소 : 부산 기장군 철마면 석길길 16-6 형제정육점 영업시간 : 매일 11:00 ~ 21:00 인스타 주소 : https://instagram.com/bro_garden?igshid=MzRlODBiNWFlZA== 형제가든(@bro_garden) • Instagram 사진 및 동영상 팔로워 4,327명, 팔로잉 2,629명, 게시물 1,172개 - 형제가든(@bro_garden)님의 Instagram 사진 및 동영상 보기 instagram.com 형제가든은 한우로 이름난 철마 지역에서 20년간 영업해온 음식점으로, 투뿔 한우 암소만 취급한다고 해요. 주차장도 아주 넓어서 주차 걱정은 없었어요. Previous image Next image 형제가든은 이름답게 넓은 정원을 가지고 있어요. 독특하게도 보이는 기와집이 모두 고기를 먹을 수 있는 장소입니다 약간 시골에 온 것 같은 느낌을 받을 수 있지만, 기장에서는 바다밖에 안보이는데

[맛집] 쎄콩데 라이브(쎄콩데 live) 브런치 맛집 점심 방문 후기 [내부링크]

평일 점심에 방문한 쎄콩데 live 후기 주소 : 서울 성동구 서울숲2길 34 2층 영업시간 : 11:00 ~ 20:00 휴무 : 없음 쎄콩데 live 는 서울숲에서 브런치를 즐길 수 있는 몇 안되는 식당이에요. 통창 뷰를 가지고 있어서 서울숲에서 가장 핫한 거리를 한눈에 즐길 수 있어요. Previous image Next image 자리도 넉넉한 편이라 좋았어요. 다만, 제가 방문했을 때는 웨이팅이 없어서 바로 들어갔습니다. 원래는 점심에 웨이팅이 있기도 하니, 네이버 예약을 통해서 미리 예약하고 방문하시면 웨이팅 피해서 방문 가능합니다 ️ 하지만, 당일 예약은 안된다는 점!! 이점 유념해서 예약하시길 바라요. 예약 사이트 ️ https://m.booking.naver.com/booking/6/bizes/589799/items/4294627?area=plt 네이버 예약 :: 테이블 예약 쎄콩데의 특별한 미식 경험을 즐겨보세요. 2인,4인 테이블부터 최대 14인의 빅테이블까지 다양

[카페] 파주 운정 오누테 (ONUTE) 타르트 디저트 맛집 파주 카페 [내부링크]

파주에서 맛있는 구움과자, 타르트 디저트 류를 먹고 싶을 때 방문하는 오누테 후기 주소 : 경기 파주시 가람로21번길 38 1층 영업시간 : 10:00 ~ 22:00 휴무 : 월, 화 인스타 : https://instagram.com/onutable?igshid=MzRlODBiNWFlZA== 오누테 ONUTE(@onutable) • Instagram 사진 및 동영상 팔로워 3,662명, 팔로잉 360명, 게시물 1,037개 - 오누테 ONUTE(@onutable)님의 Instagram 사진 및 동영상 보기 instagram.com 오누테는 타르트, 생과일 케이크, 구움과자 등 디저트 로 유명합니다. Previous image Next image 오누테는 파주 운정에 위치한 카페로, 다양한 디저트와 음료를 판매해요. 외관도 우디하게 만들어서 부드러운 인상을 주고, 야외 자리도 준비되어 있어서 날씨가 풀리면 앉아서 이야기 하기 딱 좋았아요. Previous image Next image

[후기] 한양밀떡 사러 공장 방문한 후기 [내부링크]

떡볶이에 꽤나 진심인 나는 떡볶이에 들어갈 떡을 마트에서 사면 항상 부족하다 생각했었다. 그래서 유튜브나 블로그를 찾아보니 판밀떡을 사면 정말 맛있다구 하는 말을 접수...! 추가 정보로는 인천 3 대장 떡볶이 집에서도 이 한양 밀떡을 사용해서 만든다는 이야기를 찾았고, 기타 다른 떡볶이 맛집들에서도 많이 쓴더고 하더라.. 그래서 더더욱 한양밀떡을 구매해야겠다고 생각했다! 그래서.. 파주로 고고! 생각보다 정말 외진 곳에 위치하던 한양식품.. 이곳의 대표 상품은 숏다리가 있다! 근데 숏다리가 공장 직매입으로 구매가 가능한지는 모르겠다. 무튼, 난 여기서 “판밀떡” 을 사러 왔다. 영롱한 판밀떡의 자태... 판밀떡 구매방법은 글 하단에 적어두겠다. 갓 만든 떡이라 그런가 정말 뜨끈해서 차 트렁크에 싣을때 데이는 줄 알았다. 날이 덥다보니 혹시라도 떡이 상할 까봐 아이스박스에 떡을 넣어서 집으로 왔다. 진짜 갓 나온 떡이라서 집까지 오는데 40분? 정도 걸렸지만, 전혀 식지 않았고 그저

[맛집] 운정/가람마을 다미초밥 가성비 초밥맛집 돈까스 냉모밀 현지인추천 [내부링크]

운정에서 초밥 먹고 싶을 때 방문하면 좋을 다미초밥 방문 후기 주소 : 경기도 파주시 가람로 21번길 52-11 영업시간 : 11:30 ~ 22:00 휴무 : 화요일 다미초밥의 돈까스는 수제로 만들어진다고 해요. 자리는 넉넉한 편이였고, 점심시간이 지난 시간이였지만 빈자리가 없을 정도로 가득찬 공간이였어요. Previous image Next image 메뉴는 다음과 같습니다. 주말에도 세트 메뉴가 가능해서 저렴하게 초밥을 즐길 수 있다는게 큰 장점이였어요. 저희는 여기서 "다미세트" 와 "냉모밀 세트 A" 를 주문했어요. 주문을 하면, 주방장님께서 신선한 식재료들로 초밥을 만들어주셔요~ 뒷편에서는 돈까스나 냉모밀 같은 요리를 해주셨어요. 오픈 키친이라 믿고 먹을 수 있다는게 큰 장점이였어요 저희가 시킨 메뉴가 나왔어요. 위에부터 "냉모밀 세트 A", 그리고 "다미세트"에요. 다미세트에 원래 우동도 나오는데 조금 늦게 나오느라 같이 사진찍지는 못했어요 ㅠㅠ Previous image

[맛집] 행주산성 한정식 맛집 호박오리구이 고야 [내부링크]

부모님이 참 좋아하시던 호박오리구이 고야 방문후기 주소 : 경기도 고양시 덕양구 행주산성로 31 영업시간 : 12:00 ~ 21:00 후뮤 : 없음 고야는 국내산 오리만을 취급한다고 해요. 주차장도 넓직해서, 주차걱정도 없었구요~ Previous image Next image 자리도 꽤나 많은 편이라서 단체 손님도 문제 없었어요! 처음에 방문하면 이렇게 자리가 셋팅되어 있어요 깔끔한 셋팅 ㅎㅎ 고야의 메뉴를 소개합니다. 고야의 가장 대표 메뉴는 ”호박오리구이“ 에요. 호박오리구이는 말그대로 단호박에 오리훈제바베큐를 넣어 구워 만든 요리에요. 그다음으로는 호박이 싫다 하시면 “오리훈제바베큐”를 추천드리고, 만약에 추억돋는 대나무통밥(죽통밥)이 드시고 싶다면, 고기 없이 밥만 시키실 수 있어요. 이 밥도 진짜 진짜 맛있답니다 고야의 차림상을 소개할게요. 밑반찬은 총 7가지로 다양한 반찬이 제공되었어요. 밑 반찬들은 모두 직접 만드시는 것 처럼 보였어요. 반찬 하나하나 다 정성이 가득들

[카페] 나무휴식 bake29s 고촌 디저트 맛집 애견동반 예스키즈존 숲뷰 카페 [내부링크]

김포 고촌에 위치한 애견동반가능 카페 bake29s 를 다녀왔어요. 주소 : 경기 김포시 고촌읍 태리로 121 Bake29s 영업시간 : 10:30 ~ 19:00 휴무 : 매주 화요일 나무휴식은 3가지 공간이 조합된 장소에요. 그중 카페는 “Bake29s”, 애견 동반 가능한 공간은 ”도그플레이 그라운드“, 그리고 공유 스페이스인 ”상원홀“ 로 이뤄져있어요. 나무휴식은 3가지 공간이 조합된 장소로, 그 중 카페는 Bake29s 이에요. 저는 오늘 Bake29s 에 방문했기에 이 장소에 대한 리뷰를 진행할게요. 우선 입구에 들어가면 이정표가 어디로 가야하는지 안내해줘요. 자리를 먼저 잡으시고, 카페에서 주문하시길 추천드려요. 별관에 자리가 생각보다 넉넉하진 않더라구요c Previous image Next image 카페 입구는 이렇게 생겼습니다! 카페는 노키즈 존으로 운영되니, 어린 자녀를 동반하신 분들은 별관에 자리를 잡으시면 돼요️ 카페 바로 옆에는 애견 동반이 가능한 ”도그 플레

프로티원 초코맛 내돈내산 리뷰 (feat. 셀렉스 프로핏 웨이프로틴) [내부링크]

프로티원 단백질 쉐이크 초코맛 리뷰 시작할게요 프로티원 쉐이크는 초코, 흑임자, 곡물, 녹차 맛으로 구성돼요 프로티원 단백질 쉐이크는 공식 홈페이지에서 구매 가능한데요! 같이 판매하는 보틀도 있어서 단백질 쉐이크를 타먹기 참 좋았어요. 보틀은 아래 사진처럼 BPA Free 제품이라 환경호르몬 의심 없이 사용할 수 있어요. 특히나, -30도 ~ 100도 까지 가능해서 차갑게도 가능하고, 뜨겁게도 가능해서 더 좋았어요 보틀에는 이렇게 눈금표시가 되어 있어요. Strong 은 진하게 먹는 부분으로 150ml 정도를 의미하고, Soft는 연하게 먹는 부분으로 200ml 정도를 의미해요. 저는 사실 200ml 정도 넣어서 주로 먹는 편인데 충분히 진하다고 생각했어요. 여러번 드셔보시면서 선호하는 용량을 선택하시면 될것 같아요! 이제 진짜 프로틴 쉐이크 리뷰를 진행할게요~ 프로티원의 쉐이크 초코맛은 정말 곱디 고운 가루 형식으로 생겼어요. 이 가루가 물에도 정말 잘 섞이는데 아래에서 보여드릴게

[맛집] 구월동 닭볶음탕 맛집 홍미집 [내부링크]

구월동 닭도리탕 맛집 홍미집에 다녀온 후기 주소 : 인천 남동구 인하로507번길 14 1층 104호 영업시간 : 11:00 ~ 23:00 휴무 : 없음 Previous image Next image 홍미집은 구월동에 위치한 닭도리탕 맛집 Previous image Next image 홍미집의 인테리어는 정말 세련되게 생겼어요. 조명과 벽지등이 화려하지만 잘 어울렸고, 모든 자리가 인덕션으로 다 셋팅되어 있어서 어린 아이들과 방문해도 좋을 것 같았습니다.️ Previous image Next image 주류도 셋팅되어 있고, 셀프바가 있어서 원하는 추가 반찬을 리필 하기가 쉬웠어요. 셀프바에 앞치마가 있으니, 필요하신 분들은 미리 챙기시는 센스 홍미집에는 모든 자리마다 주문할 수 있는 테블릿이 놓여있어서 직원분들을 콜하지 않아도 되서 편했어요 ㅎㅎ 그럼 구월동 닭볶음탕 맛집 홍미집의 메뉴판 보여드릴게요~ Previous image Next image 여기 까지가 셋트메뉴! Previ

스픽 헌드레드 클럽 챌린지 후기 (feat. 200일 이상 사용중!) [내부링크]

스픽 헌드레드 클럽 챌린지 후기 스픽은 헌드레드 클럽 이라는 찐 애청자(?)를 위한 클럽이 있는데요! 스픽을 100일 연속 사용해서 공부하면 헌드레드 클럽이라고 불러요. tmi. 하루는 못들어도 다음날 강의를 2개 들으면 불꽃을 유지해줘요. 하지만, 2번 이상 못들으면 1일부터 초기화 됩니다... 헌드레드 클럽이 되면 위에 있는 사진처럼 헌드레드 클럽과 귀여운 불꽃이가 딱 그려져 있는 티셔츠를 준답니다 ㅎㅎ 기존에는 티셔츠만 제공되던 헌드레드 클럽인데, 이번에 헌드레드 클럽을 위한 챌린지를 열었고, 좋은 기회로 100명뿐인 챌린지에 참가하게 되어서 그 후기를 작성해 봅니다 ㅎㅎ 이번 헌드레드 클럽 챌린지는 10일 챌린지 일정으로 준비됐어요! 8/23 부터 9/1 까지 진행됐고, 챌린지를 마치고 9/2 에는 오드리와의 Live 줌을 진행했어요!! 오드리와의 만남은 밑에서 더 자세히 풀게요c 그 전에 이번 헌드레드 클럽 챌린지에서 나왔던 미션들을 공개합니다 이렇게 챌린지는 담당자님께서

[맛집] 십정동 통닭맛집 계림원 누룽지통닭구이 동암역점 [내부링크]

십정동 통닭 맛집 계림원 동암역점에 방문한 후기 시작할게요 주소 : 인천 부평구 열우물로25번길 10 영업시간 : 17:00 ~ 02:00 (금토일은 03:00 까지) 휴무 : 없음 계림원 동암역점은 동암역 바로 앞 골목에 위치해 있어요 동암역 앞에 위치해 있다보니 접근성이 좋다고 생각해요. 누룽지 통닭을 구울 때 사용하는 장작이 가게 앞에 놓여져 있어서 장작불로 구워서 만드시는 것을 유추해 볼 수 있었어요. 이 장작들 덕분에 장작불에 굽는다고 느껴졌어요 ㅎㅎ 계림원 동암역점의 메뉴판 이에요. 가장 잘나가는 메뉴는 세트메뉴 라고 하시네요 ㅎㅎ 세트메뉴는 "통닭" + "물/비빔국수" 로 구성되어요. 여러분이 원하는 메뉴를 조합해서 선택하면 되는 구조에요. 저는 치즈콘닭 세트메뉴를 선택했어요. "치즈콘닭" + "비빔국수" 각각의 메뉴에 해당되는 사진은 위와 같습니다! 누룽지 통닭이 가장 기본이 되는 통닭이고 콘닭은 누룽지 통닭 + 옥수수콘 조합, 치즈콘닭은 콘닭 + 치즈 가득 조합, 매

[맛집] 강화도 냉면 한식 맛집 진주옥 [내부링크]

여름이 끝나가는 무렵 강화도 냉면 맛집 진주옥에 다녀왔습니다! 주소 : 인천 강화도 화도면 해안남로 2875 영업시간 : (평일) 10:00 - 20:00 (주말) 09:00 - 20:00 휴무 : 수요일 진주옥은 강화도 마니산 근처에 위치한 진주냉면 전문점이에요. 진주옥의 내부는 넓고 쾌적한 느낌을 가지고 있어요. 모든 자리가 4인석으로 되어 있어서 가족단위로 방문하셔도 편하게 식사하실 수 있어요. 테이블은 총 13개 이상 있었어요. 진주옥의 메뉴판은 다음과 같아요. 진주옥에서 가장 잘나가는 메뉴는 육전 섞음냉면 육회비빔밥 육전 이라고 하셨어요 ㅎ️ 육전 섞음냉면은 물냉면과 비빔냉면이 섞인 냉면이라고 해요. 좀 더 구체적으로 설명하면, 부산에 있는 물 비빔 밀면과 비슷해요. 처음 방문하시는 분들은 육전 섞음냉면을 추천한다고 하셔요! 진주옥 냉면육수는 한우 양지와 각종 해산물을 사용해서 만든 육수를 사용한다고 해요. 그래서 육수의 맛이 굉장이 감칠맛이 가득한 점이 특징인것 같았어요

런드리고 첫이용 할인 팁(feat. 첫고객은 이불빨래 0원!) [내부링크]

오늘은 런드리고를 사용한 후기를 작성해 볼게요!! 런드리고는 방문 세탁 수거 및 배달 서비스를 제공해요. 런드리고는 다림질을 하기 어려운 1인 가구나, 이불빨래가 어려운 가구, 또는 세탁에 어려움을 겪는 가구를 위해 도움을 줄 수 있는 유용한 세탁 서비스 어플이에요. 이 세탁서비스에는 다양한 품목이 세탁 가능해요. 세탁 가능한 품목은 아래와 같아요. “와이셔츠, 일반셔츠, 바지, 니트, 스웨터, 티셔츠, 블라우스, 원피스, 점퍼, 커버, 이불 패드, 코트, 가디건, ...” 일반 세탁소에 맡기는 품목들이 다 된다고 생각하시면 됩니다. 다만, 불가능한 제품들도 있으니 런드리고의 가격표를 꼭 참고해주세요. 이렇게 유용한 세탁 서비스지만, 처음 들어보시거나 처음 사용해보시는 분이 계실것 같아요. 이런 분들을 위한 런드리고의 첫고객을 위한 서비스를 소개할게요! 런드리고라는 서비스를 처음으로 이용하시는 분들은 이불빨래가 0원이에요! (기간 : 9월30일 까지) 첫이용 고객을 위한 자세한 혜택

[리뷰] 구월동 공방 실내데이트 로제포슬린갤러리 (그릇만들기) [내부링크]

오늘은 구월동 실내데이트 코스인 로제포슬린 갤러리에 방문한 후기를 작성해볼게요. 로제포슬린갤러리 주소 : 인천 남동구 성말로53번길 9-11 1층 로제포슬린 영업시간 : 12:00 ~ 22:00 휴무 : 일요일, 월요일 주차장 : 없음 로제포슬린갤러리는 그동안의 그릇 만들기 데이트 코스와는 다르게 포슬린 페인팅을 중점으로 하는 곳이에요. 포슬린 페인팅에서 할 수 있는 활동은 "라인 그림", "붓으로 그리는 그림", "포슬린 마카펜", "전사지 작업" 총 4개의 작업중 한가지를 선택하면 됩니다. 저는 여기서 "전사지 작업", 그리고 "붓으로 그리는 그림" 을 선택했어요. 포슬린페인팅은 유액이 이미 발려진 그릇을 꾸미는 것을 의미해요 구월동 공방인 로제 포슬린 갤러리는 1인당 5만원의 비용이 들어요. 이 비용에는 그릇값, 그림그리는 값, 그리고 에프터눈 티 세트(미니)가 포함되어요! 여기는 그릇을 만드는 구월동 공방으로 유명하지만, 사장님이 홍차나, 꽃차 관련으로 정말 잘 알고 계셔서

[맛집]완정역돈까스 맛집 설카츠 (feat. 청귤소바) [내부링크]

인천에서 청귤소바 와 제주 돈까스를 맛볼 수 있던 설카츠 리뷰 시작할게요 ~! 주소 : 인천 서구 청마로51번안길 6 1층 설카츠 영업시간 : 11:00 ~ 20:30 휴무 : 정기 휴무 없음. 다만 가게 앞 영업안내 표 있음 주차장 : 가게 뒷편 길가에 주차 완정역에 위치한 돈까스 맛집 설카츠는 제주산 돼지고기만 취급한다고 해요. 그래서 가게 문 앞에도 귀여운 제주 귤 모자를 쓴 돌하르방이 손님들을 맞이하고 있어요 ㅎㅎ 가게의 휴무나 영업 시간은 가게 문앞에 영업 시간 안내표를 참고하시면 좋아요 ! 그럼 가게 안으로 들어가볼게요. 가게에는 테이블이 9개 정도 준비되어 있고, 넓은 4인 좌석으로 구성되어 있어서 가족끼리 방문해서 식사하기 참 좋아요. 게다가 오픈 키친으로 이뤄져 있어서 음식이 너무 깨끗하게 만들어지고 있는 모습을 확인할 수 있답니다. 완정역돈까스 맛집 설카츠의 메뉴에요. 돈까스 대표메뉴는 상등심카츠 (등심카츠에 지방층이 붙은 고급 부위) 등심카츠 안심카츠 치즈카츠 코

[맛집] 구월동 초밥 맛집 참새초밥 (feat. 연어초밥, 후토마끼) [내부링크]

오늘은 구월동초밥 맛집 참새초밥에 다녀온 후기에요 구월동에 위치한 연어초밥이 유명한 참새초밥 주소 : 인천 남동구 성말로44번길 32 1층 영업시간 : 11:00 ~ 22:00 휴무 : 없음 주차장 : 없음 (인근 도로에 대면 됩니다) 구월동에 위치한 참새초밥은 테이블링 시스템을 이용하고 있어서 빠르게 주문할 수 있어요. 그리고 매장에 좌석이 많은 편이라 4인 가족끼리 방문해도 좋아요. 내부는 우디한 분위기로 이뤄져 있어서 일본 가정식당 같은 포근한 분위기를 가지고 있어요! 각각의 테이블에는 가지런하게 셋팅이 준비되어 있어요. 너무 귀여웠던 부분이 냅킨 보이시나요?! 방문한 곳이 참새초밥임을 냅킨으로도 확인할 수 있어요! 초밥 메뉴를 보기전에 더 맛있게 즐기는 방법도 빼놓을 수 없죠~ 그리고, 원산지까지! 문학경기장초밥 맛집인 참새초밥은 전국 각지에서 오는 친환경 식재료로 음식을 만든다고 해요. 본격적으로 메뉴 보여드릴게요~ 참새초밥의 메뉴는 크게 초밥 후토마끼 소바 그리고, 식사

[맛집] 완정역맛집 라쿵푸마라탕 (feat. 깨끗한 매장!) [내부링크]

오늘은 완정역에 위치한 라쿵푸마라탕에 방문한 후기에요~! 주소 : 인천 서구 청마로19번길 21 2층 204호 영업시간 : 11:00 ~ 22:00 휴무 : 없음 주차장 : 건물 아래 주차장 라쿵푸마라탕 당하동점은 매일 아침 들어오는 신선한 재료만을 사용하시고, 오픈키친이라 매우 청결한 매장이에요. 라쿵푸마라탕 당하동점은 매일 새로운 야채를 채우시고, 오픈 주방으로 이뤄져 있어서 기존의 마라탕 가게가 가지던 편견을 깨부시던 곳이에요. 제가 아래에서 사진 보여드릴게요! 매장이 정말 깨끗하고 특히나 주방이 정말 깨끗했어요. 사장님께서도 오픈 키친으로 운영하셔서 음식이 깨끗하게 조리되는 과정을 지켜볼 수 있었어요c 요즘 아이들 마라탕 정말 좋아하는데 이런 매장이라면 믿고 먹일 수 있을 것 같아요c 그래서 그런지 제가 방문했을 때는 아이들 손님도 정말 많았고, 아이들과 부모님이 함께 방문하는 손님들도 많았어요! 그만큼 다들 믿고 방문하신다는 의미겠죠!? 라쿵푸마라탕당하동점 의 메뉴에요. 마

[맛집] 가정동 곱창 인천야채곱창 맛집 종로야채곱창&닭갈비 [내부링크]

오늘은 가정역에 위치한 종로야채곱창&닭갈비에 다녀온 후기를 적어볼게요! 시작전에 말씀드리면 야채곱창 정말 맛있었어요 그럼 시작합니다! 주소 : 인천 서구 염곡로498번안길 5-18 1층 종로야채곱창닭갈비 영업시간 : 11:00 ~ 22:00 휴무 : 월요일 주차공간 : 있음. 인근 공간에 다 대도 되서 편한편! 가정역 4번 출구 근처에 위치한 가게는 대중교통으로 방문하기 쉬운 편이였어요. 가게가 정원처럼 잘 꾸며진 느낌이라서 인테리어가 굉장히 시원해보이는 느낌을 줬답니다. 좌석도 널널하고 테이블이 15석 이상이라 단체손님들도 편하게 방문 가능할 것 같아요. 가게에 대형 TV 도 있어서 아시안게임과 같은 축구경기 보기도 아주 좋았습니다! 셀프바도 같이 운영하고 계셔서 부족한 반찬이 있으면, 편하게 추가로 가져오면 되는 시스템이였어요. 반찬들이 다양하고, 집밥같은 느낌이라서 더 맛있게 느껴졌어요. (집밥같다고 하면 극찬인거 아시죠?ㅎㅎ) 물론, 처음 셋팅은 해주십니다 그럼 메뉴 보고

[맛집] 분위기 좋은 구월동 파스타 맛집 보통날의파스타 [내부링크]

안녕하세요. 오늘은 구월동에 분위기 좋은 파스타 맛집에 다녀온 리뷰를 작성해보려해요. 우디한 인테리어를 가지고 있어서, 더더욱 분위기가 좋다고 느껴진 구월동파스타 맛집 입니다. 주소 : 인천 남동구 예술로 230 청진네오스빌 B02 영업시간 : 10:30 - 21:30 (20:30 라스트오더) 휴무 : 없음 주차장 : 상가 주차장 이용 Previous image Next image 구월동파스타 맛집인 보통날의파스타의 메뉴에요. 음료가 정말 저렴했고, 와인도 같이 판매하고 계셔요. 파스타는 오일, 토마토, 크림 모두 다 가능했구요. 특히나 직접 만드시는 피자도 같이 주문 가능합니다 ㅎㅎ. 보통날의 파스타는 현금으로 주문하시면 더 저렴하게 드실 수 있어요. 그리고 너무 좋았던 점이, 세트메뉴가 주말에도 가능하다는 점인데요! 저희도 세트메뉴로 주문해보았어요. 메뉴를 보여드리기 전, 매장에 준비된 셀프코너와 주방 보여드릴게요~ 셀프코너에는 다양한 집기류들이 준비되어 있구요. 추가로 드실 수

S3 bucket에 있는 folder 파일 전체 다운 받기 IOError: [Errno 2] No such file or directory: 'my_folder/.8Df54234' [내부링크]

s3 bucket 에 있는 folder를 전체 다운 받고 싶을 때 사용하면 되는 코드를 작성해보려고 한다. import boto3 import os def downloadDirectoryFroms3(bucketName, remoteDirectoryName): # bucketName = s3 버킷 이름 # remoteDirectoryName = 버킷에 폴더 이름 s3_resource = boto3.resource('s3') bucket = s3_resource.Bucket(bucketName) for obj in bucket.objects.filter(Prefix = remoteDirectoryName): if not os.path.exists(os.path.dirname(obj.key)): os.makedirs(os.path.dirname(obj.key)) bucket.download_file(obj.key, obj.key) # save to same path IOError: [Er

ValueError: Input is not valid. Should be a string, a list/tuple of strings [내부링크]

Error ValueError: Input is not valid. Should be a string, a list/tuple of strings or a list/tuple of integers. 발생 포인트 huggingface load_dataset 을 한 이후에 모델을 학습시키는 과정에서 발생한 에러다. 내 경우에는 학습 데이터셋을 tokenize 하는 파트에서 발생되었다. 문제가 발생했던 코드 from datasets import Dataset import pandas as pd testset = datasets.load_dataset('csv', data_files=os.path.join(path, i)) model = "distilbert-base-uncased" tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased') def tokz(x): return tokenizer(x['Phrase'],

aws s3 파일 & 폴더 다운로드 받는 방법 (with.CLI 자격 증명 / configure) [내부링크]

오늘은 aws s3에 올라간 파일이나 폴더를 다운받는 방법을 소개해드리려 합니다. 본격적으로 다운로드 받기 전에 aws 의 iam Access Key와 Access Secret Key 를 알고 계셔야 합니다. 본 포스팅에서는 Access Key와 Access Secret Key를 알고 계시다는 전제하에 작성해 볼게요. 1. aws CLI 자격 증명하기 Access Key와 Access Secret Key 를 직접 하드코딩해서 코드에 녹여내면, Secret Key도 노출이 되기 때문에 config로 적어주는게 안전합니다. 이때 사용하는게 aws configure 명령어 입니다. aws configure 이렇게 작성하면 Access Key ID, Secret Access Key, Default Region name, output format 에 해당되는 configure를 구성하게 됩니다. Access Key ID, Secret Access Key : aws IAM 콘솔에서 찾을 수 있