묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결RPA로 자동화 천재되기 (UiPath 응용편)
For Each Row in Data Table 함수 문의
Input Dialog > Keyword 입력 > 데이터 스크래핑 > 컬럼명 : "검색어"로 저장 까지는 진행되었는데요 메모장에 Hash 값들이 입력이 안되고 robot이 종료됩니다. For Each Row in Data Table에 문제가 있는것 같은데 검토 부탁드립니다. ※메모장은 오픈해놓은 상태입니다.
-
미해결대세는 쿠버네티스 (초급~중급편)
Node Scheduling 이론 강의 영상이 누락된 것 같은데 확인 부탁드립니다.
[중급] Pod - Node Scheduling 이론 영상을 틀어도 실습 영상(13분44초)이 나옵니다. (Pod - Node Scheduling [실습] 영상을 틀어도 마찬가지로 중복된 13분 44초 강의 영상이 나옵니다.) 이론 영상이 누락된 것으로 보이는데 이론 영상 업로드 해주실 수 있나요? 확인 부탁드립니다.
-
미해결Nuxt.js 시작하기
v-model 사용시 $emit 키워드도 정해지나요?
props를 이용하여 데이터를 연동할때 v-model로 변경하게 되면 props의 키워드를 value로 변경 해야 했습니다. 이 경우 하위 컴포넌트로 받던 $emit도 input이라는 예약어(?)로 정해져 있나요? props의 키로 searchKeyword를 사용하면 @input="$emit('evtName', $event.target.value)" @evtName='somethingMethod' 이렇게 잘 동작했는데 props의 키를 value로 변경하게 되면 evtName로 바인딩이 안되고(물론 바인딩 할 대상이 없기도 하지만...) @input="$emit('input, $event.target.value)" 만 잘 동작 하네요. $emit 안에 있는 'input'이 정해진 규칙인건가요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
Cannot read property 'Likers' of null
고생이 많으십니다. 위 에러가 났는데 찾기가 너무 어려워서 올렸습니다. 찾는다고 찾았는데 두개의 이메일로 각각 게시글을 10개씩 썼는데도 막상 해당 post 주소로 들어가게 되면 이렇게 존재하지 않는 게시글(404)이라고 표시되고 있습니다. 그리고 콘솔창에 계속해서 Internal Server Error 500 에러 렌더링이 반복되고 있습니다. 코드는 routes/ post.js const express = require('express') const multer = require('multer') const path = require('path') const fs = require('fs') const { Post, Image, Comment, User, Hashtag } = require('../models') const { isLoggedIn } = require('./middlewares') const router = express.Router() try { fs.accessSync('uploads') } catch (error) { console.log('uploads 폴더가 없으므로 생성합니다.') fs.mkdirSync('uploads') } const upload = multer({ storage: multer.diskStorage({ destination(req, file, done) { done(null, 'uploads') }, filename(req, file, done) { // 제로초.png const ext = path.extname(file.originalname) // 확장자 추출(.png) const basename = path.basename(file.originalname, ext) // 제로초 done(null, basename + '_' + new Date().getTime() + ext) // 제로초15134314.png } }), limits: { fileSize: 20 * 1024 * 1024 } // 20mb }) router.post('/', isLoggedIn, upload.none(), async (req, res) => { // POST /post try { const hashtags = req.body.content.match(/#[^\s#]+/g) const post = await Post.create({ content: req.body.content, UserId: req.user.id }) if (hashtags) { const result = await Promise.all(hashtags.map((tag) => Hashtag.findOrCreate({ where: { name: tag.slice(1).toLowerCase() } }))) // [[노드, true], [리액트, true]] await post.addHashtags(result.map((v) => v[0])) } if (req.body.image) { if (Array.isArray(req.body.image)) { // 이미지를 여러개 올리면 image: [제로초.png, 부기초.png] const images = await Promise.all(req.body.image.map((image) => Image.create({ src: image }))) await post.addImages(images) } else { // 이미지를 하나만 올리면 image: 제로초.png const image = await Image.create({ src: req.body.image }) await post.addImages(image) } } const fullPost = await Post.findOne({ where: { id: post.id }, include: [{ model: Image }, { model: Comment, include: [{ model: User, // 댓글 작성자 attributes: ['id', 'nickname'] }] }, { model: User, // 게시글 작성자 attributes: ['id', 'nickname'] },{ model: User, // 좋아요 누른사람 as: 'Likers', attributes: ['id'] }] }) res.status(201).json(fullPost) } catch (error) { console.error(error) next(error) } }) router.post('/images', isLoggedIn, upload.array('image'), (req, res, next) => { // POST /post/images console.log(req.files) res.json(req.files.map((v) => v.filename)) }) router.post('/:postId/comment', isLoggedIn, async (req, res, next) => { // POST /post/1/comment try { const post = await Post.findOne({ where: { id: req.params.postId } }) if (!post) { return res.status(403).send('존재하지 않는 게시글입니다.') } const comment = await Comment.create({ content: req.body.content, PostId: parseInt(req.params.postId, 10), UserId: req.user.id }) const fullComment = await Comment.findOne({ where: { id: comment.id }, include: [{ model: User, attributes: ['id', 'nickname'] }] }) res.status(201).json(fullComment) } catch (error) { console.error(error) next(error) } }) router.get('/:postId', async (req, res, next) => { // GET /post/1 try { const post = await Post.findOne({ where: { id: req.params.postId } }) if (!post) { return res.status(404).send('존재하지 않는 게시글입니다.') } const fullPost = await Post.findOne({ where: { id: post.id }, include: [{ model: Post, as: 'Retweet', include: [{ model: User, attributes: ['id', 'nickname'] }] }, { model: User, attributes: ['id', 'nickname'] }, { model: Image }, { model: Comment, include: [{ model: User, attributes: ['id', 'nickname'] }] }, { model: User, as: 'Likers', attributes: ['id'] }, { model: Post, as: 'Retweet', include: [{ model: User, attributes: ['id', 'nickname'] }, { model: Image }] }] }) res.status(200).json(fullPost) } catch (error) { console.error(error) next(error) } }) router.post('/:postId/retweet', isLoggedIn, async (req, res, next) => { // POST /post/1/retweet try { const post = await Post.findOne({ where: { id: req.params.postId }, include: [{ model: Post, as: 'Retweet' }] }) if (!post) { return res.status(403).send('존재하지 않는 게시글입니다.') } if (req.user.id === post.UserId || (post.Retweet && post.Retweet.UserId === req.user.id)) { return res.status(403).send('자신의 글은 리트윗할 수 없습니다.') } const retweetTargetId = post.RetweetId || post.id const exPost = await Post.findOne({ where: { UserId: req.user.id, RetweetId: retweetTargetId } }) if (exPost) { return res.status(403).send('이미 리트윗했습니다.') } const retweet = await Post.create({ UserId: req.user.id, RetweetId: retweetTargetId, content: 'retweet' }) const retweetWithPrevPost = await Post.findOne({ where: { id: retweet.id }, include: [{ model: Post, as: 'Retweet', include: [{ model: User, attributes: ['id', 'nickname'] }] }, { model: User, attributes: ['id', 'nickname'] }, { model: Image }, { model: Comment, include: [{ model: User, attributes: ['id', 'nickname'] }] }, { model: User, as: 'Likers', attributes: ['id'] }, { model: Post, as: 'Retweet', include: [{ model: User, attributes: ['id', 'nickname'] }, { model: Image }] }] }) res.status(201).json(retweetWithPrevPost) } catch (error) { console.error(error) next(error) } }) router.patch('/:postId/like', isLoggedIn, async (req, res, next) => { // PATCH /post/1/like try { const post = await Post.findOne({ where: { id: req.params.postId }}) if (!post) { return res.status(403).send('게시글이 존재하지 않습니다.') } await post.addLikers(req.user.id) res.json({ PostId: post.id, UserId: req.user.id }) } catch (error) { console.error(error) next(error) } }) router.delete('/:postId/like', isLoggedIn, async (req, res, next) => { // DELETE /post/1/like try { const post = await Post.findOne({ where: { id: req.params.postId }}) if (!post) { return res.status(403).send('게시글이 존재하지 않습니다.') } await post.removeLikers(req.user.id) res.json({ PostId: post.id, UserId: req.user.id }) } catch (error) { console.error(error) next(error) } }) router.delete('/:postId', isLoggedIn, async (req, res, next) => { // DELETE /post/10 try { await Post.destroy({ where: { id: req.params.postId, UserId: req.user.id } }) res.json({ PostId: parseInt(req.params.postId, 10) }) } catch (error) { console.error(error) next(error) } }) module.exports = router reducers/ post.js import produce from 'immer' export const initialState = { mainPosts: [], singlePost: null, imagePaths: [], hasMorePosts: true, likePostLoading: false, likePostDone: false, likePostError: null, unlikePostLoading: false, unlikePostDone: false, unlikePostError: null, loadPostLoading: false, loadPostDone: false, loadPostError: null, loadPostsLoading: false, loadPostsDone: false, loadPostsError: null, addPostLoading: false, addPostDone: false, addPostError: null, removePostLoading: false, removePostDone: false, removePostError: null, addCommentLoading: false, addCommentDone: false, addCommentError: null, uploadImagesLoading: false, uploadImagesDone: false, uploadImagesError: null, retweetLoading: false, retweetDone: false, retweetError: null } export const UPLOAD_IMAGES_REQUEST = 'UPLOAD_IMAGES_REQUEST' export const UPLOAD_IMAGES_SUCCESS = 'UPLOAD_IMAGES_SUCCESS' export const UPLOAD_IMAGES_FAILURE = 'UPLOAD_IMAGES_FAILURE' export const LIKE_POST_REQUEST = 'LIKE_POST_REQUEST' export const LIKE_POST_SUCCESS = 'LIKE_POST_SUCCESS' export const LIKE_POST_FAILURE = 'LIKE_POST_FAILURE' export const UNLIKE_POST_REQUEST = 'UNLIKE_POST_REQUEST' export const UNLIKE_POST_SUCCESS = 'UNLIKE_POST_SUCCESS' export const UNLIKE_POST_FAILURE = 'UNLIKE_POST_FAILURE' export const LOAD_POSTS_REQUEST = 'LOAD_POSTS_REQUEST' export const LOAD_POSTS_SUCCESS = 'LOAD_POSTS_SUCCESS' export const LOAD_POSTS_FAILURE = 'LOAD_POSTS_FAILURE' export const LOAD_POST_REQUEST = 'LOAD_POST_REQUEST' export const LOAD_POST_SUCCESS = 'LOAD_POST_SUCCESS' export const LOAD_POST_FAILURE = 'LOAD_POST_FAILURE' export const ADD_POST_REQUEST = 'ADD_POST_REQUEST' export const ADD_POST_SUCCESS = 'ADD_POST_SUCCESS' export const ADD_POST_FAILURE = 'ADD_POST_FAILURE' export const REMOVE_POST_REQUEST = 'REMOVE_POST_REQUEST' export const REMOVE_POST_SUCCESS = 'REMOVE_POST_SUCCESS' export const REMOVE_POST_FAILURE = 'REMOVE_POST_FAILURE' export const ADD_COMMENT_REQUEST = 'ADD_COMMENT_REQUEST' export const ADD_COMMENT_SUCCESS = 'ADD_COMMENT_SUCCESS' export const ADD_COMMENT_FAILURE = 'ADD_COMMENT_FAILURE' export const RETWEET_REQUEST = 'RETWEET_REQUEST' export const RETWEET_SUCCESS = 'RETWEET_SUCCESS' export const RETWEET_FAILURE = 'RETWEET_FAILURE' export const REMOVE_IMAGE = 'REMOVE_IMAGE' export const addPost = (data) => ({ type: ADD_POST_REQUEST, data }) export const addComment = (data) => ({ type: ADD_COMMENT_REQUEST, data }) const reducer = (state = initialState, action) => { return produce(state, (draft) => { switch (action.type) { case REMOVE_IMAGE: draft.imagePaths = draft.imagePaths.filter((v, i) => i !== action.data) break case RETWEET_REQUEST: draft.retweetLoading = true draft.retweetDone = false draft.retweetError = null break case RETWEET_SUCCESS: { draft.retweetLoading = false draft.retweetDone = true draft.mainPosts.unshift(action.data) break } case RETWEET_FAILURE: draft.retweetLoading = false draft.retweetError = action.error break case UPLOAD_IMAGES_REQUEST: draft.uploadImagesLoading = true draft.uploadImagesDone = false draft.uploadImagesError = null break case UPLOAD_IMAGES_SUCCESS: { draft.imagePaths = action.data draft.uploadImagesLoading = false draft.uploadImagesDone = true break } case UPLOAD_IMAGES_FAILURE: draft.uploadImagesLoading = false draft.uploadImagesError = action.error break case LIKE_POST_REQUEST: draft.likePostLoading = true draft.likePostDone = false draft.likePostError = null break case LIKE_POST_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.PostId) post.Likers.push({ id: action.data.UserId }) draft.likePostLoading = false draft.likePostDone = true break } case LIKE_POST_FAILURE: draft.likePostLoading = false draft.likePostError = action.error break case UNLIKE_POST_REQUEST: draft.unlikePostLoading = true draft.unlikePostDone = false draft.unlikePostError = null break case UNLIKE_POST_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.PostId) post.Likers = post.Likers.filter((v) => v.id !== action.data.UserId) draft.likePostLoading = false draft.likePostDone = true break } case UNLIKE_POST_FAILURE: draft.unlikePostLoading = false draft.unlikePostError = action.error break case LOAD_POST_REQUEST: draft.loadPostLoading = true draft.loadPostDone = false draft.loadPostError = null break case LOAD_POST_SUCCESS: draft.singlePost = action.data draft.loadPostLoading = false draft.loadPostDone = true break case LOAD_POST_FAILURE: draft.loadPostLoading = false draft.loadPostError = action.error break case LOAD_POSTS_REQUEST: draft.loadPostsLoading = true draft.loadPostsDone = false draft.loadPostsError = null break case LOAD_POSTS_SUCCESS: draft.mainPosts = draft.mainPosts.concat(action.data) draft.loadPostsLoading = false draft.loadPostsDone = true draft.hasMorePosts = action.data.length === 10 break case LOAD_POSTS_FAILURE: draft.loadPostsLoading = false draft.loadPostsError = action.error break case ADD_POST_REQUEST: draft.addPostLoading = true draft.addPostDone = false draft.addPostError = null break case ADD_POST_SUCCESS: draft.mainPosts.unshift(action.data) draft.addPostLoading = false draft.addPostDone = true draft.imagePaths = [] break case ADD_POST_FAILURE: draft.addPostLoading = false draft.addPostError = action.error break case REMOVE_POST_REQUEST: draft.removePostLoading = true draft.removePostDone = false draft.removePostError = null break case REMOVE_POST_SUCCESS: draft.removePostLoading = false draft.removePostDone = true draft.mainPosts = draft.mainPosts.filter((v) => v.id !== action.data.PostId) break case REMOVE_POST_FAILURE: draft.removePostLoading = false draft.removePostError = action.error break case ADD_COMMENT_REQUEST: draft.addCommentLoading = true draft.addCommentDone = false draft.addCommentError = null break case ADD_COMMENT_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.PostId) post.Comments.unshift(action.data) draft.addCommentLoading = false draft.addCommentDone = true break } case ADD_COMMENT_FAILURE: draft.addCommentLoading = false draft.addCommentError = action.error break default: break } }) } export default reducer sagas/ post.js import axios from 'axios' import { all, delay, put, takeLatest, fork, throttle, call } from "redux-saga/effects"; import shortId from 'shortid'; import { ADD_POST_FAILURE, ADD_POST_SUCCESS, ADD_COMMENT_SUCCESS, ADD_COMMENT_FAILURE, ADD_POST_REQUEST, ADD_COMMENT_REQUEST, REMOVE_POST_FAILURE, REMOVE_POST_REQUEST, REMOVE_POST_SUCCESS, LOAD_POSTS_REQUEST, LOAD_POSTS_SUCCESS, LOAD_POSTS_FAILURE, LIKE_POST_REQUEST, UNLIKE_POST_REQUEST, LIKE_POST_SUCCESS, LIKE_POST_FAILURE, UNLIKE_POST_SUCCESS, UNLIKE_POST_FAILURE, UPLOAD_IMAGES_REQUEST, UPLOAD_IMAGES_SUCCESS, UPLOAD_IMAGES_FAILURE, RETWEET_REQUEST, RETWEET_SUCCESS, RETWEET_FAILURE, LOAD_POST_REQUEST, LOAD_POST_SUCCESS, LOAD_POST_FAILURE } from '../reducers/post' import { ADD_POST_TO_ME, REMOVE_POST_OF_ME } from '../reducers/user'; function addPostAPI(data) { return axios.post('/post', data) } function* addPost(action) { try { const result = yield call(addPostAPI, action.data) const id = shortId.generate() yield put({ type: ADD_POST_SUCCESS, data: result.data }) yield put({ type: ADD_POST_TO_ME, data: result.data.id }) } catch (err) { yield put({ type: ADD_POST_FAILURE, error: err.response.data }) } } function retweetAPI(data) { return axios.post(`/post/${data}/retweet`, data) } function* retweet(action) { try { const result = yield call(retweetAPI, action.data) yield put({ type: RETWEET_SUCCESS, data: result.data }) } catch (err) { yield put({ type: RETWEET_FAILURE, error: err.response.data }) } } function uploadImagesAPI(data) { return axios.post(`/post/images`, data) } function* uploadImages(action) { try { const result = yield call(uploadImagesAPI, action.data) yield put({ type: UPLOAD_IMAGES_SUCCESS, data: result.data }) } catch (err) { yield put({ type: UPLOAD_IMAGES_FAILURE, error: err.response.data }) } } function likePostAPI(data) { return axios.patch(`/post/${data}/like`) } function* likePost(action) { try { const result = yield call(likePostAPI, action.data) yield put({ type: LIKE_POST_SUCCESS, data: result.data }) } catch (err) { yield put({ type: LIKE_POST_FAILURE, error: err.response.data }) } } function unlikePostAPI(data) { return axios.delete(`/post/${data}/like`) } function* unlikePost(action) { try { const result = yield call(unlikePostAPI, action.data) yield put({ type: UNLIKE_POST_SUCCESS, data: result.data }) } catch (err) { yield put({ type: UNLIKE_POST_FAILURE, error: err.response.data }) } } function loadPostsAPI(lastId) { return axios.get(`/posts?lastId=${lastId || 0}`) } function* loadPosts(action) { try { const result = yield call(loadPostsAPI, action.lastId) yield put({ type: LOAD_POSTS_SUCCESS, data: result.data }) } catch (err) { yield put({ type: LOAD_POSTS_FAILURE, error: err.response.data }) } } function loadPostAPI(data) { return axios.get(`/post/${data}`) } function* loadPost(action) { try { const result = yield call(loadPostAPI, action.data) yield put({ type: LOAD_POST_SUCCESS, data: result.data }) } catch (err) { yield put({ type: LOAD_POST_FAILURE, error: err.response.data }) } } function removePostAPI(data) { return axios.delete(`/post/${data}`) } function* removePost(action) { try { const result = yield call(removePostAPI, action.data) yield put({ type: REMOVE_POST_SUCCESS, data: result.data }) yield put({ type: REMOVE_POST_OF_ME, data: action.data }) } catch (err) { yield put({ type: REMOVE_POST_FAILURE, error: err.response.data }) } } function addCommentAPI(data) { return axios.post(`/post/${data.postId}/comment`, data) // POST /post/1/comment } function* addComment(action) { try { const result = yield call(addCommentAPI, action.data) yield put({ type: ADD_COMMENT_SUCCESS, data: result.data }) } catch (err) { console.error(error) yield put({ type: ADD_COMMENT_FAILURE, error: err.response.data }) } } function* watchRetweet() { yield takeLatest(RETWEET_REQUEST, retweet) } function* watchUploadImages() { yield takeLatest(UPLOAD_IMAGES_REQUEST, uploadImages) } function* watchLikePost() { yield takeLatest(LIKE_POST_REQUEST, likePost) } function* watchUnlikePost() { yield takeLatest(UNLIKE_POST_REQUEST, unlikePost) } function* watchAddPost() { yield takeLatest(ADD_POST_REQUEST, addPost) } function* watchLoadPosts() { yield throttle(5000, LOAD_POSTS_REQUEST, loadPosts) } function* watchLoadPost() { yield takeLatest(LOAD_POST_REQUEST, loadPost) } function* watchRemovePost() { yield takeLatest(REMOVE_POST_REQUEST, removePost) } function* watchAddComment() { yield takeLatest(ADD_COMMENT_REQUEST, addComment) } export default function* postSaga() { yield all([ fork(watchRetweet), fork(watchUploadImages), fork(watchLikePost), fork(watchUnlikePost), fork(watchAddPost), fork(watchLoadPosts), fork(watchLoadPost), fork(watchRemovePost), fork(watchAddComment) ]) } pages/post/ [id].js import axios from "axios" import { useRouter } from "next/router" import { useSelector } from "react-redux" import { END } from 'redux-saga' import AppLayout from "../../components/AppLayout" import PostCard from "../../components/PostCard" import { LOAD_POST_REQUEST } from "../../reducers/post" import { LOAD_MY_INFO_REQUEST } from "../../reducers/user" import wrapper from "../../store/configureStore" const Post = () => { const router = useRouter() const { id } = router.query const { singlePost } = useSelector((state) => state.post) return ( <AppLayout> <PostCard post={singlePost} /> </AppLayout> ) } export const getServerSideProps = wrapper.getServerSideProps(async (context) => { const cookie = context.req ? context.req.headers.cookie : ''; console.log(context) axios.defaults.headers.Cookie = ''; if (context.req && cookie) { axios.defaults.headers.Cookie = cookie } context.store.dispatch({ type: LOAD_MY_INFO_REQUEST }) context.store.dispatch({ type: LOAD_POST_REQUEST, data: context.params.id }) context.store.dispatch(END) await context.store.sagaTask.toPromise() }) export default Post 입니다
-
해결됨15일간의 빅데이터 파일럿 프로젝트
머하웃 진행 단계 확인
강사님이 진행하실때는 10분 정도 걸린 것으로 확인이 되는데 제 컴퓨터에서 위의 상태에서 1시간이 지나도 넘어가질 않습니다. 뭔가 문제가 있는 것 같아서 로그를 보려고 하는데 어디로 가서 봐야할까요? 아니면 다른 머하웃 추천시스템의 진행 상태를 확인하는 방법이 있을까요?
-
미해결한번에 배우는 나만의 움직이는 이모티콘 만들기(feat. 2천만 뷰 크리에이터)
안녕하세요. 혹시 카카오톡 이모티콘 만들 때, 파일 정리하는 꿀팁이 있을까요?
안녕하세요 그리네모님 ! 평소 애니메이트를 배워보고 싶었는데 좋은 강의가 있어서 보면서 습득중인 수강생입니다! 애니메이트로 이모티콘을 만들어보려는데 파일을 어떻게 정리하면 좋을지 감이 잘 안와서 질문드려봅니다. 24개 시안을 만들면 시안 개수만큼 애니메이트 fla 파일을 24개 만들어서 파일 관리하는 방법밖에는 없는건가요? 아니면 장면 기능을 이용해서 한개의 파일 안에 24개의 장면을 만들어 24개의 시안을 만들어도 되나요? .. 애니메이트는 아직 잘 모르는 단계라 애니메이트로 이모티콘 만들어보신 그리네모님께 질문 드려봅니다 아 그리고 혹시 어도비 일러스트레이터의 대지같은 기능은 없는지 궁금합니다! 그럼 천천히 답변주시면 감사하겠습니다!
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 유튜브 사이트 만들기
깃허브 웹호스팅 배포관련
완강했습니다 그런데 이 작품을 깃허브 웹호스팅으로 배포하고싶은데 배포하면 root 디렉토리의 리드미파일만 배포되더라구요. 어떻게 해야되나요..
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
프로젝트 생성 시 오류
안녕하세요 강사님 가장 초반부 설정 강의를 듣고 있는데 프로젝트 파일 생성 하면 디버깅 시작 & 디버그 하지 않고 시작 버튼도 비활성화 되어있고 솔루션 탐색기 창에도 0개 프로젝트라고 해서 아무것도 보이지 않습니다. 여기저기 검색해봐도 해결책이 나오지 않아 여기에 질문 남깁니다.
-
해결됨[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
custom dataset을 생성할 때 annotation 관련 질문
강사님 안녕하세요! 특정 장애물(바위)을 detect 하기 위해서 CVAT 툴을 이용해 custom dataset을 생성하려고 합니다. 1. 학습을 위한 이미지 내의 모든 장애물들을 모두 annotate하지 않고 일부 개수만 annotate 하게 되면 annotate 되지 않은 것들 때문에 학습에 악영향을 끼칠 수 있을까요? 2. 그리고 이 장애물만 detect 하면 돼서 클래스 1개로 학습을 진행하려 하고 있는데, 클래스 수를 늘린다고 해서 학습 성능이 더 좋아질 가능성도 혹시 이론적으로 있나요? 유익한 강의 감사드립니다!
-
미해결홍정모의 따라하며 배우는 C언어
구조체 포인터 선언의 기억공간 할당 여부
구조체 설계 struct guy { char favfood[10], char job[10] }; 일 때는 기억공간을 아직 할당받지 않은 상태이고 구조체 변수 선언 혹은 선언 동시 초기화 할 때 메모리에 공간을 할당받는다고 이해했습니다. struct guy barney; 이 때 기억공간을 할당받는다 포인터는 새로운 구조체를 생성하지 않고 기존의 동일 구조체를 가리킨다고 하셨는데, 구조체 포인터 변수는 구조체 포인터 변수 선언 시 메모리에 공간을 할당 받나요? struct person* someone; [정리]구조체 포인터 변수의 메모리 할당 시점이 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
1.8 C언어와 함수 강의의 14:15 16:50 부분 질문있습니다.
안녕하세요. 강의 유익하게 잘 보고있습니다. 14:15, 16:50 부분 관련 질문있습니다. 14:15의 설명에서 return 뒤에 쓰이는 숫자가 exited with code 뒤에 출력으로 오는 것을 알 수 있고 16:50의 설명에서 int 와 7이 관련이 있다 하셔서 개인적으로 실험을 하나 해봤습니다. 강의의 코드를 float main() { return 7.7777; } 로 바꾸어서 실행하면 7.7777이 나올 것으로 생각했는데 실제 출력되는 숫자는 다른 숫자가 나옵니다. 혹시 return 함수가 실수형은 받지 않아서 이런 현상이 나타나는 건가요?
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
코드 작성법 질문
function makNewList_P(allProducts){ var newListProducts = []; for(var i=0; i<allProducts.length;i++){ if(allProducts[i].price>60000){ newListProducts.push(allProducts[i]);}} return newListProducts; } const over60000Products=makNewList_P(allProducts); 최종문제에 대해서 이렇게 먼저 작성해보고 답을 봤는데 if전에 var product = products[i]; var price = product.price; 이런식으로 변수를 미리 저장하시는데 이유가 있을까요? 잘못된 습관 가질까봐 질문드립니다 ㅠㅠ
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
commenttForm submit 버튼 작동 에러
import { Form, Input, Button } from "antd"; import React, { useCallback, useState } from "react"; import useInput from "../hooks/useInput"; import PropTypes from "prop-types"; import { useSelector } from "react-redux"; const CommentForm = ({ post }) => { const id = useSelector((state) => state.user.me?.id); const [commentText, onChangeCommentText] = useInput(""); const onSubmitComment = useCallback(() => { console.log(post.id, commentText); }, [commentText]); return ( <Form onFinish={onSubmitComment}> <Form.Item style={{ position: "relative", margin: 0 }}> <Input.TextArea value={commentText} onChange={onChangeCommentText} rows={4} /> <Button type="primary" htmlType="submit" style={{ position: "absolute", right: 0 }} > 삐약 </Button> </Form.Item> </Form> ); }; CommentForm.propTypes = { post: PropTypes.object.isRequired, }; export default CommentForm; 문제 button에 style객체 추가 이후 console.log가 찍히지 않는 현상 style={{ position: "absolute", right: 0 }} 여기까지 쳤을 때는 작동을 하였으나 style={{ position: "absolute", right: 0, bottom: -40 }} bottom -40 을 추가하면 작동 안함 bottom 0 은 작동이 잘되는 것을 보니 마이너스 추가시 문제가 방생하는 것 같음 왜 그럴까요?ㅠㅠ
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
보통 런타임 경우는 어떤 경우에 발생하는 건가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이클립스에서는 정상적으로 동작하는데 채점사이트에서는 간혹 런타임 에러가 뜨는 경우가 있는데 왜 뜨는지 모르겠습니다(Main과 solution 오타 없이 사용했습니다) 이유를 알고싶어 질문드립니다.
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
HTML FORM 사용에서 회원 등록 부분에 대한 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.w2tomwsznga7)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://docs.google.com/document/d/1xCQKit-1V6l6ObeCe49St33RHPzLF_P_c3o7aSDTKs0/edit#heading=h.7dhnp46ven0v)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. [HTTP API 설계 예시] 강의의 16분 30초 내용에 대한 질문입니다. 회원 등록폼을 불러오는 URI가 /members/new 폼 작성후 submit 하는 URI도 /members/new 로 통일시켜주는 것을 선호한다고 하셨는데 만약 스프링을 사용한다고 가정했을때 클라이언트에서 폼을 작성하고 submit 했을 경우 컨트롤러에서 동일하게 /members/new 로 넘어온다면 회원등록을 해주는식으로 로직을 짠다면 폼을 불러오는 URI와 겹쳐서 생기는 오류는 없나요? 혹은 폼 작성하고 submit 할때 /members/register 로 새로운 URI를 생성해서 넘기는 방법은 사용해도 될까요??
-
미해결홍정모의 따라하며 배우는 C언어
object
data ovject를 설명하시는데 i = 1024;에서 i를 object라고 하셨는데, i = i + 1;에서 R-value로 사용되는 i 도 object 인지 여쭙니다.
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
강사님 안녕하세요!
안녕하세요 저 강의를 듣다가 궁금한 것이 이렇게 글을 올립니다. 이 강의를 듣고 제가 저만의 쇼핑몰을 만들고 싶어서 수강을 하고 있는데요! 1. 쇼핑몰을 만들 때 나의 물건을 올려 팔 수 있는지 2. 판다고 했을 때 수익이 나는 과정이 궁금합니다 3. 그리고 블로그도 만들 수 있는건가요?
-
미해결
세금계산서 발행 or 소속기관 강의비 입금
소속 기관을 통해 강의비를 지원받으려고 합니다. 같은 질문이 있어 찾아보았는데 답변이 없어 다시 글 올립니다. 어떻게 해야할지 알려주시면 감사하겠습니다.
-
미해결Vue-Django-Bootstrap 뚝딱 블로그
blog list가 나오지 않습니다.
전 강좌까지 따라서 진행했습니다. 영상시간 : 1:35 처럼 blog list에 게시글이 나와야 하는데 나오지 않습니다. ㅠㅠ 무슨 문제인지 모르겠습니다.... 아래 사진과 같이 x박 및 클릭해도 사이트 이동이 되지 않습니다. 해결방법 알려주실 수 있나요? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결비개발자를 위한 RPA 강의 (UiPath 기본편)
PDF OCR 관련
안녕하십니까, PDF 관련 강의를 잘 듣고, 시행하던 중 다음과 같은 메세지가 나와서 정상적으로 가동이 힘들었습니다. Read PDF With OCR: Unexpected PDF structure. This exception usually indicates that PDF document is malformed but also may indicate a bug in Docotic.Pdf library. Please send us the file for review. 해당 것은 스캔문서인데 PDF 형식입니다. 감사합니다.