묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
풀스택 개발의 경우 어떤 순서로 개발을 하나요?
현재 배포 전까지의 강의를 복습을 하고 있는 중입니다. 저는 일단 db를 디자인 하고 swagger로 api를 작성하고 있습니다. 그런데 하다보니 이런 순서로 하는게 맞나 하는 생각이 드네요. 지금이야 백엔드 구조를 알고 있으니 이렇게 하고 있지만 몰라도 이렇게 했을까 생각중입니다. 먼저 프론트를 만들면서 필요한 백엔드에 대한 swagger api를 같이 작성하고 그 다음에 백엔드를 만드는게 더 깔끔한게 아닌가 싶네요. 제로초님은 풀스택 개발을 하실 때 어떤 순서로 진행하시나요?
-
미해결비개발자를 위한 RPA 강의 (UiPath 입문편)
오케스트라연동말고 별도 실행방법???
안녕하세요 강의로 많은 도움을 받았습니다. 이번 강의와는 약간 별개로 여쭈어보는데 혹시 uipath를 이용하여 프로세스를 개발완료했는데 이것을 오케스트라연동으로 실행이 아닌 사용자가 직접 사이트를 이용하지않고 URL 이라든지 프로세스등을 이용하여 실행할 수 있는방법이 있을까요 ? 예로 작업자가 필요할 경우에만 프로세스를 실행할 수 있는 방법이 필요합니다.
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
문의 드립니다. 팔로우 언팔로우 부분을 끝으로 강의해주신 부분을 테스트중에 회원 가입 부분을 실행해보니 아래와 같은 오류가 발생합니다. 런타임
회원 가입페이지 자체가 열리지 않습니다. AppLayout.js import React from "react"; import PropTypes from 'prop-types'; import Link from 'next/link'; import { Menu, Input, Row, Col } from 'antd'; import styled from 'styled-components'; import { useSelector} from 'react-redux'; import UserProfile from '../components/UserProfile'; import LoginForm from '../components/LoginForm'; const SearchInput = styled(Input.Search)` vertical-align: middle; `; const AppLayout = ({children}) => { const me = useSelector((state) => state.user.me?.id); // const inputStyle = useMemo(() => ({ verticalAlign: 'middle' }), []); return ( <div> <Menu mode="horizontal"> <Menu.Item> <Link href="/"><a>노드버드</a></Link> </Menu.Item> <Menu.Item> <Link href="/profile"><a>프로필</a></Link> </Menu.Item> <Menu.Item> <SearchInput enterButton /> </Menu.Item> <Menu.Item> <Link href="/signup"><a>회원가입</a></Link> </Menu.Item> </Menu> <Row gutter={8}> <Col xs={24} md={6}> {me ? <UserProfile /> : <LoginForm />} </Col> <Col xs={24} md={12}> {children} </Col> <Col xs={24} md={6}> </Col> </Row> </div> ); }; AppLayout.propTypes = { children: PropTypes.node.isRequired, }; export default AppLayout; signup.js import React, { useCallback, useState, useEffect } from 'react'; import { Form, Input, Checkbox, Button } from 'antd'; import { useDispatch, useSelector } from 'react-redux'; import Router from 'next/router'; import Head from 'next/head'; import styled from 'styled-components'; import { SIGN_UP_REQUEST } from '../reducers/user'; import useInput from '../hooks/useInput'; import AppLayout from '../components/AppLayout'; const ErrorMessage = styled.div` color: red; `; const Signup = () => { const dispatch = useDispatch(); const [ signUpLoading, me, signUpDone ] = useSelector((state) => state.user); const [email, onChangeEmail] = useInput(''); const [nickname, onChangeNickname] = useInput(''); const [password, onChangePassword] = useInput(''); const [passwordCheck, setPasswordCheck] = useState(''); const [passwordError, setPasswordError] = useState(false); const [term, setTerm] = useState(false); const [termError, setTermError] = useState(false); useEffect(() => { if (me) { alert('로그인했으니 메인페이지로 이동합니다.'); Router.push('/'); } }, [me && me.id]); useEffect(() => { if (signUpDone) { Router.replace('/'); } }, [signUpDone]); const onSubmit = useCallback(() => { if (password !== passwordCheck) { return setPasswordError(true); } if (!term) { return setTermError(true) } console.log(email, nickname, password ) return dispatch({ type: SIGN_UP_REQUEST, data: { email, password, nickname }, }); }, [email, password, passwordCheck, term]) const onChangePasswordCheck = useCallback((e) => { setPasswordCheck(e.target.value); setPasswordError(e.target.value !== password); }, [password]); const onChangeTerm = useCallback((e) => { setTerm(e.target.checked); setTermError(false); }, []); return ( <AppLayout> <Head> <meta charSet="utf-8" /> <title>회원가입 | NodeBird</title> </Head> <Form onFinish={onSubmit} style={{ padding: 10 }}> <div> <label htmlFor="user-email">이메일</label> <br /> <Input name="user-email" type="email" value={email} required onChange={onChangeEmail} /> </div> <div> <label htmlFor="user-nickname">닉네임</label> <br /> <Input name="user-nickname" value={nickname} required onChange={onChangeNickname} /> </div> <div> <label htmlFor="user-password">비밀번호</label> <br /> <Input name="user-password" type="password" value={password} required onChange={onChangePassword} /> </div> <div> <label htmlFor="user-password-check">비밀번호 체크</label> <br /> <Input name="user-password-check" type="password" value={passwordCheck} required onChange={onChangePasswordCheck} /> {passwordError && <ErrorMessage style={{ color: 'red'}}> 비밀번호가 일치하지 않습니다. </ErrorMessage> } </div> <div> <Checkbox name="user-term" checked={term} onChange={onChangeTerm}> 제로초 말을 잘 들을 것을 동의합니다. </Checkbox> {termError && <ErrorMessage style={{ color: 'red' }}> 약관에 동의하셔야 합니다. </ErrorMessage> } </div> <div style={{ marginTop: 10 }}> <Button type="primary" htmlType="submit" loading={signUpLoading}>가입하기</Button> </div> </Form> </AppLayout> ); }; export default Signup; reducers/user.js import produce from 'immer'; export const initialState = { logInLoading: false, // 팔로우 시도중.. 로딩창을 띄운다. logInDone: false, logInError: null, logOutLoading: false, // 언팔로우 시도중.. 로딩창을 띄운다. logOutDone: false, logOutError: null, followLoading: false, // 로그인 시도중.. 로딩창을 띄운다. followDone: false, followError: null, unfollowLoading: false, // 로그인 시도중.. 로딩창을 띄운다. unfollowDone: false, unfollowError: null, signUpLoading: false, // 회원가입 시도중.. 로딩창을 띄운다. signUpDone: false, signUpError: null, changeNicknameLoading: false, // 닉네임 변경 시도중.. 로딩창을 띄운다. changeNicknameDone: false, changeNicknameError: null, isLoggingIn: false, isLoggedIn: false, isLoggingOut: false, me: null, signUpData: {}, loginData: {}, }; export const LOG_IN_REQUEST = 'LOG_IN_REQUEST'; export const LOG_IN_SUCCESS = 'LOG_IN_SUCCESS'; export const LOG_IN_FAILURE = 'LOG_IN_FAILURE'; export const LOG_OUT_REQUEST = 'LOG_OUT_REQUEST'; export const LOG_OUT_SUCCESS = 'LOG_OUT_SUCCESS'; export const LOG_OUT_FAILURE = 'LOG_OUT_FAILURE'; export const SIGN_UP_REQUEST = 'SIGN_UP_REQUEST'; export const SIGN_UP_SUCCESS = 'SIGN_UP_SUCCESS'; export const SIGN_UP_FAILURE = 'SIGN_UP_FAILURE'; export const CHANGE_NICKNAME_REQUEST = 'CHANGE_NICKNAME_REQUEST'; export const CHANGE_NICKNAME_SUCCESS = 'CHANGE_NICKNAME_SUCCESS'; export const CHANGE_NICKNAME_FAILURE = 'CHANGE_NICKNAME_FAILURE'; export const FOLLOW_REQUEST = 'FOLLOW_REQUEST'; export const FOLLOW_SUCCESS = 'FOLLOW_SUCCESS'; export const FOLLOW_FAILURE = 'FOLLOW_FAILURE'; export const UNFOLLOW_REQUEST = 'UNFOLLOW_REQUEST'; export const UNFOLLOW_SUCCESS = 'UNFOLLOW_SUCCESS'; export const UNFOLLOW_FAILURE = 'UNFOLLOW_FAILURE'; export const ADD_POST_TO_ME = 'ADD_POST_TO_ME'; export const REMOVE_POST_OF_ME = 'REMOVE_POST_OF_ME'; export const ADD_COMMENT_TO_ME = 'ADD_COMMENT_TO_ME'; export const REMOVE_COMMENT_OF_ME = 'REMOVE_COMMENT_OF_ME'; const dummyUser = (data) => ({ ...data, nickname: '제로초', id: 1, // sequlize 에서 합쳐주는 데이터라서 앞글자가 대문자 이다. Posts: [{ id: 1 }], // 내가 쓴 게시글 Followings: [{nickname: '부기초' }, { nickname: 'Chanho Lee' }, { nickname: 'neue zeal'}], // 내 팔로윙들... Followers: [{nickname: '부기초' }, { nickname: 'Chanho Lee' }, { nickname: 'neue zeal'}], // 내 팔로워들... }); export const loginAction = (data) => { return { type: LOG_IN_REQUEST, data, }; }; export const logoutAction = () => { return { type: LOG_OUT_REQUEST, }; }; export const changeNickname = () => { return { type: CHANGE_NICKNAME_REQUEST, }; }; // return 이 생략된다. // const reducer = (state = initialState, action) => return produce (state, (draft) => { const reducer = (state = initialState, action) => produce (state, (draft) => { switch (action.type) { case FOLLOW_REQUEST: draft.followLoading = true; draft.followError = null; draft.followDone = false; break; case FOLLOW_SUCCESS: draft.followLoading = false; draft.me.Followings.push({ id: action.data }); draft.followDone = true; // me: action.data, => me: { ...action.data, nicname: 'zerocho' }, => dummyUser{ action.data }, break; case FOLLOW_FAILURE: draft.followLoading = true; // isLoggingOut: true, => logOutLoading: true, draft.followError = action.error; // logInError: action.error, => logOutDone: false, break; case UNFOLLOW_REQUEST: draft.unfollowLoading = true; draft.unfollowError = null; draft.unfollowDone = false; break; case UNFOLLOW_SUCCESS: draft.unfollowLoading = false; draft.unfollowDone = true; draft.me.Followings = draft.me.Followings.filter((v) => v.id !== action.data); // me: action.data, => me: { ...action.data, nicname: 'zerocho' }, => dummyUser{ action.data }, break; case UNFOLLOW_FAILURE: draft.unfollowLoading = true; // isLoggingOut: true, => logOutLoading: true, draft.unfollowError = action.error; // logInError: action.error, => logOutDone: false, break; case CHANGE_NICKNAME_REQUEST: draft.changeNicknameLoading = true; // 닉네임 변경 시도중이니까 => 버튼 로딩 O draft.changeNicknameDone = false; // 닉네임 변경중 draft.changeNicknameError = null; break; case CHANGE_NICKNAME_SUCCESS: draft.changeNicknameLoading = false; // 닉네임 변경 요청이 성공했으니까 => 버튼 로딩 X draft.changeNicknameDone = true; // 닉네임 변경 완료 break; case CHANGE_NICKNAME_FAILURE: draft.changeNicknameLoading = false; // 닉네임 변경 요청이 끝났으니까 => 버튼 로딩 X draft.changeNicknameError = action.error; break; case SIGN_UP_REQUEST: draft.signUpLoading = true; // 회원가입 시도중이니까 => true isLoggingOut: true, => logInLoading: true, draft.signUpDone = false; draft.signUpError = null; break; case SIGN_UP_SUCCESS: draft.signUpLoading = false; // 회원가입 요청이 성공했으니까 => false isLoggingOut: false, => logOutLoading: false, draft.signUpDone = true; // isLoggedIn: false, => logOutDone: true, break; case SIGN_UP_FAILURE: draft.signUpLoading = false; // 회원가입 요청이 끝났으니까 => false isLoggingOut: false, => logOutLoading: false, draft.signUpError = action.error; // 추가 break; case LOG_IN_REQUEST: draft.logInLoading = true; draft.logInError = null; draft.logInDone = false; break; case LOG_IN_SUCCESS: draft.logInLoading = false; draft.logInDone = true; draft.me = dummyUser(action.data); // me: action.data, => me: { ...action.data, nicname: 'zerocho' }, => dummyUser{ action.data }, break; case LOG_IN_FAILURE: draft.logInLoading = true; // isLoggingOut: true, => logOutLoading: true, draft.logInError = action.error; // logInError: action.error, => logOutDone: false, break; case LOG_OUT_REQUEST: draft.logOutLoading = true; // 로그아웃 시도중이니까 => true draft.logOutDone = false; draft.logOutError = null; break; case LOG_OUT_SUCCESS: draft.logOutLoading = false; // 로그아웃 요청이 성공했으니까 => false isLoggingOut: false, => logOutLoading: false, draft.logOutDone = true; // isLoggedIn: false, => logOutDone: true, draft.me = null; break; case LOG_OUT_FAILURE: draft.isLoggingOut = false; // 요청이 끝났으니까 => false isLoggingOut: false, => logOutLoading: false, draft.logOutError = action.error; // 추가 break; case ADD_POST_TO_ME: draft.me.Posts.unshift({ id: action.data }); break; // me: { // ...state.me, // Posts: [{ id: action.data }, ...state.me.Posts], // }, // }; case REMOVE_POST_OF_ME: draft.me.Posts = draft.me.Posts.filter((v) => v.id !== action.data); break; // return { // ...state, // me: { // ...state.me, // Posts: state.me.Posts.filter((v) => v.id !== action.data), // }, // }; // case ADD_COMMENT_TO_ME: // break; // me: { // ...state.me, // Posts: [{ id: action.data }, ...state.me.Posts], // }, // }; // case REMOVE_COMMENT_OF_ME: // break; // me: { // ...state.me, // Posts: state.me.Posts.Comments.filter((v) => v.id !== action.data), // }, // }; default: break; // default: // return state; // default: { // return { // ...state, // }; // } } }); export default reducer; sagas/user.js // all fork call put delay debounce throttle takeLatest tabkeEvery takeLeding taekMaybe import { all, put, fork, takeLatest, delay } from 'redux-saga/effects'; import axios from 'axios'; import { LOG_IN_REQUEST, LOG_IN_SUCCESS, LOG_IN_FAILURE, LOG_OUT_REQUEST, LOG_OUT_SUCCESS, LOG_OUT_FAILURE, SIGN_UP_REQUEST, SIGN_UP_SUCCESS, SIGN_UP_FAILURE, FOLLOW_REQUEST, FOLLOW_SUCCESS, FOLLOW_FAILURE, UNFOLLOW_REQUEST, UNFOLLOW_SUCCESS, UNFOLLOW_FAILURE, } from '../reducers/user'; function followAPI(data) { return axios.post('/api/follow', data); } function* follow(action) { try { // yield put({ // type: 'FOLLOW_REQUEST', // }); // const result = yield call(followAPI, action.data); // ex> const result = yield call(logInAPI, action.data, a, b, c); a, b, c 인자를 추가시 yield delay(1000); // throw new Error('') // 아래 catch 로 넘어간다. yield put({ type: FOLLOW_SUCCESS, data: action.data, }); } catch (err) { yield put({ // put => dispatch 다. type: FOLLOW_FAILURE, data: err.response.data, }); } } function unfollowAPI(data) { return axios.post('/api/unfollow', data); } function* unfollow(action) { try { // yield put({ // type: 'UNFOLLOW_REQUEST', // }); // const result = yield call(unfollowAPI, action.data); // ex> const result = yield call(logInAPI, action.data, a, b, c); a, b, c 인자를 추가시 yield delay(1000); // throw new Error('') // 아래 catch 로 넘어간다. yield put({ type: UNFOLLOW_SUCCESS, data: action.data, }); } catch (err) { yield put({ // put => dispatch 다. type: UNFOLLOW_FAILURE, data: err.response.data, }); } } function signUpAPI(data) { return axios.post('/api/logout', data); } function* signUp(action) { try { // yield put({ // type: 'LOG_IN_REQUEST', // }); // const result = yield call(signUpAPI, action.data); // ex> const result = yield call(logInAPI, action.data, a, b, c); a, b, c 인자를 추가시 yield delay(1000); // throw new Error('') // 아래 catch 로 넘어간다. yield put({ type: SIGN_UP_SUCCESS, data: action.data, }); } catch (err) { yield put({ // put => dispatch 다. type: SIGN_UP_FAILURE, data: err.response.data, }); } } function logOutAPI() { return axios.post('/api/logout'); } function* logOut() { try { // yield put({ // type: 'LOG_OUT_REQUEST', // }); // const result = yield call(logOutAPI); yield delay(1000); yield put({ type: LOG_OUT_SUCCESS, }); } catch (err) { yield put({ // put => dispatch 다. type: LOG_OUT_FAILURE, error: err.response.data, }); } } function* logIn(action) { try { console.log('saga logIn'); // yield put({ // type: 'LOG_IN_REQUEST', // }); // const result = yield call(logInAPI, action.data); // ex> const result = yield call(logInAPI, action.data, a, b, c); a, b, c 인자를 추가시 yield delay(1000); yield put({ type: LOG_IN_SUCCESS, data: action.data, }); } catch (err) { yield put({ // put => dispatch 다. type: LOG_IN_FAILURE, error: err.response.data, }); } } {/* takeLeading - 1번째 클릭만 실행 takeLatest - 마지막 클릭만 실행 ( [프론트 서버에서만] 먼저 실행한 부분은 놔두고 동시에 여러게가 실행된 경우만 마지막 이벤트만을 실행한다. ) takeEvery - 1번 사용하면 사라지는 take 대신... while 문(반복문)을 사용하지 않고도.. 계속 재사용할수 있도록 해준다. */} function* watchFollow() { yield takeLatest(FOLLOW_REQUEST, follow); // take =>logIn 액션이 실행될때까지 기다리겠다. } function* watchUnFollow() { yield takeLatest(UNFOLLOW_REQUEST, unfollow); // take =>logIn 액션이 실행될때까지 기다리겠다. } function* watchLogIn() { yield takeLatest(LOG_IN_REQUEST, logIn); // take =>logIn 액션이 실행될때까지 기다리겠다. } function* watchLogOut() { yield takeLatest(LOG_OUT_REQUEST, logOut); } function* watchSignUp() { yield takeLatest(SIGN_UP_REQUEST, signUp); // take =>logIn 액션이 실행될때까지 기다리겠다. } {/* all 은 배열을 받아서 배열안에 있는 명령들을 한번에 실행 시켜준다. fork 함수를 실행해준다. call도 있다. fork[비동기] - 결과를 기다리지 않고 다음 명령 실행을 진행한다. [논블로킹] call[동기] - 응답을 기다렸다가 응답을 받고 다음 명령을 실행 [블로킹] */} export default function* userSaga() { yield all([ fork(watchFollow), fork(watchUnFollow), fork(watchLogIn), fork(watchLogOut), fork(watchSignUp), ]); }
-
미해결자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
선생님 이클립스 어떤거 다운받아야하나요?
쌤 "자바 프로그래밍 입문 강좌(renew ver.) - 초보부터 개발자 취업까지!!" 강좌 듣는 학생이에요. 색션 0. OT 영상 중간부분 28:45부분에서 "Eclipse IDE for Developers" 다운받으라고 하셨는데 선생님이 다운받으라고 하셨던 "Eclipse IDE for Developers"가 없고 지금 이클립스에는 "Eclipse IDE for enterprise Java Developers"로 올라와있는데 이거 다운받으면 되는거겠죠?
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
pickle 에러
import pickle profile_file = open("profile.pickle", "rb") profile = pickle.load(profile_file) # file에 있는 정보를 profile에 불러오기 print(profile) profile_file.close() 이 부분에서 에러가 Traceback (most recent call last): File "/Users/terrykwag/Documents/PythonWorkspace/7. 입출력/pickle.py", line 4, in <module> import pickle File "/Users/terrykwag/Documents/PythonWorkspace/7. 입출력/pickle.py", line 13, in <module> profile = pickle.load(profile_file) # file에 있는 정보를 profile에 불러오기 AttributeError: partially initialized module 'pickle' has no attribute 'load' (most likely due to a circular import) 이렇게 뜨는데 왜 안되는걸까요? write는 잘 됐는데 ㅠㅠ
-
미해결생활코딩 - React
chrome extension 오류입니다.
This page doesn’t appear to be using React. If this seems wrong, follow the troubleshooting instructions. 라는 오류가 나서 access to url file 을 active 상태로 바꿨는데도 되지 않습니다.......
-
해결됨[라즈베리파이] IoT 딥러닝 Computer Vision 실전 프로젝트
vnc viewer 연결오류
해당 강의 다른 질문에서도 확인하였는데 vnc viewer 가 연결되기 위해서는 같은 무선네트워크에 접속해야한다고 하셨는데 만약 viewer를 데스크탑에 설치하여 랜선으로 연결되어있다면 연결은 불가능한건가요? 노트북으로 할때는 잘 되었는데 데스크탑 컴퓨터로 접속하니 timed out waiting for a response from a computer 라는 오류가 뜨며 연결이 안되네요
-
해결됨반응형 웹사이트 포트폴리오(Architecture Agency)
모바일에서 font-size, padding, width, margin등 질문있습니다.
보통 퍼블리셔들은 반응형만들때 psd를 보고하자나요.아이폰6기준 넓이 375라고하면 웹디자이너들은 375 * 2기준으로 디자인을 하거나 *3으로 디자인할때 padding이나 font-size는 어떻게 줘야하는지 em이나 rem에 대한 설명부분이 있엇으면 좋겠어요.
-
미해결React로 NodeBird SNS 만들기
제로초님 질문 있습니다
혹시 '더보기'나 '인피니트스크롤링' 말고 일반 게시판의 '숫자클릭이동식' 페이지네이션은 offset을 이용해서 하는게 적합할까요?
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
온라인 스터디를 제외하고 어떻게 만들어야 하나요?
강의 잘 듣고 있습니다!! 문제에선 월 3회는 온라인, 1회는 오프라인인데 각 스터디날짜들이 계속 겹치게 나오는데 어떻게 스터디날짜가 이전에 나온 스터디날짜와 겹치지 않고 출력할 수 있나요? ㅠㅠ
-
미해결왕초보를 위한 스위프트 프로그래밍 강좌 (iOS app with xcode&swift)
Xcode 최신이신분들
저도 최신 이라 처음 label추가 하는 부분에서 헤매었는데 방법 찾아서 글 올립니다.xcode오른쪽 상단에 + 버튼 누르시면 추가할 수 있는 요소들 나오네요!
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
화살표 함수와 fucntion 함수의 차이가 궁금합니다
userSchema.pre('save', (next) => { var user = this; if (user.isModified('password')) { //비밀번호 암호화 시키기 bcrypt.genSalt(saltRounds, function (err, salt) { if (err) return next(err); bcrypt.hash(user.password, salt, function (err, hash) { if (err) return next(err); user.password = hash; return next(); }); }); } else { return next(); } }); --------------------------------------- 윗부분은 제 코드입니다 7강에서 강사님 코드 userSchema.pre('save', function (next) { } <-을 저는 ->userSchema.pre('save', (next) => { } 으로 하니까 오류가 나더라구요.. 왜 화살표 함수로 인자를 보내면 오류가 날까요 화살표 함수 사용시 {} 안에 return 해야한다는것을 알고 return next() 를했는데도 안되더라구요 ㅠㅠ 알려주세요!
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
heatmap 예제와 같은 형태로 데이터 2차원 배열 만들기
(사진)
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
return에 대해서
안녕하세요 제가 std_weight에 대해 해답을 보기전 혼자 풀었거든요 def std_weight(height, gender): height = height / 100 if gender == "여성": return height * height * 22 elif gender == "남성": return height * height * 22 height = height/100을 함수 내에 저장을 했는데도 같은 답이 나왔어요 (무게) 근데 바로 전 비디오에서 return gun부분은 이해가 가는데 (내부에서 계산된 gun값을 외부로 뺐기 때문에 외부 gun값을 replace) 왜 이 함수는 return height * height * 22를 했는데도 불구하고 답이 나오나요? return이 헷갈리네요 ㅠㅠ
-
미해결애플 웹사이트 인터랙션 클론!
playanimation 관련 질문드립니다.
안녕하세요. 강사님 강의 잘 듣고 있습니다. 현재 쇼핑몰을 제작 중인데 에어팟 프로 상세페이지를 보고 잘 만들었다는 생각을 많이 했습니다. 그러다 강사님 강의를 알게 되었고 이렇게 배울 수 있는 기회를 주셔서 감사합니다. 강의는 전체적으로 한번 듣고 다시 한 강의씩 들으면서 페이지 제작 중에 있는데 문제가 있어 이렇게 질문을 남깁니다. 일단 저는 아임웹을 이용해서 홈페이지를 만드는 중이고 '현재 활성씬 반영하기'까지 완료하고 콘솔창을 통해 제대로 작동하는 것까지 확인했습니다. 헌데 playanimation 함수를 통해 case들을 작성하고 잘 작동하는지 console.log콘솔창에 띄어보려고 해도 아무런 반응이 없습니다. 빨간색으로 어떤 에러도 표시가 안되어서 일단 무시하고 다음 내용들을 작성하여도 콘솔창에 모두 반응이 없습니다. console.log('0' play); console.log('1' play);console.log('2' play);console.log('3' play); console.log(messageA_opacity_0, messageA_opacity_1); 아임웹 특성상 코드위젯창을 통해 html, css, 자바 파일들을 한꺼번에 작성하고 있고, 또한 내비쪽은 아임웹쪽에서 이미 자체적으로 구성이 되어 있기 때문에 내비들은 제외하고 작성하고 있는데 이 과정에서 혹시 문제가 발생했을 수도 있는지 아니면 어떤 문제때문인지 알려주시면 감사하겠습니다! function playAnimation() { switch (currentScene) { case 0: console.log('0 play'); break; case 1: console.log('1 play'); break; case 2: console.log('2 play'); break; case 3: console.log('3 play'); break; } }
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
반복 크롤링 시 get_text() 결과 None인 경우를 건너뛰는 방법?
안녕하세요. 저는 학술연구에 활용하기 위해서 이 수업을 듣고 있습니다. 파이썬 관련해서 예전에 다른 인터넷 강의를 듣었는데 이해가 잘 안돼서 흥미를 잃고 있었는데, 선생님께서는 너무 쉽게 설명해주셔서 많은 도움이 되고 있습니다. 감사합니다. 저는 수업내용을 바탕으로 신문기사를 크롤링하는 실습을 해보았습니다. 해당 신문사에서 키워드로 기사를 검색한 후 제목을 크롤링하고, 각 기사에 들어가서 기사 내용을 크롤링하는 방식으로 여러 페이지에 걸쳐 진행하는 작업을 하였습니다. 그런데 다수의 기사의 제목과 내용을 크롤링하다보니까 대부분은 동일한 구조를 가지고 작성되어 있어서 원하는 데이터를 추출할 수 있었지만, 간혹 다른 구조로 작성된 기사가 있어서 제가 추출을 원하는 부분의 css 언어와 불일치하여 None으로 표기가 되며 크롤링을 멈추는 상황이 발생하였습니다. 이럴 경우에 None으로 표기되는 기사를 건너뛰고 후속작업을 계속 진행하게 하려면 어떻게 해야하나요? 제가 if 구문을 사용해서 작성을 해보려고 하였는데 데이터가 없다는 것을 어떻게 표현해야할지 모르겠습니다. 감사합니다.
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
미리보기창?
선생님, 안녕하세요 잘 듣고 있습니다. 사진에서 보이듯 코딩하다가 오른쪽에 자그만한 이미지가 자꾸 뜨는데 이유가 무엇일까요? 어떻게 삭제해야할까요? 강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다.
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
random_state에 대해서 질문합니다
random_state 값 지정은 반복 연산 시에 동일한 결과를 얻어 볼 수 있게 한다는 걸로 알고 있습니다. 정확하게 어떤 프로세스에 의해서 동일한 결과를 얻는지 궁금합니다. 또한 타이타닉 생존자 예측 실습에서 결정트리, RandomForest,로지스틱 회귀를 비교 하는 과정에서 dt_clf = DecisionTreeClassifier(random_state=11) rf_clf = RandomForestClassifier(random_state=11) lr_clf = LogisticRegression() 로지스틱 회귀에서만 random_state 값을 지정해주지 않았는지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
미니rpg 강의를 시작하려고 하니 이전까지는 뜨지 않던 오류가 뜹니다.
ArgumentException: JSON parse error: Invalid value. UnityEngine.JsonUtility.FromJson (System.String json, System.Type type) (at <1386288601af43018501cce2912f52f4>:0) UnityEngine.JsonUtility.FromJson[T] (System.String json) (at <1386288601af43018501cce2912f52f4>:0) DataManager.LoadJson[Loader,Key,Value] (System.String path) (at Assets/scripts/Manager/DataManager.cs:26) DataManager.Init () (at Assets/scripts/Manager/DataManager.cs:19) Managers.Init () (at Assets/scripts/Manager/Managers.cs:52) Managers.get_Instance () (at Assets/scripts/Manager/Managers.cs:9) Managers.get_Resource () (at Assets/scripts/Manager/Managers.cs:22) BaseScene.Init () (at Assets/scripts/Scenes/BaseScene.cs:20) GameScene.Init () (at Assets/scripts/Scenes/GameScene.cs:9) BaseScene.Awake () (at Assets/scripts/Scenes/BaseScene.cs:12) 라는 오류와 NullReferenceException: Object reference not set to an instance of an object InputManager.OnUpdate () (at Assets/scripts/Manager/InputManager.cs:16) Managers.Update () (at Assets/scripts/Manager/Managers.cs:35) 라는 오류가 뜨는데 무엇을 고쳐야할까요 오류의 원인이 된 것 같은 scripts도 첨부합니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
AppLayout으로 감싸는 이유가 무엇인가용?
<> <Head> ... </Head> <AppLayout>...</AppLayout> <> 이렇게 감싸는 거랑 다른 점이 무엇인가요? profile도 이러한 형식으로 햇는데 signup.js만 AppLayout으로 전체를 감싼 의도가 무엇인지 알고싶습니다. 강의는 너무 유익하게 보고 있습니다.