이야기를 나눠요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
스프링 핵심 원리 - 고급편
영한님 사용하시는 키보드 기종이 어떻게 되시나요?
타건하는 소리가 좋아서 궁금해지네요!
-
갖고노는 MySQL 데이터베이스 by 얄코
잘못된 Tablename을 입력했을때 나오는 Northwind의 설명
안녕하세요! 데이터베이스를 처음 공부하기 시작한 대학생입니다. 이런 저런 실습을 해보다보니 테이블명을 잘못쳤을때, 대소문자를 다르게 쳐보거나하면 Northwind.잘못친테이블명 해서 오류가 나오더라구요. 그런거 누가 몰라 싶을 수도 있는데, Northwind가 뭐지? 싶어서 찾아보니 실습 페이지에 있는 샘플 데이터베이스의 데이터가 마이크로소프트가 제공하는 Northwind 지역의 정보라 데이터베이스 이름인 것 같더라구요. 아무도 질문한 적 없는 것 같아 남겨봅니다. 출처 : https://www.outsystems.com/forge/component-overview/7058/northwind-db 감사합니다.
-
it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
다르게 한번 풀어봤어요
char a[101], b[101]; int ary[256]; scanf("%s", a); scanf("%s", b); for (int i = 0; a[i] != '\0'; i++) { ary[a[i]]++; } for (int i = 0; b[i] != '\0'; i++) { ary[b[i]]++; } bool flag = false; for (int i = 0; i < 256; i++) { if (ary[i] % 2 != 0) { flag = true; break; } } if (flag) printf("NO"); else printf("YES");
-
Slack 클론 코딩[실시간 채팅 with React]
상태관리 질문입니다
안녕하세요 항상 높은 퀄리티의 강의 감사합니다. 강의와 조금 떨어진 내용인데요, 검색을 해봐도 잘 모르겠어서 질문 남깁니다. 만약 리액트에서 상태관리를 위해 redux를 사용할 때 (미들웨어는 saga) 상태로 관리하지 않아도 되는 데이터를 서버에 요청할 경우(비동기 로직) 이 요청 또한 saga에 포함되어야 할까요? 혹은 컴포넌트에서 useEffect를 사용해서 fetching 후에 바로 사용하는 편인가요?
-
[구버전] 웹 애플리케이션 개발을 위한 IntelliJ IDEA 설정 (2020 ver.)
소리가 너무작아요
볼륨최대로 다 올려도 소리가 너무 작네요
-
파이썬(Python) 기초부터 실무까지 part.2
이 강사분 예제 풀 때는 정말 풀이하기 딱 직전까지 다 들어봐야함.
첫번째 예제 포즈걸고 해보라해서 답 작성해보고 포즈 풀고 강의 이어보는데 새로운 조건이 추가되네욬ㅋㅋㅋㅋ하참 알고도 또 당하네
-
파이썬(Python) 기초부터 실무까지 part.2
성적처리프로그램 만들어봤어요~
from statistics import meanfrom copy import deepcopydef main() : score = [[100, 100, 100], [20, 20, 20], [30, 30, 30], [40, 40, 40], [50, 50, 50]] score = make_tablelist(score) print_table(score) print()def make_tablelist(li1): kuksum = 0 engsum = 0 matsum = 0 temp = deepcopy(li1) for i in range(0, len(li1)): temp[i].insert(0, i + 1) temp[i].append(sum(li1[i])) temp[i].append(float(mean(li1[i]))) kuksum += temp[i][1] engsum += temp[i][2] matsum += temp[i][3] temp.insert(0, ['번호', '국어', '영어', '수학', '총점', '평균']) temp.append(['총점', kuksum, engsum, matsum, sum([kuksum, engsum, matsum]), mean([kuksum, engsum, matsum])]) return tempdef print_table(pli) : for i in range(len(pli)) : for j in range(len(pli[i])) : if j == len(pli[i])-1 : print("{:>6}".format(pli[i][j])) else : print("{:>6}\t".format(pli[i][j]),end='') if i == 0 or i == len(pli) - 2: print("-" * 50)if __name__=="__main__" : main()-------------------------------------------------------------------응용해서 나중에 성적을 순서대로나 개별로 입력받아서 등록할 수 있는 기능등도 추가할 수 있을 것 같아요~강의 감사합니다~
-
파이썬(Python) 기초부터 실무까지 part.2
0,1 체크보드 만들어봤습니다
# 0과 1이 반복되는 10x10 체크보드형상 2차원리스트 만들기ckbd = [([0]+[1])*5 for x in range(5)]for i in range(1,10,2) : ckbd.insert(i,([1]+[0])*5)for x in range(10) : print(ckbd[x],sep='\n')
-
파이썬(Python) 기초부터 실무까지 part.2
선택정렬 만들어봤어요~
def select_sort(li1) : for i in range(len(li1)) : for j in range(i+1,len(li1)) : if li1[i] > li1[j] : li1[i], li1[j] = li1[j], li1[i]odd_num = [7,15,9,13,71,3,1]print("정렬 전 :",odd_num)select_sort(odd_num)print("정렬 후 :",odd_num,"\n")
-
파이썬(Python) 기초부터 실무까지 part.2
친구리스트 코드 만들어봤어요~
def main() : show_menu() print("종료되었습니다.")def show_menu() : frdlist = [] menulist = ["1","2","3","4","9"] menu='' while menu != '9' : print("-"*20) print("1. 친구리스트 출력") print("2. 친구추가") print("3 친구삭제") print("4. 이름변경") print("9. 종료") menu = input("메뉴를 선택하시오: ") if menu not in menulist : print("-" * 20) print("잘못입력하셨습니다.") else : match menu : case '1' : print_friends(frdlist) case '2' : append_friend(frdlist) case '3' : delete_friend(frdlist) case '4' : change_name(frdlist) print("-" * 20)def print_friends(list) : print("-" * 20) if not len(list) : print("저장되어 있는 친구가 없습니다.") else : print("저장되어 있는 친구는",list,"입니다.")def append_friend(list) : print("-" * 20) frdname = input("이름을 입력하시오: ") list.append(frdname) print("'{}'이름이 친구리스트에 추가되었습니다.".format(frdname))def delete_friend(list) : print("-" * 20) frdname="" while True : print(list) frdname = input("위 리스트 중 삭제하고 싶은 이름을 입력해주세요 : ") if frdname in list : break else : print("리스트 중에 없는 이름입니다.") print("-" * 20) list.remove(frdname) print("'{}'이름이 삭제되었습니다.".format(frdname))def change_name(list) : print("-" * 20) frdname = "" while True: print(list) frdname = input("위 리스트 중 바꾸고 싶은 이름을 입력해주세요 : ") if frdname in list: break else: print("리스트 중에 없는 이름입니다.") print("-" * 20) yesorno = ['네', '아니오'] flag = True while flag: cngname = input("어떤 이름으로 변경할까요?: ") while True: print("변경하고 싶은 이름이 '{}' ".format(cngname),end='') confirm = input("맞나요?(네/아니오): ") if confirm not in yesorno : print("'네/아니오'로만 입력해주세요.") else : if confirm == '네' : print("이름이 '{}'에서 '{}'로 변경되었습니다.".format(frdname, cngname)) ind = list.index(frdname) list[ind] = cngname flag = False breakif __name__=='__main__' : main()
-
파이썬(Python) 기초부터 실무까지 part.2
리스트 어프리헨션으로 구구단 리스트를 만들어봤어요~
list1 = [x for x in range(2,10)]list2 = [" x "]list3 = [y for y in range(1,10)]list4 = [" = "]list5 = [str(x)+a+str(y)+b+str(x*y) for x in list1 for a in list2 for y in list3 for b in list4]print(list5,"\n")
-
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
스프링 데이터 접근기술은 언제 나오나요??
스프링 데이터베이스 접근 기술에 대해 깊이 공부하고싶은데 언제 강의가 나오는지 알 수 있을까요?
-
변수 -1
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요 보통 int result = -1로 변수로 두던데 왜 int result=0으로 안하고 -1로 하나요??
-
-1 변수
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요 보통 변수에서 int result = -1 로 두던데, 왜 0으로 안두고 -1로 두는건가여??
-
따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
firebase v9 전체소스 수정 코드
- 아래는 전체 소스 코드 입니다.- 올려주신 v9 소스코드 보고 현 강의 내용에 맞게 수정 했습니다. import React, { Component } from 'react'; import { FaRegSmileWink,FaPlus } from 'react-icons/fa'; import Modal from 'react-bootstrap/Modal'; import Button from 'react-bootstrap/Button'; import Form from 'react-bootstrap/Form'; // import { } from 'react-icons/fa'; import {connect} from 'react-redux'; import { getDatabase, ref, onChildAdded, onValue, push, child, update, off } from "firebase/database"; export class ChatRooms extends Component { state = { show:false, name : "", description : "", chatRoomsRef: ref(getDatabase(), "chatRooms"), } handleClose = () => this.setState({show:false}); handleShow = () => this.setState({show:true}); hanldeSubmit = (e) =>{ e.preventDefault(); const {name, description} = this.state; if(this.isFormValid(name,description)){ this.addChatRomm(); } } addChatRomm = async() =>{ const key = push(this.state.chatRoomsRef).key; const { name, description} = this.state; const {user}=this.props; const newChatRoom = { id: key, name : name , description : description, createdBy : { name : user.displayName, image : user.photoURL } } try{ await update(child(this.state.chatRoomsRef, key), newChatRoom) this.setState({ name : "", description : "", show:false }) console.log("chatRR",this.state.chatRoomsRef); console.log("newC",newChatRoom); console.log("key",key); } catch(error){ console.log(error); } } isFormValid = (name, description) => name && description; render() { return <div> <div style={{ position: 'relative', width:'100%', display : 'flex', alignItems: 'center' }}> <FaRegSmileWink style={{ marginRight : 3 }}/> CHAT ROOMS (1) <FaPlus onClick={this.handleShow} style = {{ position: 'absolute', right: 0 , cursor: 'pointer' }}/> </div> {/*ADD CHAT ROOM MODAL*/} <Modal show={this.state.show} onHide={this.handleClose}> <Modal.Header closeButton> <Modal.Title>Create a Chat Room</Modal.Title> </Modal.Header> <Modal.Body> <Form onSubmit={this.hanldeSubmit}> <Form.Group className="mb-3" controlId="formBasicEmail"> <Form.Label>방 이름</Form.Label> <Form.Control onChange={(e)=>this.setState({name: e.target.value})} type="text" placeholder="Enter a ChatRoom Name" /> </Form.Group> <Form.Group className="mb-3" controlId="formBasicPassword"> <Form.Label>방 설명</Form.Label> <Form.Control onChange={(e)=>this.setState({description: e.target.value})} type="text" placeholder="Enter a ChatRoom Description" /> </Form.Group> </Form> </Modal.Body> <Modal.Footer> <Button variant="secondary" onClick={this.handleClose}> 취소 </Button> <Button variant="primary" onClick={this.hanldeSubmit}> 방 생성 </Button> </Modal.Footer> </Modal> </div>; } } const mapStateToProps = state =>{ return { user : state.user.currentUser } } export default connect(mapStateToProps) (ChatRooms);
-
따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
downloadURL
일단 파이어베이스 문제인지 강의 내용에 나와있는 ref.getdownloadURL() 형태로는 불러올 수 가 없습니다. 그렇기 때문에 import 쪽에 getDownloadURL을 추가해주시고 import { getStorage, ref, uploadBytes, getDownloadURL } from "firebase/storage"; 이후에 let downloadURL = await getDownloadURL(ref(storage, `user_image/${user.uid}`)); 위와 같이 해주면 되겠습니다. 또한 403 에러가 나오신다면 규칙 문제이니 allow read, write: if true;로 바꿔주시면 되겠습니다 참고 문헌 : https://stackoverflow.com/questions/50432995/firebase-cloud-storage-permission-denied-could-not-perform-this-operation-fire https://firebase.google.com/docs/storage/web/download-files#web-version-9_1
-
3D 게임 디자이너에게 배우는 Zbrush 2020 기초와 활용
수고하셨습니다!
너무 알찬 강의해 주셔서 너무 감사합니다 강사님 덕분에 지브러쉬에 쉽게 접근할 수 있게 되었어요 고생 많으셨습니다!!
-
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
선생님 질문 있습니다
- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.선생님 답변 듣고 멘탈을 추스리고 일단 강의를 듣고 있는 중에 궁금증이 생겨서 질문 남겨요! 선생님 강의 듣고, 책으로도 공부하려고 하고 있습니다(배송중이여서 책은 아직 못봤습니다) 최종 결과물로는 directX로 게임을 제작할텐데 그때도 이렇게 복사 붙여넣기의 연속인가요??? c++ 공부할 떄 처럼 따라치는게 아니라 복사 붙여넣기만 하다보니 공부가 되는건지에 대한 의문이 해결이 안되니깐 하루에 공부를 7-8시간씩해도 시간을 버리는 느낌.,.?도 들고 너무 답답합니다.. (독학으로 하고 있어서,, 선생님이 자주 말씀하시는 헤딩을 하고 있는 것 같은데,,ㅠㅠ 답답하네요) 먼저 이 길을 지나가진 선생님으로서... 이 답답함 해결해주실수있을까요..? 항상 친절하게 답변해주셔서 감사합니다!!
-
Slack 클론 코딩[실시간 채팅 with React]
swr 서버 질문
안녕하세요 저는 현재 백엔드쪽에서 토이프로젝트를 하고 있습니다. 프론트는 잘 모르지만 구현이 필요해서 제가 하게 되었습니다 제로초님 무료 react 강의를 듣고 sleact 구매하게 되었는데요 토이프로젝트의 서버가 springboot 여서 혹시 swr과 호환이 되는지 궁금합니다
-
따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
ref is not a function 해결
파이어 베이스 업데이트가 원인인지는 잘 모르겠으나. 강의 내용대로 하면 몇 가지 오류 사항이 있을 겁니다. 일단 mime-types 도 에러가 나서 저는 따로 file.type을 받아와서 처리했습니다. const handleUploadImage = async (event) =>{ const file = event.target.files[0]; const metadata = { contentType: file.type}; //스토리지에 파일 저장하기 console.log('file',file); console.log('meta',metadata); 일단 제가 해결 했던 방법은. 아래와 같이 firebase/storeage를 import 해줍니다. import { getStorage, ref, uploadBytes } from "firebase/storage"; 그 이후에 getStorages() 와, storageRef 부분을 선언해줍니다. const storage = getStorage(); const storageRef = ref(storage, `user_image/${user.uid}`); try{ // 'file' comes from the Blob or File API const uploadTask = uploadBytes(storageRef, file, metadata); 이후엔 uploadBytes를 이용해서 인자값으로 저렇게 넣어주면 일단 데이터는 들어갈텐데 만약 403 에러가 나온다면 storage - Rules 에서 allow read,write: if request.auth != null; 로 바꿔주면 해결 될겁니다. 참고 문헌 : https://firebase.google.com/docs/storage/web/upload-files https://stackoverflow.com/questions/38671444/user-does-not-have-permission-to-access-this-object-firebase-storage-android 전체 소스 코드 import React,{useRef} from 'react'; import {GiBroadsword} from 'react-icons/gi'; import Dropdown from 'react-bootstrap/Dropdown'; import Image from 'react-bootstrap/Image'; import { useDispatch, useSelector } from 'react-redux'; import firebase from '../../../firebase'; import { getStorage, ref, uploadBytes } from "firebase/storage"; // import mime from 'mime-types'; function UserPanel() { const user = useSelector(state => state.user.currentUser) const inputOpenImageRef = useRef(); console.log(user) const handleLogout = () =>{ firebase.auth().signOut(); } const handleOpenImageRef = () =>{ inputOpenImageRef.current.click(); } const handleUploadImage = async (event) =>{ const file = event.target.files[0]; const metadata = { contentType: file.type}; //스토리지에 파일 저장하기 console.log('file',file); console.log('meta',metadata); const storage = getStorage(); const storageRef = ref(storage, `user_image/${user.uid}`); try{ // 'file' comes from the Blob or File API const uploadTask = uploadBytes(storageRef, file, metadata); // let uploadTask = uploadBytesResumable(strRef(storage, `user_image/${user.uid}`), file, metadata) // console.log('upload',uploadTask); }catch(error){ console.log(error); } } return ( <div> {/* Logo */} <h3 style = {{color:"white"}}> <GiBroadsword/> {""} ChatApp </h3> <div style ={{display:"flex", marginBottom: '1rem'}}> <Image src={user && user.photoURL} style={{width:'30p', height:'30px',marginTop:'3px'}} roundedCircle/> <input type="file" accept="image/jpeg, image/png" ref={inputOpenImageRef} style={{display:"none"}} onChange = {handleUploadImage} /> <Dropdown> <Dropdown.Toggle style={{background:'transparent', boder:'0px'}} id="dropdown-basic"> {user && user.displayName} </Dropdown.Toggle> <Dropdown.Menu> <Dropdown.Item onClick={handleOpenImageRef}> 프로필 사진 변경 </Dropdown.Item> <Dropdown.Item onClick={handleLogout}> 로그아웃 </Dropdown.Item> </Dropdown.Menu> </Dropdown> </div> </div> ) } export default UserPanel;