안녕하세요, IP에서 Block RAM 강의 부분 듣고 있는데 질문이 있어서 글 올립니다. FIFO를 구현해보고 싶은데 아무래도 강의에 나와있는 부분은 RAM이다 보니 배운 부분을 응용하는게 어떨까 생각했습니다. FIFO IP가 따로 있는 것은 알고 있지만, RAM IP를 이용하여 FIFO처럼 기능 구현을 할 수 있나요?? Single Dual Port RAM를 쓰면 FIFO처럼 구현할 수 있을 것 같은데 맞는지 궁금합니다. 답변 부탁 드립니다. 감사합니다.
안녕하세요 :) 아래 코드와 같이 상품 조회할 때 select를 통해 일부 필드만 가져오도록 해봤습니다. service의 findAll 메서드에서는 유틸리티 타입으로 반환하도록 하였고, resolver에서는 Query 데코레이터에 GraphQL에서 제공하는 PickType으로 반환하게 했는데, 에러가 발생합니다.. (적절한 값이 아니라는 에러 내용) 이런 상황에서는 메서드 반환 타입과 GraphQL 타입 처리를 어떻게 해주는 것이 좋은지 감이 잘 안 잡혀서 질문드려요! // products.resolver.ts @Query(() => [PickType(Product, ['id', 'name', 'description'])]) fetchProducts(): Promise<Pick<Product, 'id' | 'name' | 'description'>[]> { return this.productsService.findAll(); } // products.service.ts findAll(): Promise<Pick<Product, 'id' | 'name' | 'description'>[]> { return this.productsRepository.find({ select: ['id', 'name', 'description'], }); }
안녕하세요. 선생님. 강의를 실습을 하다보니 데이터를 표형태로 변환한 후 '테이블/범위에서'를 눌러 쿼리로 접속하는 방법과 표 변환 버튼을 누르지 않고 바로 '테이블/범위에서'를 눌러 쿼리로 접속하는 방법이 있던데요, 어차피 2번 방법대로 해도 데이터가 자동으로 표로 변환이 되는데, 왜 불편하게 1번처럼 하시는 것인지 이유를 알고 싶습니다. 늘 감사합니다.
for (unsigned int i = 9; i >= 0; --i) {cout << i << endl;} 5.7 강의 마지막에 선생님께서 이렇게 하면 오버플로가 발생할 수 있다고 하시는데 이건 왜 발생하나요? 0에서 멈추기 때문에 오버플로가 발생 안 할 것이라고 생각 들어서요...ㅠ
여기서 처음에 연습문제로 Hp를 100으로 두고 MaxHp를 150으로 두었을때 1번 키 입력시 데미지 10을 입게하고 2번 키 입력시 체력 20을 회복하게 하는 기능을 만드는 연습문제였는데 제가 좀 더 추가해서 현재 체력을 확인하는 기능이나 0이하로 떨어졌을시 데미지도 더이상 입을수없고 회복도 불가능하게 하거나 최대체력이면 최대체력이라서 회복이 불가능하다라는 문구가 나온다거나 하는식의 몇가지 응용아닌 응용해서 좀 더 살을 붙여서 풀고있었는데 의문이 드는 버그? 같은게 있어서 이게 어째서 일어나는가 싶어서 질문을 드립니다 [현재 HP 확인 노드] 키보드 3을 누를 시 HP를 카운트하여 알려준다. [데미지 받는 노드] 키보드 1을 누를 시 HP가 0보다 작을 경우 당신은 죽었습니다 라는 문구가 나온다. 키보드 1을 누를 시 HP에서 데미지를 마이너스한 HP를 카운트하여 알려준다. [체력회복하는 노드1] 키보드 2를 누를시 HP가 0보다 작을 경우 이미 사망하여 회복할 수 없습니다 라는 문구가 나온다. 키보드 2를 누를시 HP가 0보다 크고 HP가 MaxHP보다 크거나 같을경우 이미 최대 체력입니다 라는 문구가 나온다. 키보드 2를 누를시 HP가 0보다 크고 HP가 MaxHP보다 작은데 HP에 Heal(20)이 되는 수치만큼 더한 HP가 MaxHP보다 작을 경우 회복된 이후의 HP를 카운트하여 알려준다. [체력회복하는 노드2] 키보드 2를 누를시 HP가 0보다 크고 HP가 MaxHP보다 작은데 HP에 Heal(20)이 되는 수치만큼 더한 HP가 MaxHP보다 클 경우 HP를 MaxHP로 세팅하고 최대 체력으로 회복하였습니다라는 문구와 함께 최대HP를 카운트하여 알려준다. 여기서 체력확인이랑 데미지는 문제없었는데 체력을 회복할 때 다른곳에서는 문제가 전혀없었는데 체력이 120일때 회복을 하면 현재체력 120+ 체력회복 20으로 체력이 140이 되어야하는데 140을 건너뛰고 150으로 가더라구요... 데미지 입을때는 140 130 120 110 100 90 80 쭉쭉 건너뛰지않고 잘 내려가고 회복할때도 40일때 회복하면 60, 60일때 회복하면 80, 100 120 잘 가다가 120일때만 30이 회복되는게 왜그런가 궁금합니다!
Attempted import error: 'redux-thunk' does not contain a default export (imported as 'thunk'). ERROR in ./src/index.js 16:69-74 export 'default' (imported as 'thunk') was not found in 'redux-thunk' (possible exports: thunk, withExtraArgument) 이런 오류가 뜨는데 어떻게 해결해야하는걸까요?? import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; import { Provider } from 'react-redux'; import DatePicker from 'antd'; import { applyMiddleware, createStore } from 'redux'; import promiseMiddleware from 'redux-promise'; import thunk from 'redux-thunk' import Reducer from './_reducers'; const createStoreWithMiddleware = applyMiddleware(promiseMiddleware, thunk)(createStore) const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <Provider store={createStoreWithMiddleware(Reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() )}> <App /> </Provider> ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals();
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
제 코드는 아래와 같고, import 'package:advanced_app/product/model/product_model.dart'; import 'package:advanced_app/user/model/patch_basket_model.dart'; import 'package:advanced_app/user/model/basket_item_model.dart'; import 'package:advanced_app/user/repository/user_me_repository.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:collection/collection.dart'; final basketProvider = StateNotifierProvider<BasketProvider, List<BasketItemModel>>((ref) { final repository = ref.watch(userMeRepositoryProvider); return BasketProvider(repository: repository); }); class BasketProvider extends StateNotifier<List<BasketItemModel>>{ final UserMeRepository repository; BasketProvider({ required this.repository, }):super([]); Future<void> patchBasket () async { await repository.patchBasket( body: PatchBasketBody( basket: state.map( (e) => PatchBasketBodyBasket( productID: e.product.id, count: e.count)) .toList()) ); } Future<void> addToBasket({ required ProductModel product,}) async { // 1 아직 장바구니에 해당 상품이 없는 경우 -> 추가 // 2 동일한 상품이 있는 경우 -> count +1 final exists = state.firstWhereOrNull((e) => e.product.id == product.id) != null; if(exists){ state = state .map( (e) => e.product.id == product.id ? e.copyWith(count: e.count +1) : e ).toList(); }else{ state = [ ...state, BasketItemModel( product: product, count:1) ]; } await patchBasket(); } Future<void> removeFromBasket({ required ProductModel product, bool isDelete = false}) async{ // isDelete면 count와 상관없이 삭제 final exists = state.firstWhereOrNull((e) => e.product.id == product.id) != null; if(!exists){ return; } // 이제 무조건 있는 경우 final existingProduct = state.firstWhere((element) => element.product.id == product.id); // 1개 있는 경우 삭제 (해당하는 상품 빼고 리스트 만들어서 넣어 주는 방식) if (existingProduct.count == 1 || isDelete){ state = state .where((e) => e.product.id != product.id) .toList(); } else{ // 2개 이상 있는 경우 state = state .map((e) => e.product.id == product.id? e.copyWith( count: e.count -1) : e).toList(); } } } 에러 로그는 아래와 같습니다. -------------- [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: type 'Null' is not a subtype of type 'Map<String, dynamic>' in type cast #0 $BasketItemModelFromJson (package:advanced app/user/model/basket_item_model.g.dart:11:54) #1 new BasketItemModel.fromJson (package:advanced_app/user/model/basket_item_model.dart:25:14) #2 UserMeRepository.patchBasket.<anonymous closure> (package:advanced app/user/repository/user_me_repository.g.dart:93:45) #3 MappedListIterable.elementAt (dart:_internal/iterable.dart:415:31) #4 ListIterator.moveNext (dart:_internal/iterable.dart:344:26) #5 new GrowableList. ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27) #6 new GrowableList.of (dart:core-patch/growable array.dart:150:28) #7 new List.of (dart:core-patch/array_patch.dart:47:28) #8 ListIterable.toList (dart:_internal/iterable.dart:214:7) #9 UserMeRepository.patchBasket (package:advanced app/user/repository/user_me_repository.g.dart:94:10) Postman에서 get http://127.0.0.1:3000/user/me/basket 실행해 보면, [ { "count": 1 } ] 처럼 product가 제대로 안들어가고 count 값만 들어가 있습니다. jsonSerializable 문제인가 싶어서 모델들 다 체크해봤는데... 코드 제너레이션도 정상적으로 되는데... 뭐가 문제일까요? 이것 때문에 3시간 넘게 씨름 중인데 도움 주시면 감사하겠습니다!
안녕하세요. 선생님. 고생많으십니다. 제목 그대로 본 파워쿼리 강의와 유튜브 파워쿼리 강의의 차이점이 궁금합니다. 러닝타임도 본 강의보다 유튜브 파워쿼리 강의가 훨씬 길고 다양한 예제를 다루고 있는 것 같은데요, 핵심만 모아놓은 것이 본 유료강의인가요? 실력을 더 기르려면 유튜브 강의도 공부해야할까요?
비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지
프로젝트를 완성하고 aws 인스턴스 프리티어 사용량이 제한량에 거의 도달해서 항상 켜놓으면 안되겠다고 생각해서 잠깐 중단시켰다가 며칠후에 재시작 시켰는데 재시작 한 이후로 지도상에 핀이 안 보이는데 어떻게 해야할까요? pm2도 해놔서 인스턴스를 중단했다가 재시작한것 때문인거 같은데... mysql을 접속하려 했을때 이런 창이 뜹니다.
java -jar hello-spring-0.0.1-SNAPSHOT.jar 오류: 기본 클래스 org.springframework.boot.loader.launch.JarLauncher을(를) 로드하는 중 LinkageError가 발생했습니다. java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/launch/JarLauncher has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 Java 17, 스프링부트 3.2.0 입니다 이런 에러가 뜨는데 어떻게 해결해야하나요??
안녕하세요 영상강의를 보며 클론 코딩하면서 하나씩 배우고 있는데 백단에서 Cors 설정을 해주었음에도 불구하고 (강의 섹션 3 수정/삭제 처리 진행 중 ) @Override public void addCorsMappings ( CorsRegistry registry) { registry.addMapping( "/**" ) .allowedOrigins( "*" ) .allowedMethods( "HEAD" , "GET" , "POST" , "PUT" , "DELETE" , "OPTIONS" ) .maxAge( 300 ) .allowedHeaders( "Authorization" , "Cache-Control" , "Content-Type" ); } 여전히 호출 불가 상태로 있는데 원인을 모르겠습니다. 혹시나 몰라 todoApi.js 파일을 제공된 소스파일로 엎어쳐서 진행을 했는데도 불구하고 말이죠..
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 자바 os 관련해서, 개발 머신은 맥북이나 실제 자바로 개발한 API를 리눅스 또는 AWS에서 돌린다고 하면, JAVA 특성상 크게 문제는 없을것 같지만, 맥에 최적화 된 JAVA를 설치하는게 좋은 것인지 아니면 서버에 맞추어 설치하는게 좋은것인지 궁금합니다.
from openai import OpenAI client = OpenAI( api_key = "----" ) message = [] while True : user_cotent = input("user : ") message.append({"role": "system", "content": f"{user_cotent}"}) completion = client.chat.completions.create(model="gtp=3.5-turbo", messages=message) assisant_content = completion.choices[0].message["content"] message.append({"role": "assiant", "content": f"{assisant_content}"}) print(f"GPT : {assisant_content}") 업데이트 된 API로 인하여 강의에서 막혔던 부분을 유튜브를 통해 해결하고 API Key에서 막혔던 부분은 결제를 통하여 해결하였습니다. 그리고 유튜브에서 업데이트 된 Assistant 내용이 있어 그 부분까지는 따라했습니다. 그런데 58강(openai API 사용법(ChatGPT gpt-3.5-turbo 모델) 강의 내용을 제 나름대로 업데이트된 API 코딩에 맞게 수정하여 실행해 봤는데 에러가 발생하네요 기존 강의와 업데이트 된 API 는 접목이 되지 않는건가요? 그렇다면 API와 대화하듯이 질문을 주고 받는 것은 업데이트 된 Assisant 코딩에서 수정을 하여 만들어야 하는건가요? 이 뒷 강의들을 내용을 아직 보지는 않았으나 만일 현재 업데이트된 API와 맞지 않다면 어떻게 공부하는게 맞을까요?
안녕하세요 제로초님. 리액트 강의 언제나 잘 듣고 있습니다. 양질의 강의 너무 감사합니다. 제로토님의 '커스텀 훅으로 우아하게 인터벌하기' 강의를 듣고 난 후 개인적으로 코드를 분석해보고 있었는데, 공식 문서도 찾아보고 개인적으로 테스트를 굴려봐도 해결되지 않는 의문이 있어 찾아왔습니다. 먼저, 함수 컴포넌트 파일에서 아래 <1번> 처럼 구성하였기 때문에, 변수 changeHand에는 모양만 같을 뿐 저장공간이 다른 새로운 함수가 매 랜더링 시 마다 만들어진 후 useInterval에 매개변수로 넘어가겠구나.. 하고 이해했습니다. <1번> const changeHand = () => { console.log(imgCoord); if (imgCoord===rspCoords.r) { setImgCoord(rspCoords.s); } else if (imgCoord === rspCoords.s) { setImgCoord(rspCoords.p); } else if (imgCoord === rspCoords.p) { setImgCoord(rspCoords.r); } } useInterval(changeHand, isRunning ? 100 : null); 그리고 useInterval 함수와 아래 <2번> 코드가 컴포넌트가 새로 랜더링 될 때 마다 실행 될 것이라고도 이해했습니다. <2번> useEffect(()=>{ savedCallback.current = callback; }); 그러니 즉, 아래 두 코드를 해석해보자면 매 랜더링 시 마다 새로운 changeHand 함수를 만들어, useInterval을 호출해 매개변수로 넘겨준 다음 useRef 훅으로 saveCallback.current에 저장해주고 있다.. 라고 이해했습니다. (잘 이해한게... 맞을까요..?) 그리고 이렇게 저장된 changeHand 함수는 <3번> 코드의 setInterval(tick, delay)에 의해, delay초 마다 한번씩 실행되게 된다는 내용 까지 이해했습니다. <3번> useEffect(()=>{ function tick() { savedCallback.current(); } if (delay !== null) { let id = setInterval(tick, delay); return () => { clearInterval(id);} } }, [delay]); 일단 저는 '왜 첫번째 useEffect(2번 코드)를 계속 반복해야할까요?' 라는 질문의 답에 대해서, 매 랜더링 시 마다 컴포넌트와 컴포넌트 함수들은 새로이 만들어지기 때문에, 마찬가지로 savedCallback에도 이전 함수가 아니라 새로 만들어진 함수를 저장해야하기 때문이겠구나.. 라고 생각했었습니다. 하지만 이 가정이 맞다면, 컴포넌트가 재실행되며 이전 컴포넌트 객체였던 것은 생명주기 순서에 따라 새로 랜더링 되기 전에 삭제될 테니, 이전 컴포넌트 객체와 함수들은 저장공간에 남아있지 말아야 할 것입니다. 그래서 별도로 배열 변수를 만들어, 랜더링 시 마다 만들어지는 changeHand 함수를 순서대로 저장한 후 한 20번 째 랜더링 쯤에서 두 번째로 만들어진 changeHand 함수를 콘솔창에 찍어봤었습니다. 저는 이 과정을 통해 undefind 에러가 발생하거나 null값이 출력될 줄 알았는데(더이상 메모리에 없는 함수 객체일테니..) 잘만 실행되더군요 ㅠㅠㅠ 제가 어떤 부분을 이해하지 못하고 있는 걸까요..? (아예 통째로 잘못 이해하고 있는 것도 같고... ㅠㅠ) 감사합니다.