묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 배치
문의 드립니다.
안녕하세요. 강사님, 수강생입니다. 강의듣다가 , 결과가 강사님과 다르게 나오는데, 소스위치가. https://github.com/onjsd...=> 여기 아닌가요 ? * JobRepositoryConfiguration 여길 따라하고 잇는데, JobExecution lastJobExecution = jobRepository.getLastJobExecution(jobName, jobParameters); 실행하면, lastJobExecution 값이 null 로 나와서.. 강의소스 따라해보려고 합니다
-
미해결객체 지향 프로그래밍 입문
DIP
안녕하세요! 객체지향과 디자인패턴 - 최범균 님 책을 읽고 여기까지 왔네요! ㅎㅎㅎ 복습하기 좋은 강의였습니다. 다만, DIP 에서 조금 헷갈리는게 있는데요. 하나의 예를들면서 여쭤보고 싶습니다. Controller 와 Service가 있다고 하면 Controller 에서 Service 를 의존하고 있을 때, Service의 구체적인 구현체를 Controller 에서 의존하고 있기에 이것은 Controller ( 고모듈 ) 이 Service (저모듈 ) 을 의존하고 있는 거잖아요.? 그럼 여기서 Controller 와 Service 사이에 Interface를 둬서 Controller에서는 ServiceInterface의 고수준 모듈을 의존하고 ServiceInterface를 상속한 저모듈 구현체는 상속을 한 Interface ( 고수준 ) 에 의존 되어있기에 딱 좋은 예제라고 생각하는데 맞을까요?! 감사합니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
영상 3:20 , 8분35초 입니다
3:20 영상에서는 dispatch에서 addPost라는 함수에 text를 넘겨주고 사가에서받는 함수의 이름도 addPost인데 8:35영상에서는 addComment 사가에서 어떻게 해당 data를 받는건지 이해가안됩니다.ㅠㅠ 왼쪽화면에서 TYPE이 ADD_COMMENT_REQUEST라 오른쪽에서 화면 takeLatest에 해당 type의 액션이 있어서 addComment에서 받은것인가요 ?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
coreMacro xalloc 관련 질문입니다.
제가 현재 비주얼스튜디오 2019를 사용하고 있습니다. macro에 xalloc이라고 작성하면 오류가 나서 Xalloc으로 이름을 변경하고 사용하니깐 빌드가 잘 되더라구요. 혹시 이름 변경하고 실습을 진행해도 될지 질문드립니다!
-
미해결현업 실무자에게 배우는 Kaggle 머신러닝 입문 - ML 엔지니어 실무 꿀팁
PolynomialFeatures
이번에 PolynomialFeatures에 대해서 설명해 주셔서 감사합니다. 궁금증이 있어 질문 드립니다. 1. 혹시 feature 데이터 셋을 만들때, 범주형 데이터가 포함된 feature의 경우 데이터 컬럼을 제외하고 generation해야 하는 걸까요? 2. 1번의 질문과 비슷하게 feature의 값이 continuous 할 경우에만 적용을 하는건지? 아니면 범주형 feautre과 섞어서 사용해도 괜찮은가? 에 대해 궁금하여 질문 드립니다. 감사합니다.
-
미해결현업 실무자에게 배우는 Kaggle 머신러닝 입문 - ML 엔지니어 실무 꿀팁
one hot encoding
혹시 feature 가 범주형 값이라고 할 때, 3개의 범주 이상 일 경우에는 모두 one hot encoding을 적용해야 하는 걸까요??
-
미해결대세는 쿠버네티스 (초급~중급편)
k8s 설치 - cannot find a valid baseurl for repo base/7/x86_64 에러
잘 따라가다가 centOS를 업데이트하려고 yum update -y를 입력하면 cannot find a valid baseurl for repo base/7/x86_64 에러가 납니다. 구글링 해봐도 소용이 없어서 글 남겨봅니다.
-
미해결FreeRTOS 프로그래밍
NUCLEO-L152RE 보드 연결 관련 문의
안녕하세요 선생님 이전 NUCLEO-L152RE 보드를 추천받고 강의를 보면서 실습중입니다! 해당 보드를 연결하고, dvmgmt.msc에서 (1) 포트와 (2) 범용 직렬 버스 장치 항목을 통해 정상적으로 연결됨을 확인하였습니다. 이후 보드 디버깅을 하여 putty로 출력 결과를 보려하는데 아무것도 뜨지 않음을 확인하였습니다. 동일하게 COM3 / 115200 / Serial로 설정하였습니다. 무엇이 문제일까요?? (추가로) 새로운 PORT 프로젝트를 생성하고, FreeRTOS 코드를 추가할 때 영상과 달리, /* Initialize all configured peripherals */ MX_GPIO_Init(); 까지만 생성되고, MX_USART2_UART_Init()이 생성되지 않습니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
service단에서 exception처리시
ㄱ 안녕하세요 강사님, 제가 지금 이런 예외처리들을 serviceimpl단에서 해주고 있는데 예외처리를 서비스(비즈니스로직)단에서 처리하는 것은 잘못 된 것인가요? 그리고 이번 강의에 Customized~ExceptionHandler에서 @RestControllerAdvice라는 어노테이션을 달아줘서 모든 컨트롤러 전에 동작한다고 하셨는데, 저처럼 서비스단에서 예외처리를 해주면 어떤것을 달아줘야하나요?
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
Exception 처리 질문 드립니다.
이전 강의에서 이렇게 UserNotFoundException위에 @ResponseStatus(HttpStatus.NOT_FOUNT)어노테이션을 달아줬는데 이번 강의에 Custom~ExceptionHandler의 handleUserNotFoundException 이 메서드에서 또 HttpStatus.NOT_FOUND를 왜 해주는건가요? 기존의 UserNotFountException클래스의 어노테이션은 의미가 없는것이 아닌지 궁금하네요 ㅎㅎ
-
해결됨애플 웹사이트 인터랙션 클론!
canvas에 사진이 출력되지 않습니다
해당 강의를 바탕으로 따로 페이지 하나를 제작하고 있는데 사진은 지정이 되지만 사진이 출력되지 않네요 ㅠ 그리고 Uncaught TypeError : Cannot read properties of undefined (reading @@@) 에러가 length랑 style에 뜨는데 원인과 해결방법을 알 수 있을까요? -> 이 부분은 해결했습니다. main.js 코드입니다 + canvas를 통해 (머그컵과 같은) video 모션 이미지들이 들어가는 곳은 section 2,3,4 입니다. (() => { // 변수 모음 let yOffset = 0; // window.pageYOffset 대신 쓸 변수 let prevScrollHeight; // 현재 스크롤 위치 이전의 섹션들의 높이 합 let currentScene = 0; // 현재 보고 있는 씬 scroll-section 몇 번째인지 let enterNewScene = false; // 새로운 세션 시작된 순간 true const sceneInfo = [ { // section 0 - 인트로 type: "sticky", heightNum: 5, // 브라우저 높이의 5배로 세팅 scrollHeight: 0, objs: { container: document.querySelector("#scroll-section-0"), messageA: document.querySelector("#scroll-section-0 .main-message.a"), messageB: document.querySelector("#scroll-section-0 .main-message.b"), messageC: document.querySelector("#scroll-section-0 .main-message.c"), messageD: document.querySelector("#scroll-section-0 .main-message.d"), }, values: { // 타이밍 구간 지정 // 나타나는 타이밍 조절 messageA_opacity_in: [0, 1, { start: 0.1, end: 0.2 }], messageB_opacity_in: [0, 1, { start: 0.3, end: 0.4 }], messageC_opacity_in: [0, 1, { start: 0.5, end: 0.6 }], messageD_opacity_in: [0, 1, { start: 0.7, end: 0.8 }], // 위치 변화 타이밍 조절 messageA_translateY_in: [20, 0, { start: 0.1, end: 0.2 }], messageB_translateY_in: [20, 0, { start: 0.3, end: 0.4 }], messageC_translateY_in: [20, 0, { start: 0.5, end: 0.6 }], messageD_translateY_in: [20, 0, { start: 0.7, end: 0.8 }], // 시라지는 타이밍 조절 messageA_opacity_out: [1, 0, { start: 0.25, end: 0.3 }], messageB_opacity_out: [1, 0, { start: 0.45, end: 0.5 }], messageC_opacity_out: [1, 0, { start: 0.65, end: 0.7 }], messageD_opacity_out: [1, 0, { start: 0.85, end: 0.9 }], // 위치 조절 타이밍 조절 messageA_translateY_out: [0, -20, { start: 0.25, end: 0.3 }], messageB_translateY_out: [0, -20, { start: 0.45, end: 0.5 }], messageC_translateY_out: [0, -20, { start: 0.65, end: 0.7 }], messageD_translateY_out: [0, -20, { start: 0.85, end: 0.9 }], }, }, { // section 1 - 서비스 리스트 type: "normal", // heightNum: 5, // type normal에서는 필요 없음 scrollHeight: 0, objs: { container: document.querySelector("#scroll-section-1"), content: document.querySelector("#scroll-section-1 .description"), }, }, { // section 2 - 공개행정 type: "sticky", heightNum: 5, scrollHeight: 0, objs: { container: document.querySelector("#scroll-section-2"), // messageABCD canvas: document.querySelector("#video-canvas-2"), context: document.querySelector("#video-canvas-2").getContext("2d"), videoImages: [], }, values: { videoImageCount: 14, imageSequence: [0, 13], canvas_opacity: [1, 0, { start: 0.9, end: 1 }], canvas_opacity_out: [1, 0, { start: 0.95, end: 1 }], // ,assage opacity, translate }, }, { // section 3 - 참여행정 type: "sticky", heightNum: 5, scrollHeight: 0, objs: { container: document.querySelector("#scroll-section-3"), // messageABCD canvas: document.querySelector("#video-canvas-3"), //content: document.querySelector("#scroll-section-3 .description"), context: document.querySelector("#video-canvas-3").getContext("2d"), videoImages: [], }, values: { videoImageCount: 15, imageSequence: [0, 14], canvas_opacity: [1, 0, { start: 0.9, end: 1 }], canvas_opacity_out: [1, 0, { start: 0.95, end: 1 }], // ,assage opacity, translate }, }, { // section 4 - 능률행정 type: "sticky", heightNum: 5, scrollHeight: 0, objs: { container: document.querySelector("#scroll-section-4"), // messageABCD canvas: document.querySelector("#video-canvas-4"), //content: document.querySelector("#scroll-section-4 .description"), //context: document.querySelector("#video-canvas-4").getContext("2d"), videoImages: [], }, values: { videoImageCount: 12, imageSequence: [0, 11], canvas_opacity: [1, 0, { start: 0.9, end: 1 }], canvas_opacity_out: [1, 0, { start: 0.95, end: 1 }], // ,assage opacity, translate }, }, { // section 5 - 마무리 type: "sticky", heightNum: 5, // 브라우저 높이의 5배로 세팅 scrollHeight: 0, objs: { container: document.querySelector("#scroll-section-5"), messageA: document.querySelector("#scroll-section-5 .main-message.a"), messageB: document.querySelector("#scroll-section-5 .main-message.b"), messageC: document.querySelector("#scroll-section-5 .main-message.c"), messageD: document.querySelector("#scroll-section-5 .main-message.d"), }, values: { // 타이밍 구간 지정 // 나타나는 타이밍 조절 messageA_opacity_in: [0, 1, { start: 0.1, end: 0.2 }], messageB_opacity_in: [0, 1, { start: 0.3, end: 0.4 }], messageC_opacity_in: [0, 1, { start: 0.5, end: 0.6 }], messageD_opacity_in: [0, 1, { start: 0.7, end: 0.8 }], // 위치 변화 타이밍 조절 messageA_translateY_in: [20, 0, { start: 0.1, end: 0.2 }], messageB_translateY_in: [20, 0, { start: 0.3, end: 0.4 }], messageC_translateY_in: [20, 0, { start: 0.5, end: 0.6 }], messageD_translateY_in: [20, 0, { start: 0.7, end: 0.8 }], // 시라지는 타이밍 조절 messageA_opacity_out: [1, 0, { start: 0.25, end: 0.3 }], messageB_opacity_out: [1, 0, { start: 0.45, end: 0.5 }], messageC_opacity_out: [1, 0, { start: 0.65, end: 0.7 }], messageD_opacity_out: [1, 0, { start: 0.85, end: 0.9 }], // 위치 조절 타이밍 조절 messageA_translateY_out: [0, -20, { start: 0.25, end: 0.3 }], messageB_translateY_out: [0, -20, { start: 0.45, end: 0.5 }], messageC_translateY_out: [0, -20, { start: 0.65, end: 0.7 }], messageD_translateY_out: [0, -20, { start: 0.85, end: 0.9 }], }, }, ]; function setCanvasImages() { let imgElem1; for (let i = 0; i < sceneInfo[2].values.videoImageCount; i++) { imgElem1 = new Image(); imgElem1.src = `./video/section2_file/section2IMG_${i}.JPG`; sceneInfo[2].objs.videoImages.push(imgElem1); } let imgElem2; for (let i = 0; i < sceneInfo[3].values.videoImageCount; i++) { imgElem2 = new Image(); imgElem2.src = `./video/section3_file/section3IMG_${i}.JPG`; sceneInfo[3].objs.videoImages.push(imgElem2); } let imgElem3; for (let i = 0; i < sceneInfo[4].values.videoImageCount; i++) { imgElem3 = new Image(); imgElem3.src = `./video/section4_file/section4IMG_${i}.JPG`; sceneInfo[4].objs.videoImages.push(imgElem3); } } function setLayout() { // 각 스크롤 섹션의 높이 세팅 for (let i = 0; i < sceneInfo.length; i++) { if (sceneInfo[i].type === "sticky") { sceneInfo[i].scrollHeight = sceneInfo[i].heightNum * window.innerHeight; } else if (sceneInfo[i].type === "normal") { sceneInfo[i].scrollHeight = sceneInfo[i].objs.container.offsetHeight; } // 섹션의 높이를 html에 세팅 sceneInfo[ i ].objs.container.style.height = `${sceneInfo[i].scrollHeight}px`; } yOffset = window.pageYOffset; let totalScrollHeight = 0; for (let i = 0; i < sceneInfo.length; i++) { totalScrollHeight += sceneInfo[i].scrollHeight; if (totalScrollHeight >= yOffset) { currentScene = i; break; } } document.body.setAttribute("id", `show-scene-${currentScene}`); const heightRatio = window.innerHeight / 1080; sceneInfo[2].objs.canvas.style.transform = `translate3d(-50%, -50%, 0) scale(${heightRatio})`; } // 값이 변화되는 걸 계산 // currentYOffset - 현재 섹션에서 얼마나 scroll되었는지 비율 계산 function calcValues(values, currentYOffset) { let rv; // return value const scrollHeight = sceneInfo[currentScene].scrollHeight; const scrollRatio = currentYOffset / scrollHeight; // 범위에 따른 타이밍 조절 if (values.length === 3) { // start ~ end 사이 애니메이션 실행 const partScrollStart = values[2].start * scrollHeight; const partScrollEnd = values[2].end * scrollHeight; const partScrollHeight = partScrollEnd - partScrollStart; if ( currentYOffset >= partScrollStart && currentYOffset <= partScrollEnd ) { rv = ((currentYOffset - partScrollStart) / partScrollHeight) * (values[1] - values[0]) + values[0]; } else if (currentYOffset < partScrollStart) { rv = values[0]; } else if (currentYOffset > partScrollEnd) { rv = values[1]; } } else { rv = scrollRatio * (values[1] - values[0]) + values[0]; // 0~1 -> 범위 확장 return rv; } return rv; } // 애니메이션 진행 처리 함수 function playAnimation() { const objs = sceneInfo[currentScene].objs; const values = sceneInfo[currentScene].values; const currentYOffset = yOffset - prevScrollHeight; // 현재 섹션에서 위치 const scrollHeight = sceneInfo[currentScene].scrollHeight; const scrollRatio = currentYOffset / scrollHeight; //console.log(currentScene, currentYOffset); switch (currentScene) { case 0: // 인트로 // console.log('0 play'); // let sequence = Math.round(calcValues(values.imageSequence, currentYOffset)); // objs.context.drawImage(objs.videoImages[sequence], 0, 0); if (scrollRatio <= 0.22) { // in objs.messageA.style.opacity = calcValues( values.messageA_opacity_in, currentYOffset ); objs.messageA.style.transform = `translate3d(0, ${calcValues( values.messageA_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageA.style.opacity = calcValues( values.messageA_opacity_out, currentYOffset ); objs.messageA.style.transform = `translate3d(0, ${calcValues( values.messageA_translateY_out, currentYOffset )}%, 0)`; } if (scrollRatio <= 0.42) { // in objs.messageB.style.opacity = calcValues( values.messageB_opacity_in, currentYOffset ); objs.messageB.style.transform = `translate3d(0, ${calcValues( values.messageB_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageB.style.opacity = calcValues( values.messageB_opacity_out, currentYOffset ); objs.messageB.style.transform = `translate3d(0, ${calcValues( values.messageB_translateY_out, currentYOffset )}%, 0)`; } if (scrollRatio <= 0.62) { // in objs.messageC.style.opacity = calcValues( values.messageC_opacity_in, currentYOffset ); objs.messageC.style.transform = `translate3d(0, ${calcValues( values.messageC_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageC.style.opacity = calcValues( values.messageC_opacity_out, currentYOffset ); objs.messageC.style.transform = `translate3d(0, ${calcValues( values.messageC_translateY_out, currentYOffset )}%, 0)`; } if (scrollRatio <= 0.82) { // in objs.messageD.style.opacity = calcValues( values.messageD_opacity_in, currentYOffset ); objs.messageD.style.transform = `translate3d(0, ${calcValues( values.messageD_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageD.style.opacity = calcValues( values.messageD_opacity_out, currentYOffset ); objs.messageD.style.transform = `translate3d(0, ${calcValues( values.messageD_translateY_out, currentYOffset )}%, 0)`; } break; case 1: // 리스트 break; case 2: // 공개행정 objs.canvas.style.opacity = calcValues( values.canvas_opacity, currentYOffset ); if (scrollRatio <= 0.5) { // in objs.canvas.style.opacity = calcValues( values.canvas_opacity_in, currentYOffset ); } else { // out objs.canvas.style.opacity = calcValues( values.canvas_opacity_out, currentYOffset ); } if (scrollRatio <= 0.25) { // in objs.messageA.style.opacity = calcValues( values.messageA_opacity_in, currentYOffset ); objs.messageA.style.transform = `translate3d(0, ${calcValues( values.messageA_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageA.style.opacity = calcValues( values.messageA_opacity_out, currentYOffset ); objs.messageA.style.transform = `translate3d(0, ${calcValues( values.messageA_translateY_out, currentYOffset )}%, 0)`; } if (scrollRatio <= 0.57) { // in objs.messageB.style.transform = `translate3d(0, ${calcValues( values.messageB_translateY_in, currentYOffset )}%, 0)`; objs.messageB.style.opacity = calcValues( values.messageB_opacity_in, currentYOffset ); objs.pinB.style.transform = `scaleY(${calcValues( values.pinB_scaleY, currentYOffset )})`; } else { // out objs.messageB.style.transform = `translate3d(0, ${calcValues( values.messageB_translateY_out, currentYOffset )}%, 0)`; objs.messageB.style.opacity = calcValues( values.messageB_opacity_out, currentYOffset ); objs.pinB.style.transform = `scaleY(${calcValues( values.pinB_scaleY, currentYOffset )})`; } if (scrollRatio <= 0.83) { // in objs.messageC.style.transform = `translate3d(0, ${calcValues( values.messageC_translateY_in, currentYOffset )}%, 0)`; objs.messageC.style.opacity = calcValues( values.messageC_opacity_in, currentYOffset ); objs.pinC.style.transform = `scaleY(${calcValues( values.pinC_scaleY, currentYOffset )})`; } else { // out objs.messageC.style.transform = `translate3d(0, ${calcValues( values.messageC_translateY_out, currentYOffset )}%, 0)`; objs.messageC.style.opacity = calcValues( values.messageC_opacity_out, currentYOffset ); objs.pinC.style.transform = `scaleY(${calcValues( values.pinC_scaleY, currentYOffset )})`; } break; case 3: // 참여행정 objs.canvas.style.opacity = calcValues( values.canvas_opacity, currentYOffset ); if (scrollRatio <= 0.25) { // in objs.messageA.style.opacity = calcValues( values.messageA_opacity_in, currentYOffset ); objs.messageA.style.transform = `translate3d(0, ${calcValues( values.messageA_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageA.style.opacity = calcValues( values.messageA_opacity_out, currentYOffset ); objs.messageA.style.transform = `translate3d(0, ${calcValues( values.messageA_translateY_out, currentYOffset )}%, 0)`; } if (scrollRatio <= 0.57) { // in objs.messageB.style.transform = `translate3d(0, ${calcValues( values.messageB_translateY_in, currentYOffset )}%, 0)`; objs.messageB.style.opacity = calcValues( values.messageB_opacity_in, currentYOffset ); objs.pinB.style.transform = `scaleY(${calcValues( values.pinB_scaleY, currentYOffset )})`; } else { // out objs.messageB.style.transform = `translate3d(0, ${calcValues( values.messageB_translateY_out, currentYOffset )}%, 0)`; objs.messageB.style.opacity = calcValues( values.messageB_opacity_out, currentYOffset ); objs.pinB.style.transform = `scaleY(${calcValues( values.pinB_scaleY, currentYOffset )})`; } if (scrollRatio <= 0.83) { // in objs.messageC.style.transform = `translate3d(0, ${calcValues( values.messageC_translateY_in, currentYOffset )}%, 0)`; objs.messageC.style.opacity = calcValues( values.messageC_opacity_in, currentYOffset ); objs.pinC.style.transform = `scaleY(${calcValues( values.pinC_scaleY, currentYOffset )})`; } else { // out objs.messageC.style.transform = `translate3d(0, ${calcValues( values.messageC_translateY_out, currentYOffset )}%, 0)`; objs.messageC.style.opacity = calcValues( values.messageC_opacity_out, currentYOffset ); objs.pinC.style.transform = `scaleY(${calcValues( values.pinC_scaleY, currentYOffset )})`; } break; case 4: // 능률 행정 objs.canvas.style.opacity = calcValues( values.canvas_opacity, currentYOffset ); if (scrollRatio <= 0.25) { // in objs.messageA.style.opacity = calcValues( values.messageA_opacity_in, currentYOffset ); objs.messageA.style.transform = `translate3d(0, ${calcValues( values.messageA_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageA.style.opacity = calcValues( values.messageA_opacity_out, currentYOffset ); objs.messageA.style.transform = `translate3d(0, ${calcValues( values.messageA_translateY_out, currentYOffset )}%, 0)`; } if (scrollRatio <= 0.57) { // in objs.messageB.style.transform = `translate3d(0, ${calcValues( values.messageB_translateY_in, currentYOffset )}%, 0)`; objs.messageB.style.opacity = calcValues( values.messageB_opacity_in, currentYOffset ); objs.pinB.style.transform = `scaleY(${calcValues( values.pinB_scaleY, currentYOffset )})`; } else { // out objs.messageB.style.transform = `translate3d(0, ${calcValues( values.messageB_translateY_out, currentYOffset )}%, 0)`; objs.messageB.style.opacity = calcValues( values.messageB_opacity_out, currentYOffset ); objs.pinB.style.transform = `scaleY(${calcValues( values.pinB_scaleY, currentYOffset )})`; } if (scrollRatio <= 0.83) { // in objs.messageC.style.transform = `translate3d(0, ${calcValues( values.messageC_translateY_in, currentYOffset )}%, 0)`; objs.messageC.style.opacity = calcValues( values.messageC_opacity_in, currentYOffset ); objs.pinC.style.transform = `scaleY(${calcValues( values.pinC_scaleY, currentYOffset )})`; } else { // out objs.messageC.style.transform = `translate3d(0, ${calcValues( values.messageC_translateY_out, currentYOffset )}%, 0)`; objs.messageC.style.opacity = calcValues( values.messageC_opacity_out, currentYOffset ); objs.pinC.style.transform = `scaleY(${calcValues( values.pinC_scaleY, currentYOffset )})`; } break; case 5: // 마무리 if (scrollRatio <= 0.22) { // in objs.messageA.style.opacity = calcValues( values.messageA_opacity_in, currentYOffset ); objs.messageA.style.transform = `translate3d(0, ${calcValues( values.messageA_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageA.style.opacity = calcValues( values.messageA_opacity_out, currentYOffset ); objs.messageA.style.transform = `translate3d(0, ${calcValues( values.messageA_translateY_out, currentYOffset )}%, 0)`; } if (scrollRatio <= 0.42) { // in objs.messageB.style.opacity = calcValues( values.messageB_opacity_in, currentYOffset ); objs.messageB.style.transform = `translate3d(0, ${calcValues( values.messageB_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageB.style.opacity = calcValues( values.messageB_opacity_out, currentYOffset ); objs.messageB.style.transform = `translate3d(0, ${calcValues( values.messageB_translateY_out, currentYOffset )}%, 0)`; } if (scrollRatio <= 0.62) { // in objs.messageC.style.opacity = calcValues( values.messageC_opacity_in, currentYOffset ); objs.messageC.style.transform = `translate3d(0, ${calcValues( values.messageC_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageC.style.opacity = calcValues( values.messageC_opacity_out, currentYOffset ); objs.messageC.style.transform = `translate3d(0, ${calcValues( values.messageC_translateY_out, currentYOffset )}%, 0)`; } if (scrollRatio <= 0.82) { // in objs.messageD.style.opacity = calcValues( values.messageD_opacity_in, currentYOffset ); objs.messageD.style.transform = `translate3d(0, ${calcValues( values.messageD_translateY_in, currentYOffset )}%, 0)`; } else { // out objs.messageD.style.opacity = calcValues( values.messageD_opacity_out, currentYOffset ); objs.messageD.style.transform = `translate3d(0, ${calcValues( values.messageD_translateY_out, currentYOffset )}%, 0)`; } break; } } // "현재 활성시킬 스크롤 씬(세션) 결정하기" // 몇 번째 스크롤 섹션 진행중인지 check // 앞파트 스크롤 섹션의 height 합으로 계산 가능 function scrollLoop() { enterNewScene = false; prevScrollHeight = 0; // 값 누적 방지용 초기화 for (let i = 0; i < currentScene; i++) { prevScrollHeight += sceneInfo[i].scrollHeight; } if (yOffset > prevScrollHeight + sceneInfo[currentScene].scrollHeight) { enterNewScene = true; currentScene++; document.body.setAttribute("id", `show-scene-${currentScene}`); // currentScene에 맞춰서 body에 하나씩 세팅된다 } if (yOffset < prevScrollHeight) { enterNewScene = true; if (currentScene == 0) return; // 브라우저 바운스 효과로 음수 에러 방지 currentScene--; document.body.setAttribute("id", `show-scene-${currentScene}`); // currentScene에 맞춰서 body에 하나씩 세팅된다 } if (enterNewScene) return; playAnimation(); //console.log(currentScene); // 몇 번째 섹션인지 } //window.addEventListener("resize", setLayout); // height에러 check window.addEventListener("scroll", () => { yOffset = window.pageYOffset; //console.log(yOffset); // 스크롤 페이지 값 scrollLoop(); }); // 새로고침 window.addEventListener("load", setLayout); window.addEventListener("resize", setLayout); setLayout(); setCanvasImages(); })();
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
방어코드 작동이 안됩니다
수업대로 if 문안에 name, description, price, seller를 넣고 포스트맨 body에서 seller를 뺀 채로 send해보니 출력에서 res.send안의 내용이 출력되지 않습니다. 어느 부분이 잘못되었는지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
매니저들 관련 질문입니다.
지금까지 여러가지 매니저들을 만들면서 프레임워크를 구축한 것 같은데 여기에 사용된 코드들을 전부 이해하고 다음 챕터로 넘어가야 할까요? 아니면 일단 사용법만 숙지하고 다음 수업을 들어도 될까요?
-
미해결현업 실무자에게 배우는 Kaggle 머신러닝 입문 - ML 엔지니어 실무 꿀팁
데이터 갯수가 100K 의미
안녕하세요, Ridge & Lasso & ElasticNet Regression 강의의 9분 56초에서 데이터 갯수가 100K 라는 의미가 pandas의 dataframe을 생각해봤을때, 행과 열의 모든 데이터를 말하는 의미일까요?? 예를 들어서 3개의 feature가 있고 4개의 데이터가 있다고할때, 12개의 데이터 갯수가 있는게 맞을가요?
-
미해결코딩으로 학습하는 GoF의 디자인 패턴
Handler 순서 적용 관련
여러 핸드러를 적용시 생성자에 계속 넣어주는 방식은 좋지 않으니다르게 핸들러 순서를 적용하고 싶으면어떤 클래스 HandlerStore?를 지정해두고 해당 클래스에서내부적으로 HanderList를 필드로 갖고 있고,추가적으로 order 필드를 갖게 한 뒤 order를 기준으로 sorting 후 하나씩 적용하도록 하면 될거 같은데요 여기서 HandlerStore를 사용하는 것이 컴포짓 패턴이라고 볼수 있을까요?
-
미해결비전공자를 위한 개발자 취업 올인원 가이드 [통합편]
안녕하세요! '열심히'와 '노력'에 대한 기준에 대해 여쭙고 싶습니다!
안녕하세요 한정수님! 현재 국비지원 개발과정에 참여해서 열심히(?) 달려가고 있는 취준생입니다. 국비과정을 수강하며 혼란스럽고 어려운 점이 정말 많았는데, 우선 이렇게 좋은 강의 만들어주심에 정말 감사하다는 말씀 드려요! 취업을 목표로 선택과 집중이 필요한 시기인데 그런 부분에 대해 구체적이고 명확하게 제시해주는 강의라던가, 자료를 찾기가 쉽지 않았어서 강의를 들으며 정말 많은 도움을 받고 있어 감사했습니다! 다름이 아니라, 강의를 들으면서 한 가지 큰 의문점이 생겼는데요. 저도 늦은 나이에 개발자로 이직을 결심하고 이 길에 들어서게 되면서, 또 강의에서 소개해주시는 다른 많은 열심히 살아가고 계신 개발자님 사례라던가, 한정수님의 사례를 들으며 나는 그동안 열심히 살지 못했구나! 정말 제대로 노력해본 적이 있었던가? 하고 반성이 되더라고요. 그래서 이번에야말로 정말 최선을 다해 노력해보자, 라는 결심을 다지며 또 다시 달려나가려던 차에, 문득 궁금해졌습니다. '열심히'나 '노력'에 대한 기준이 과연 어떤걸까? 하는 사실 보다 근본적인 의문점이기는 한데, 오키에서 보았던 어떤 분의 수기에는, 국비지원 과정만으로 개발자를 준비했고 취업에 성공했는데 매일 14시간 이상씩 개발에 몰두했다던가... 또 소개해주신 사례중에 개발자 황준일님의 회고 글도 보면 굉장히 열심히 사시는 것 같은데, 저런 정도로 열심히 해야 하는 건가? 해서, 어느 정도로 열심히 해야 하는 건지에 대한 감이 잘 잡히지 않아서요. 그런 기준이 있다면 그것을 기준으로 삼아 더 열심히 해보고 싶은데, 몸이 상하는 걸 느끼면서까지 잠도 줄이고 해야 정말 열심히 했다고 할 수 있는 걸까, 그렇게 하면 정말 막연하게 정말 좋은 곳에서 좋은 연봉으로 일할 수 있는걸까, 하는 불안함과 막연함이 같이 생기더라고요. 그래서 앞서 언급드렸던 그 누구보다 열심히 하시고 노력하시는 분들 중 한 분이신 한정수님께 질문을 드려보고 싶었습니다! 좀 더 구체적으로 말씀드리자면 현재 제 위치에서는, 취업이 되기 전까지 자바로 혼자 코드를 구현해서 웹 개발을 충분히 할 수 있을 정도로 연습하고 훈련이 되면(?) 그게 열심히 했다고 할 수 있는 것인지...? 그 정도가 될 때까지 열심히 하면 되는건지..? 그런 것들이 좀 막연하게 느껴져서 이렇게 질문을 드립니다. 감사합니다!!
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
hover 시에, 양 방향 전부 효과를 줄 수 있는 방법
선생님 양 옆에서 색을 차게 할 방법은 없나요? 예를 들어서 위->아래 / 왼쪽->오른쪽이 동시에 차는 효과가 생기게끔 하고 싶어요. 색을 채우는 게 아니라 전 시간에 했던 것 처럼 선을 긋는 것도 마찬가지인데요. 테두리가 왼쪽 오른쪽 위쪽 아래쪽 4개가 있는데 호버했을 시에 이 네 방향이 전부 선이 그어지게 하려면 어떻게 해야 할까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
http 통신 질문있습니가.
http 통신을 하고 싶은데 혹시 추천할만한 라이브러리가 있을까요? 그리고 예전에 pocolib를 썼는데 불필요한 파일이 많아질것 같아서 http통신만 할 수 있는 좋은 라이브러리가 있을지 궁금합니다.
-
미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
두 코드의 차이점이 궁금합니다.
책에 나와있는 내용인데요. 1. const func = () => { return ()=> { console.log("hello"); }; }; 이렇게 함수를 선언하고 2. const innerFunc = func(); 이렇게 함수를 변수에다 집어넣은 후 3. innerFunc(); 함수를 선언을 하면 콘솔창에 hello라고 제대로 뜨는데 1 번 바로 뒤에 func(); 를 호출하면 왜 콘솔창에 hello가 안뜨는지 궁금합니다.
-
미해결내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)
네이버 주식 데이터
안녕하세요. 네이버 주식 데이터가 크롤링이 막혔다는 소리를 들었습니다. 그래서 강의에서 배운 내용을 적용할 수 없는 거 같은데 맞나요? 제가 못 찾고 있는지 궁금해서 질문 남깁니다~