안녕하세요? 좋은 강의에 진심으로 감사드립니다. 책으로 공부했으면 아직 헤매고 있을텐데, 친철하게 설명해 주셔서 그동안 들었던 강의를 바탕으로 어제 data.go.kr 에서 기상청이 제공하는 대기정체지수를 다운로드 받는 dag을 만들어 수동으로 실행을 해보니, 수동으로는 csv 파일 생성까지 success가 되는 것을 확인하였습니다. 그런데 오늘 새벽에 자동으로 실행이 되도록 컴퓨터를 켜두었었는데, 아침에 보니 돌아가지 않았습니다. ㅠㅠ DAG에 크론 일정은 "0 5 \* \* \*"로 주고 , start_date는 어제 날짜 2023. 11. 5. in_timezone('Asia/Seoul')로 주었었습니다. (매일 새벽 5시에 돌아서 전일자로 업데이트된 데이터를 받고자 하였습니다.) airflow를 직접 사용해 보니 UTC와 KST가 혼재되어서 사용시에 헷갈리기도 하고, 실제로 제가 만들어 보니 권한 문제, 패키지 추가 문제 등 여러가지 난관에 봉착했었습니다만, 여기 질문 게시판을 참조하면서 모든 문제를 해결할 수 있었는데, 일정 셋팅 관련해서는 제가 아주 기본적인 airflow의 시간 개념을 잘 못 이해하고 있는 것 같아서 질문드립니다. 위의 두가지 말고 따로 확인해야 하는 사항이 있는지요? 여기 게시판의 첫번째 질문도 시간개념이었는데, 읽어봐도 제 입장에서는 제 문제 해결방법이 명확해 지는 것 같지는 않아서 이렇게 폐를 끼치게 되었습니다. 여담입니다만, 기상청에서 제공하는 API 데이터들은 1루치 정도만 제공되어서, 매일 접속을 해서 처리를 해두지 않으면 데이터가 사라져 버립니다. 수작업으로 하는 것이 예상보다 피곤하였고, 중간중간 잊고 지나치는 경우가 생겨서, 데이터의 완결성이 떨어지는 등 아쉬운 점이 있었습니다. 제 계획은 노트북을 출근전에는 꺼놓고, 퇴근후 집에와서 WSL에 airflow 도커로 올려서 새로 켜놓고, 새벽에 Dag이 일정대로 돌아서, 아침에 일어나면 데이터들이 제가 원하는 형태대로 정리되고, 이메일로 완료되었다고 노티를 받는 것입니다. 가능할 거라고 보시는지요?
안녕하세요 선생님 좋은 강의 매번 감사합니다. 강의를 보며 풀이를 보다 의문점이 생겨 질문드립니다. 답안코드의 for(int i = 3; i <= max_n; i++){ f[i] = f[i - 1] + f[i - 2] + 1; } 이 부분에서 i의 조건이 i <= max_n 인 이유를 잘 모르겠습니다. 앞에서 f 를 선언할때 int f[max_n] 으로 선언하였는데 위의 조건이 되면 for문 안에서 f[max_n] 까지 값을 할당해주는것인데 이러면 index범위를 벗어나서 할당하는것 아닌가요? 만약 max_n이 40이라면 마지막 인덱스는 f[40]이 아닌 f[39]으로 알고있어서 혹시 그게 맞지 않나싶어 질문드립니다! 왜 오류가 안나는지 궁금합니다. 아니면 제가 놓치고 있는 부분이 있을까요?
안녕하세요 수업 잘 듣고 있습니다. helm install my-tomcat . -f values.yaml 해당 명령어로 차트 실행까지는 정상적으로 되었고 에러 문구도 따로 뜨지 않았습니다. svc는 nodeport로도 잘 연결되어 있는데 pod가 pending이어서 describe를 해보니 PVC가 Unbound 상태여서 그런 것 같습니다. PVC 로그로는 PV가 존재하지 않다는데 다른 설정 파일을 apply 해주어야 하는 걸까요?
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
class명을 GStateNotifier로 만들었는데, 실제 사용할때는 gStateNotifierProvider로 앞에 G대문자가 소문자가 되는 이유가 있나요? 강의 설명엔 뭘 써도 된다라고 하셨는데, 어떤 이름으로 쓰든, gStateNotifierProvider가 된다는것인지. 이 부분이 명확하지 않아서 문의 드립니다.
안녕하세요. continual_remove 함수에서 global blank, ch 선언 하는 이유가 DFS에서 global blank, ch 참조할때 어디에서 선언한 변수를 참조할지 헷갈려서 그런건가요? continual_remove 함수에서 global 선언을 하지 않으니 정상동작하지 않는걸로 봐서는 DFS에서 참조하는 global blank, ch는 main에서 선언한 부분을 참조하는것 같은데, 혹시 제가 이해한게 맞는지 확인 부탁드립니다.
안녕하세요. 세세한 설명 감사드립니다. sql 초급이라 자세한 설명에 맞추어 잘 따라가고 있었는데요. 13강의 변경분처리 sql 에대해 loop 처리관련하여서는 전체 코드를 좀 공유해주시면 안될까요? 개념적으로는 알곘는데 아직 loop 문과 변수에 대해서 적용하는 것에는 익숙하지가 않아서 어떻게 해야 할 지를 모르겠습니다. ㅡㅡ;
OpenGL 쉐이더 (7) shader 3D 그래픽스 - 텍스처 매핑, 큐브 맵, 환경 매핑, 범프 매핑
이전에 part8 강의 오픈 일정에 대해 문의 드렸었는데 그때 주신 답변이 아래와 같았습니다. 'part 8 은 9월 중순경에 릴리즈 될 것으로 보이고, vulkan 은 10월 말까지 완결될 것으로 보입니다.' 강의를 기다렸는데 늦어지시는 것 같아 재차 질문 드리게 되었습니다. part8 과 vulkan 강의 오픈 일정을 알 수 있을까요?
강사님 안녕하세요, 오류가 발생해서 질문 드립니다 ㅜㅜ http://127.0.0.1:8000/post/1/ 로 접속을 하면 계속 이와 같은 오류가 뜹니다 ㅠㅠ 이렇게 분명 포스트가 db 에 저장되어있는데 말이죠 .. ㅠㅠ 이전에 작성했었다가 사용자를 다시 지우면서 같이 삭제된 포스팅이 있는데 그것 때문에 pk 값이 꼬인 것은 아니겠죠? urlpatterns = [ path('post/new/', views.post_new, name='post_new'), path('post/<int:pk>/', views.post_detail, name='post_detail') ] (제 앱 이름은 myblog 로 해두었습니다) from django.contrib import messages from django.contrib.auth.decorators import login_required from django.shortcuts import get_object_or_404, redirect, render from .forms import PostForm from .models import Post # Create your views here. @login_required def post_new(request): if request.method == 'POST': form = PostForm(request.POST, request.FILES) if form.is_valid(): post = form.save(commit=False) post.author = request.user post.save() # 이걸 나중에 하면 안되나? post.tag_set.add(*post.extract_tag_list()) messages.success(request, "포스팅을 등록했습니다.") return redirect("/") # TODO : get_absolute_url 활용 else: form = PostForm() return render(request, "myblog/post_form.html", { "form": form, }) def post_detail(request, pk): post = get_object_or_404(Post, pk=pk) return render(request, "myblog/post_detail.html", { "post" : post, }) views.py import re from django.conf import settings from django.db import models from django.urls import reverse # Create your models here. class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) photo = models.ImageField(upload_to="myblog/post/%Y/%m/%d") caption = models.CharField(max_length=1000) tag_set = models.ManyToManyField('Tag', blank=True) location = models.CharField(max_length=100) def __str__(self): return self.caption def extract_tag_list(self): tag_name_list = re.findall(r"#([a-zA-Z\dㄱ-힣]+)", self.caption) tag_list = [] for tag_name in tag_name_list: tag, _ = Tag.objects.get_or_create(name=tag_name) tag_list.append(tag) return tag_list def get_absolute_url(self): return reverse("myblog:post_detail", args=[self.pk]) class Tag(models.Model): name = models.CharField(max_length=50, unique=True) def __str__(self): return self.name models.py 이상한 부분은 없는 것 같습니다만 왜 이러는지 모르겠네요..ㅠㅠ 그런데 또 쌩뚱맞은 http://127.0.0.1:8000/post/5/ url 을 입력하면 아래와 같이 다른 오류가 뜹니다.. 감사합니다 ! ㅠㅠ
좋은 강의 너무 감사합니다. 강의를 보며 궁금한 점이 생겨서 질문 드립니다. named lock을 통해 동시성 문제를 해결하는 예시를 보았을 때, 비관적 락과 무엇이 다른 것인지 큰 차이를 느끼지 못했습니다. named lock이 비관적 락에 비해 가지는 장단점에 비해 찾아보니, timeout 설정이 좀 더 간편하다는 내용 말고는 유의미한 차이를 찾지 못했습니다. (그러나 비관적 락 + queryhint 를 사용하면 비관적 락 사용 시에도 딱히 어려움 없이 timeout을 설정할 수 있었습니다.) 혹시 named lock이 비관적 락에 비해 지니는 장단점과, 어떤 경우에 비관적 락 대신 Named lock을 통해 분산락을 구현하시는지 궁금하여 질문드립니다.
안녕하세요 루키스님 질문 게시판을 보다가 루키스님이 주말마다 클라이언트 연동 강의를 진행하고 계시고 마무리 단계라는 글을 봤습니다. 강의 출시 예정이 6개월~1년 텀을 두고 오픈한다고 하셨는데 혹시 더 빠르게 출시하실 생각은 없으신가요?ㅠㅠㅠ 대학교 졸업 작품을 언리얼을 사용해서 작업하기로 했는데 서버랑 연동하는게 생각보다 어려워서요. 그리고 루키스님 강의에 유니티 서버 연동강의가 있는데 그걸 봐도 언리얼에서 연동을 어느 정도 작업을 할 수가 있을까요?
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
인터페이스 설명하신거보고 상속을 이용해서 여러가지 타입을 레고처럼 조립해서 새로운 형태의 타입을 만들어낼수도 있겠구나 라는 생각을 하게됐습니다. 그런데 이게 구조적으로 원래이런건지 몰라서 질문을 드려봅니다. 예를 들어서 Iflyable, Ishoutable, Iattackable 이라는 인터페이스를 구현해서 각각 Iflyable에는 fly라는 함수를 Ishoutable에는 shot이라는 함수를 Iattackable에는 attack이라는 함수를 넣고 flyshouter라는 class가 Iflyable과 Ishoutable을 상속받아서 날면서 소리를 지르는 능력을 얻었다고 가정해볼게요. 그리고 두번째로 ShoutAttacker라는 class가 Ishoutable과 IAttackable을 상속받아서 소리지르면서 공격을 하는 능력을 얻었다고 가정해보겠습니다. 그러면 어찌됐던지 인터페이스가 상속이 돼었기때문에 각각 flyshouter => fly와shout라는 함수를 shoutattacker => shout와 attack이라는 함수를 구현해야하잔아요? 그러면 결국엔 구현에서 shout라는 공통의 함수를 구현하게 될텐데 물론 소리를 지르더라도 뭐 캐릭터에따라서 조금 다르게 소리를 낼수도 있긴하지만 기능자체가 완전 똑같다고 했을때 flyshouter와 shoutattacker는 완전 형태가 똑같은 shout 함수를 각각 하나씩 가지고 있어야하는건가요? 제가 이질문을 하는 이유는 저렇게 능력들을 인터페이스로 부여받았을때 상속받은 클래스마다 구현을 다 따로하는데 구현부가 완전 똑같은경우에는 그냥 복사 붙여넣기로 하나씩 들고 있는게 맞나싶어서 질문 드려봤습니다. 뭐 한두개정도는 복붙해서 사용해도 크게 문제는 없을거같은데 지금은 예시로 각각 함수를 하나씩 물고 있는 형태로만 말씀드렸는데 저게 만약에 많아지면 많아지는만큼 늘어나는만큼 계속 복붙을 하는게 맞는지 궁금해서 질문 올렸습니다.
비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 빈 배열 객체 생성 let infowindow = []; 거기에 for문 돌면서 infowindow 집어넣기 infowindowArray.push(infowindow); 1,2번 까지는 말 그대로 빈 배열객체를 생성후 기존의 infowindow를 집어넣어 기존의 자료가 들어간 infowindowArray를 만든것까진 알겠는데 그 이후에 3. function closeInfoWindow(){ for (let infowindow of infowindowArray){ infowindow.close(); } }; 이게 무슨 말 일까요? 사실 모든 원리가 잘 이해가 되질 않습니다..ㅜㅜ 기존에는 그냥 인포윈도우 클릭하면 해당정보가 나타나고 그것을 다른 것을 누르면 끄려 그러는데 왜 빈 배열객체를 만드는지 부터 잘 이해가 안되네요..
안녕하세요 선생님, 상세한 강의 잘 듣고 있습니다. 감사합니다. 수강 중, 위의 [섹션4. 2유형] 강의 내용 중 문의사항이 있어 질문을 남깁니다. [동일 내용 문의 링크] 맨 마지막 p3에서 2,482명이 나와야 되는거 아닌가요??? - 인프런 | 질문 & 답변 (inflearn.com) 문의 커뮤니티 내 동일한 질문이 있어 일부 연장선 문의를 드립니다. (체험) 제2유형 - 체험하기 (goorm.io) - 해당문제 model1, model2 을 평균을 내서 최종 모델 p3을 만들고 이를 적용했을 때 최근 답변 기준으로 2482개에서 1611개를 제외한 871개의 행이 출력되는 부분은 이해하였습니다. 연습 중 제출 형식을 보니, 규정에는 총 2482개의 온전한 데이터 예측 결과를 제출해야 한다고 명시되어 있고 이를 강의 상의 871개짜리 데이터로 최종 제출해도 채점 기준에 부합하는지 궁금합니다. 저는 TEST 파일은 열 생략이나 결측지 보정 들의 수정이 가해지면 안되는 원본 데이터의 상태 로 예측 모델을 적용하는 것으로 인지하고 있는데, 해당 부분에 대한 보충 회신을 주시면 감사드리겠습니다. (채점을 위한 기관측의 추가 별도 데이터를 대입하여 예측결과가 실제로 산출되는지 확인하는 부분이 있다하여, 모든 독립변수 행에 대해서도 대응할 수 있는 모델에 대해서 추가 설명이 있으면 도움이 될 것 같습니다.) 제가 강의 내용 중 못 따라간 부분이 있을 수도 있어, 코드 작성 내 놓친 부분이 있는지 계속 수강내용과 확인해 보겠습니다. 감사합니다.
윈도우 환경이구요. 포트 번호 하나 바꾸지 않고 똑같이 복붙했습니다. 윈도우 cmd를 통해 ubuntu 설치 후 mysql, wordpress설치 하고 localhost:8080 접속했는데 Error establishing a database connection 에러가 나네요;;;;;;;;; 왜 에러가 나는걸까요..? -MYSQL 생성 docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mariadb:10.9 -MYSQL 명령어 docker exec -it mysql mysql create database wp CHARACTER SET utf8; grant all privileges on wp.* to wp@'%' identified by 'wp'; flush privileges; quit -워드프레스 명령어 docker run -d -p 8080:80 -e WORDPRESS_DB_HOST=host.docker.internal -e WORDPRESS_DB_NAME=wp -e WORDPRESS_DB_PASSWORD=wp wordpress 이렇게 실행했는데 문제가 있는건가요?
안녕하세요 태현님! 이 강의 덕분에 코틀린을 재미있게 학습하고 있습니다. Custom Getter 에 대해 질문이 있어서 질문드립니다. name 을 대문자로 만드는 것을 예시로 Custom Getter 를 사용하는 것과, 프로퍼티로써 사용하는 것에 대해 설명해주셨는데요, 제가 잘 이해하지 못했는지.. 두 방법에 대해 차이가 있는것 같습니다. Custom Getter 를 사용할 경우 fun main() { val personTest = PersonTest("abc", 10) println(personTest.name) } class PersonTest ( name: String, var age: Int ) { init { if (age <= 0) { throw IllegalArgumentException("나이는 ${age}일 수 없습니다." ) } println("초기화 블록") } val name = name get() = field.uppercase() } 위의 경우 ABC가 출력이 됩니다. 생성자를 통해 name 값이 "abc"로 객체가 생성되었으나, custom getter 를 통해 uppercase 되어서 ABC 로 출력되는 것을 볼 수 있습니다. 프로퍼티를 사용하는 경우 fun main() { val personTest = PersonTest("abc", 10) println(personTest.name) println(personTest.uppercaseName) } class PersonTest ( val name: String, var age: Int ) { init { if (age <= 0) { throw IllegalArgumentException("나이는 ${age}일 수 없습니다." ) } println("초기화 블록") } val uppercaseName: String get() = this.name.uppercase() } 위의 경우는 그대로 "abc" 가 출력이 됩니다. 당연히 personTest 객체를 통해 프로퍼티인 upppercaseName을 출력하면 ABC가 출력이 되지만요.. 강의에서 태현님께서 backing field 를 사용하지 않고, 프로퍼티를 통해 사용한다고 하셨는데.. 둘의 작동이 다른 것 같아서요! 제가 짐작컨데, 말씀하신 내용이 backing field 처럼 사용되는 경우가 많지 않다. 주로 getter 로 값을 가져오는 경우에는 값 자체를 가져오는 경우가 많으므로 프로퍼티를 통해 값을 가져오도록 한다. 라고 이해해도 되는 것일까요?