묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 웹 MVC
getServletContext에 대한 질문이 있습니다.
HelloServlet.class에서 getServletContext를 사용하면 값을 못받아오고 request.getServletContext를 사용해야 값이 정상적으로받아집니다 강의에서는 request 객체를 사용안해도 정상적으로 작동되는데 왜그런가요
-
미해결Vue.js 시작하기 - Age of Vue.js
컴포넌트 통신 mvc모델 문제??
수업중에 말씀하시는 (컴포넌트간 통신할 때 ) mvc 모델에서 문제가 있었다는게 구체적으로 어떤 의미인가요?
-
미해결홍정모의 따라하며 배우는 C언어
크기에 대해!
8분 47초에서 제가 sizeof를 str1에 사용하였는데 분명 5글자라 \0이 있다해도 6이라 생각하고 있었는데 Hello가 6이 아니라 10으로 나옵니다. 커서를 가져다 대도 10이 나옵니다. 이유가 무엇일까요 ㅜㅜ?
-
해결됨디지털 포렌식 (Digital Forensic) 전문가 과정
(추가)침해사고메모리분석사례-HFS웹서버취약점-파일다운로드
삭제된 글입니다
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
Gun Script (5/6) 질문입니다
var fireDirection = aimTarget - fireTransform.position Shot(fireTransform.position, fireDirection); 목표 지점에서 총구 지점 뺴면 그 거리와 방향이 나오잖아요? 그런데 Shot함수 내에서 hitPosition = startPoint + direction * fireDistance; 라고 마지막에 해버리던데, 시작 포인트에서 방향을 더하는 것까지는 알겠는데 그 방향에 fireDirection으로서 거리까지 다 포함되어 있는데 거기에 더해서 fireDistance를 곱하는 게 이해가 안 갑니다.. direction이 단위 방향이라면 이해가 가겠는데 말이죠..
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
LayerMask
API 검색해보니까 bit마스크라고 그러던데 만일 어떤 레이어1을 표현하는 2진수가 101010이면 처리되는 오브젝트 검사해서 101010레이어에 속해 있으면 레이어에 포함된 거로 친다고 하면요, ~ 붙여서 010101로 바꿔버리면, 그래서 Physics.Raycast(startPoint, direction, out hit, fireDistance, ~101010(=010101)) 했다고 치면 010101 레이어에 속해 있는 오브젝트들만 반응해야 하는 거 아닌가요?? ~ 연산자가 정확히 어떻게 되는 거죠?? 실제로는 101010이 아닌 레이어들 몽땅에게 적용되던데 비트 뒤집기라고 하면 010101인 레이어만 적용되어야 하는 거 아닐까요?
-
해결됨선형대수학개론
갑분 삼각함수?
1.8 9:54초 이 부분에서 왜 갑자기 Identical Matrix의 vector들이 코사인과 사인으로 변신하는지 이해가 되지 않습니다... 이해하기 위한 선행지식으로 삼각함수가 필요한 내용일까요? 어느정도는 아는데 여기선 잘 모르겠네요 ㅜ
-
해결됨스프링 부트 개념과 활용
구글검색법
강의 중간(3:10)에 modelmapper 링크 드래그 하셔서 바로 구글로 검색하시던데, 편해보이네요.ㅎㅎ 어떻게 하는 건가요?
-
미해결파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기
처음부터 그대로 따라하고있는데 콘솔창 실행이안되네요
def~ print ('hi')까지도 실행해보고 전체도실행해봤는데 피니쉬라고만 되고 동영상처럼 프로그램은 안뜨네요.. 그전강의부터 쭉 동영상 그대로 보면서 똑같이 했는데 뭐가문제일까요?
-
미해결홍정모의 게임 만들기 연습 문제 패키지
탱크예제에 포탄 발사소리
연습문제 중에 탱크예제에 포탄발사 소리를 넣으려고 하는데 해당 강의에서 배운 내용을 바탕으로 bulletSound()라는 함수를 만들고 if (isKeyPressedAndReleased(GLFW_KEY_SPACE)) { for (int i = 0; i < 5; ++i) { if (bullet[i]==nullptr) { bullet[i] = new MyBullet; bulletSound(); bullet[i]->center = tank.center; bullet[i]->center.x += 0.2f; .... 이런식으로 스페이스바 누르면 총알 나가는 구조 안에 bulletSound()를 추가했습니다. 그런데 이렇게하면 bulletSound() 함수 안의 while문(노래끝났으면 break;) 때문에 효과음이 끝나고나서야 총알이 발사가 됩니다. bulletSound()함수를 뒤에 위치시켜도 똑같은 결과가 나오구요. while문을 없애면 소리가 안나오고, if(!playing) break; 조건을 없애서 while(true) { system->update(); } 로 하자니 무한반복으로 계속 돌고 어떤 방법을 이용해야 총알과 소리가 같이 나올 수 있을까요 제가 놓치고 있는게 뭔지 알려주시면 감사하겠습니다.
-
미해결파이썬 데이터시각화 분석 실전 프로젝트
크리애플 사이트에서 리소스를 찾지 못하겠습니다.
어디를 말씀하시는지 모르겠습니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence.xml 관련 질문입니다 :)
현재 프로젝트를 gradle로 진행하고 있어서 gradle로 실습을 따라가고 있습니다. persistence.xml 의 내용이 gradle의 application.yml과 유사하다고 느껴지는데 동일한 역할을 수행하는 건가요?? 좋은 강의 감사합니다
-
미해결Adobe Premiere Pro CC 2018, 2019 영상편집의 입문 Part.1
바로 전 시간에 강제로 프레임 레이트 바꿔서 작업하면
아주 안좋다고,,,렌더링 할 때나 오디오 쪽으로도 문제가 발생할 수 있다고 그런 습관 들이지 말라고 하지 않으셨나요....? 갑자기 다음 강의 시작하자마자 마스터 프레임을 정한다면서 바꿔서 작업하시니 뭐가 뭔지 1도 모르겠어요;
-
미해결남박사의 파이썬 기초부터 실전 100% 활용
터미널에서 실행이 되지 않습니다,,,,
새로 파일을 불어와서 해 봐도 그냥 다음 칸으로 넘어가기만 하네요
-
미해결홍정모의 따라하며 배우는 C언어 (부록)
1번 실행하면 에러가 뜨는데 이유를 모르겠습니다..
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define TSIZE 45 #define LMAX 10 struct movie { char title[TSIZE]; float rating; }; void read_file(struct movie movie_list[], int* ptr_n_items) //값 바꿀수 잇어야 하므로 포인터로 저장 { char filename[TSIZE] = { 0, }; //버퍼역할을 하는 문자의 배열 printf("읽기위한 파일 이름 입력후 엔터 눌르셈"); printf(">>"); if (scanf("%[^\n]%*c", filename) != 1) { printf("Wrong input. Terminating\n"); exit(1); } FILE* file = fopen(filename, "r"); if (file == NULL) { printf("에러 : 파일 열 수 없음"); exit(1); } int num; //파일 몇개인지 읽는 거 if (fscanf(file, "%d%*c", &num) != 1) { printf("ERROR: 잘못된 파일 포맷"); exit(1); } for (int n = 0; n < num; ++n) { if (fscanf(file, "%[^\n]%*c", movie_list[*ptr_n_items].title) != 1 || fscanf(file, "%f%*c", &movie_list[*ptr_n_items].rating) != 1) { printf("ERROR 잘못된 파일 형식"); exit(1); } *ptr_n_items += 1; } assert(*ptr_n_items == num); fclose(file); printf("%d items have been read from the file\n", *ptr_n_items); } void write_file(struct movie movie_list[], int n_items) { char filename[TSIZE] = { 0, }; printf("파일 이름 입력하고 엔터 쳐주세요"); printf(">>"); if (scanf("%[^\n]%*c", filename) != 1) { printf("Wrong input . Terminating\n"); exit(1); } FILE* file = fopen(filename, "w"); if (file == NULL) { printf("ERROR : 파일 못염\n"); exit(1); } fprintf(file, "%d\n", n_items); for (int n = 0; n < n_items; ++n) { fprintf(file, "%s\n", movie_list[n].title); fprintf(file, "%f\n", movie_list[n].rating); } fclose(file); printf("%d items have been saved to the file\n", n_items); } int input_int() //사용자로부터 정수 입력 받는 경우 많기떄문에(자주 사용해서 하나 만듬) { int input; while (1) { printf(">>"); if (scanf("%d%*c", &input) == 1) return input; else { printf("숫자 입력후 엔터 눌러주세요\n"); while (getchar() != '\n') continue; } } } int input_menu() { while (1) { printf("\n 옵션 선택후 엔터 눌러주세요\n"); printf("1.print all items 2. print an item\n"); printf("3.Edit an item 4. add an item\n"); printf("5.insert an item 6.delete an item\n"); printf("7.delete all items 8.save file\n"); printf("9.search by name 10.quit\n"); int input = input_int(); if (input >= 1 && input <= 10) return input; else printf("%d is invalid. please try again\n", input); } } void print_all(struct movie movie_list[], int n_items) { for (int n = 0; n_items; ++n) printf("%d: \"%s\", %.1f\n", n, movie_list[n].title, movie_list[n].rating); } void print_an_item(struct movie movie_list[], int n_items) { printf("Input the index of item to print\n"); int index = input_int(); if (index < n_items) printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); else printf("invalid items\n"); } void edit_an_item(struct movie movie_list[], int n_items) { printf(" 수정하기 위한 아이템의 인덱스를 입력하세요"); int index = input_int(); if (index < n_items) { printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); printf("새 타이틀 입력후 엔터 쳐주세요"); printf(">>"); int f = scanf("%[^\n]%*c", movie_list[index].title); printf("새 평점 입력후 엔터 쳐주세요"); printf(">>"); f = scanf_s("%f%*c", &movie_list[index].rating); printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); } else printf("invlaid items\n"); } void add_an_item(struct movie movie_list[], int* ptr_n_items)//n_items is a pointer { if (*ptr_n_items == LMAX) { printf("NO more space\n"); return; } const int index = *ptr_n_items; printf("타이틀 입력후 엔터\n"); printf(">>"); int f = scanf("%[^\n]%*c", movie_list[index].title); printf("평점 입력후 엔터\n"); printf(">>"); f = scanf("%f%*c", &movie_list[index].rating); printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); *ptr_n_items += 1; } void insert_an_item(struct movie movie_list[], int* ptr_n_items) { if (*ptr_n_items == LMAX) { printf("공간 없음"); return; } printf("아이템 인덱스 입력"); int index = input_int(); //memmove(&movie_list[index+1], &movie_list[index], //sizeof(struct movie) * (*ptr_n_items -index)); /*for llop implemetation*/ for (int i = *ptr_n_items - 1; i >= index; i--) { strcpy(movie_list[i + 1].title, movie_list[i].title); movie_list[i + 1].rating = movie_list[i].rating; } //뒤에서 부터 한칸씩 앞으로 떙기는 거 printf("타이틀을 입력후 엔터 쳐주세요"); printf(">>"); int f = scanf("%[^\n]%*c", movie_list[index].title); printf("새 평점 입력후 엔터 쳐주세요"); printf(">>"); f = scanf("%f%*c", &movie_list[index].rating); printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); *ptr_n_items += 1; } void delete_an_item(struct movie movie_list[], int* ptr_n_items) { printf("아이템 인덱스 입력"); int index = input_int(); //memmove(&movie_list[index+1], &movie_list[index], //sizeof(struct movie) * (*ptr_n_items -index)); /*for llop implemetation*/ for (int i = index; i < *ptr_n_items; i++) { strcpy(movie_list[i].title, movie_list[i + 1].title); movie_list[i].rating = movie_list[i + 1].rating; } *ptr_n_items -= 1; } void search_by_name(struct movie movie_list[], int n_items) { printf("찾으려는 타이틀 입력"); printf(">> "); char title[TSIZE] = { 0, }; if (scanf("%[^\n]%*c", title) != 1) { printf("Wrong input\n"); return; } int index = 0; for (; index < n_items; ++index) { if (strcmp(movie_list[index].title, title) == 0) break; } if (index == n_items) printf("영화를 찾을 수 없읍니다 :%s\n", title); else printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); } int main() { struct movie movie_list[LMAX]; size_t n_items = 0; read_file(movie_list, &n_items); while (1) { printf("\n"); int s = input_menu(); switch (s) { case 1: print_all(movie_list, n_items); break; case 2: print_an_item(movie_list, n_items); break; case 3: edit_an_item(movie_list, n_items); break; case 4: add_an_item(movie_list, &n_items); break; case 5: insert_an_item(movie_list, &n_items); break; case 6: delete_an_item(movie_list, &n_items); break; case 7: n_items = 0; break; //& 있는애 있고 없는 애 있는데(n_items에서) 아이템 하나 추가 도ㅟ니까 값이 변해야 되므로 주솔르 넘겨준느 거. case 8: write_file(movie_list, n_items); break; case 9: search_by_name(movie_list, n_items); break; case 10: printf("Good bye\n"); exit(0); default: printf("%d is not implemented.\n", s); } } return 0; } 소스는 이렇게 다 따라 쳤는데 1번 실행하면 저렇게 에러가 뜨고 글자가 다 깨진 상태로 나오더라구요.. 이유를 알 수 있을까요?
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
TPS강의 관련
파티클은 어떻게 만드신 건가요???
-
미해결파이썬 레시피 - 웹 활용 입문편 (전자책 포함)
네이버 메일링 질문드립니다.
질문에 앞서 좋은 무료강의를 공유해주셔서 진심으로 감사드립니다. 강의 잘 따라가고 있는데 코드상 문제가 없는데 네이버에서 오류가 납니다. 제 추측으로는 네이버 로그인 인증 2단계(모바일에서 예를 눌러야 하는 기능)와 관련이 있는 것 같은데 파이썬 자동화로 네이버 메일링을 하려면 새로 계정을 만들어서 트라이 하는 것이 유일한 방법일까요?
-
미해결웹 게임을 만들며 배우는 React
this
안녕하세요 궁금한게 있는데요 class에서는 state를 변경할 때 this.state.value 이런식으로 this.state 를 써주었는데 Hooks에서는 this.state를 사용하지 않고 써주는 것도 class와 Hooks의 차이점 인가요?
-
해결됨React로 NodeBird SNS 만들기
댓글 기능에 db SELF JOIN을 걸어서 대댓글을 만들고 싶습니다.
module.exports = (sequelize,DataTypes) => { const Comment = sequelize.define('Comment', { content:{ type: DataTypes.TEXT, allowNull: false, }, isDeleted:{ type:DataTypes.BOOLEAN, allowNull:false, defaultValue:false, }, }, { charset :'utf8mb4', collate : 'utf8mb4_general_ci', }); Comment.associate = (db) => { db.Comment.belongsTo(db.User); db.Comment.belongsTo(db.Post); db.Comment.belongsTo(db.Comment,{as:'ReComment', foreignKey:'ParentId'}); }; return Comment;}; 다음과 같이 모델에 새로 관계 추가해줬구요 router.post('/:postId/comment/:parentId', isLoggedIn, async (req, res, next) => { // POST /api/post/10/comment/2 try { const post = await db.Post.findOne({ where: { id: req.params.postId } }); if (!post) { return res.status(404).send('\"message\": \"포스트가 존재하지 않습니다.\"'); } const comment = await db.Comment.findOne({ where: { id: req.params.parentId } }); if (!comment) { return res.status(404).send('\"message\": \"댓글이 존재하지 않습니다.\"'); } const reComment = await db.Comment.create({ PostId: req.params.postId, UserId: req.user.id, content: req.body.content, ParentId: req.params.parentId, }); await post.addComment(reComment.id); const comments = await db.Comment.findOne({ where: { id: reComment.id, }, include: [{ model: db.User, attributes: ['id', 'nickname'], }], }); return res.json(comments); } catch (e) { console.error(e); return next(e); }}); 다음과 같이 라우터에도 추가해줘서 대댓글이 잘 생성이 되긴 합니다. 그런데 대댓글의 데이터 셋을 뽑아올 때 sequelize로 어떻게 뽑아와야할 지 모르겠더라구요. 일단 제가 작성한 코드는 다음과 같습니다. router.get('/:id/comments', async (req, res, next) => { try { const post = await db.Post.findOne({ where: { id: req.params.id } }); if (!post) { return res.status(404).send('\"message\": \"포스트가 존재하지 않습니다.\"'); } const comments = await db.Comment.findAll({ where: { PostId: req.params.id, isDeleted:0, ParentId : null, }, order: [['createdAt', 'ASC']], include: [{ model: db.User, attributes: ['id', 'nickname'], include:[{ model:db.Image, attributes:['src'] }] }, { model: db.Comment, as:'ReComment', where: { ParentId: Comment.id //해결하고싶은 부분 } }], }); res.json(comments); } catch (e) { console.error(e); next(e); }}); 해결하고싶은 부분이 바로 저부분입니다. WHERE절에 db.Comment 의 id를 가져다가 사용하고싶은데요 어떤 함수를 사용해야하는지 공식문서를 찾아봐도 못찾겠더라구요 혹시 해결방법이 있을까요? 생 쿼리를 사용한다면 SELECT * FROM comments.Co SELF JOIN comments.Re ON Re.parentId = Co.id 이런 느낌이겠네요.
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
도와주십시오 선생님 ㅠㅠ
리스트 L에서 임의의 자료값 하나를 꺼내려고 했는데 TypeError: 'list' object is not callable 이라고 뜨네요 ㅠㅠ 그리고 맨처음 from은 왜 노랑 밑줄 쳐져있는 건가요?