설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
데스크탑에 Vivado 2020.2가 깔려있고, 그 동안 계속 사용해왔습니다. 첫 동영상처럼 2~3시간 과정을 거쳐 재설치를 해야할까요? 그래야한다면 그럴만한 이유가 무엇인지 궁금합니다. 물론 시간이많으면 군말없이 해보겠지만 제가 시간이 여유치 않은 상황이라서요..! 시간적 여유가 없다면 기존 사용환경에서 진행해도 해당 강좌 수강하는 데에 차질 없을지 궁금합니다. 감사합니다.
안녕하세요. airflow에 관한 질 높은 수업을 정말 잘 듣고 있습니다. 다른 공부보다 airflow 공부하는 게 재밌어서, 시간 가는 줄 모르고 노션에 정리하며 실습을 해보고 있습니다. 다름이 아니라, airflow의 날짜 개념에 대해 제가 올바르게 이해했는지 확인을 하고 싶어서 문의를 드리게 되었습니다. 강의 내용은 Bash Operator with macros부분이며 dags_bash_with_macros_eg1과 dags_bash_with_macros_eg2에 대한 airflow log 값에 대한 부분입니다 START_DATE와 END_DATE에 대해서 올바르게 이해했는지 여쭈어보고 싶습니다.
auth = Firebase.auth 강의에서 이 부분을 작성하고 코드를 돌린 후에 The binary version of its metadata is 1.9.0, expected version is 1.7.1. 라는 문제가 발생하였습니다. 찾아보니 최신버전이 아니라서 그럴 수 있다고 하여서 File -> Settings -> Appearance & Behavior -> System Settings -> Updates로 들어가서 최신 버전으로 업데이트도 해보고 build.grandle 파일 2개에 이것저것 추가도 해봤지만 결과는 같았습니다. buildscript { ext { agp_version = '7.4.1' } repositories { google() mavenCentral() } dependencies { classpath 'com.google.gms:google-services:4.3.15' } }// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.application' version '7.4.1' apply false id 'com.android.library' version '7.2.2' apply false id 'org.jetbrains.kotlin.android' version '1.7.10' apply false id("com.google.gms.google-services") version "4.3.15" apply false } task clean(type: Delete) { delete rootProject.buildDir } plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlin-android-extensions' // 위 선언시 val joinBtn = findViewById<Button>(R.id.joinBtn) 이처럼 따로 설정 안해주고 바로 쓸 수 있다 id 'com.google.gms.google-services' } android { compileSdk 33 defaultConfig { applicationId "com.example.sogating_final" minSdk 19 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } buildFeatures { viewBinding true } } dependencies { implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1' // 최신 버전으로 변경 implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1' // 최신 버전으로 변경 testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' implementation "com.yuyakaido.android:card-stack-view:2.3.4" implementation(platform("com.google.firebase:firebase-bom:32.2.2")) implementation("com.google.firebase:firebase-analytics-ktx") implementation("com.google.firebase:firebase-auth-ktx") } 더 찾아보니 kotlin-version과 gradle-version을 변경하라고 하는데 지금 버전이 문법이 달라서인지 정확하게 나와있는것을 찾기 힘들어서 질문 드립니다!
@PostMapping("/add") public String addItemV4(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { //검증 로직 if(!StringUtils.hasText(item.getItemName())) { bindingResult.rejectValue("itemName","required"); } if(item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { bindingResult.rejectValue("price", "range", new Object[]{1000,1000000}, null); } if(item.getQuantity() == null || item.getQuantity() > 9999) { bindingResult.rejectValue("quantity", "max", new Object[]{9999}, null); } //특정 필드가 아닌 복합 룰 검증 if(item.getPrice() != null && item.getQuantity() != null ) { int resultPrice = item.getPrice() * item.getQuantity(); if(resultPrice < 10000){ bindingResult.reject("totalPriceMin", new Object[]{10000, resultPrice}, null); } } if (bindingResult.hasErrors()) { log.info("errors={}", bindingResult); return "validation/v2/addForm"; } ... } 제가 생각하는 error 메세지 출력 과정(검증과정)이 맞는 것인지 확인부탁드립니다..!! (addItemV4 기준) 스프링 부트가 errors 메시지 파일을 인식 … HTML 폼에서 넘어온 데이터가 검증로직에 걸리면 rejectValue를 통해 bindingResult에 에러 내용을 담는데 MessageCodesResolver을 통해 다음과 같은 오류 코드도 자동으로 생성한다. 예) required.item.itemName, required.itemName, required.java .lang.String, required 또한 사용자 입력 값을 저장해준다. bindingResult에 에러사항이 있으면 bindingResult의 에러 내용이 자동으로 model에 포함되고 다시 validation/v2/addForm으로 돌아간다. 타임리프 화면을 렌더링 할 때 th:errors가 실행되면서 오류가 있다면 위에서 생성된 오류 메시지 코드를 순서대로 돌아가면서 메세지 파일과 만족하는 값을 찾아 나타내고(세부적인 것이 더 우선) 없으면 디폴트 메시지를 출력한다. 그리고 th:field는 정상 상황에서는 모델객체의 값을 보여주지만 에러가 있다면 FieldError에서 보관한 값을 꺼내어 나타낸다. 추가적으로 만약 타입 오류와 같은 바인딩 오류라면 스프링은 FieldError 를 생성하면서 사용자가 입력한 값을 넣어둔다. 그리고 해당 오류를 BindingResult에 담아서 컨트롤러를 호출한다. 감사합니다!
사이드 프로젝트를 팀원들과 진행하면서 남긴 회의록들이 노션에 페이지로 저장하고 있었습니다. 그런데 최근 노션을 보니 그 페이지가 사라져 삭제된 페이지 기록과 휴지통을 뒤져 복원을 하려 했지만 그 어떤 기록도 남겨져 있지 않았습니다. 업데이트 기록에도 회의록 페이지를 건든 흔적이 전혀 없고요. 혹시 페이지를 누군가가 작정하고 휴지통에서도 영구삭제하면 기록도 남겨지지 않는건가요? 팀원 누군가의 개인 페이지로 실수로 옮겨졌거나 하는 가능성을 고려하고 있지만 만약 영구삭제가 되어 기록도 없다면, 정말 복원할 방법이 없을까요??
먼저 양질의 강의를 제공해주신 점에서 매우 감사하다는 말씀을 드리고 있습니다. 강의에서 /app란 값을 @Value로 주입을 해줬을때 ${contextPath}만 출력이 되는 부분에 질문이 있습니다. 제가 이해하기로는 커스텀 빈들이 먼저 주입이 되기 때문에 실제로 스프링부트의 인프라스트럭처 빈인 PropertySourcesPlaceholderConfigurer가 주입이 되지 않아 ${contextPath}가 나온다고 이해를 했습니다. 제가 이해한게 맞다면 빈의 주입 순서에 따라 @Value의 값이 달라진다는 것인데, 만약 tobyspring.config.autoconfig.PropertyPlaceholderConfig 이 클래스가 tobyspring.config.autoconfig.TomcatWebServerConfig 이 클래스보다 더 늦게 주입이 된다면 여전히 ${contextPath}가 나오게 되는지 궁금합니다! 또한 테스트를 한 번 해보고싶어서 계속해서 시도해봤지만 테스트 방법이 도저히 감이 오질않는데, 이럴 때는 어떻게 테스트를 하면 되는지 알 수 있을까요?
안녕하세요 강사님. 13분 20 초쯤 보시면 디폴트 로그인 페이지에서 href 걸려있는 oauth2-client-app 이라는 링크를 누르게 되면 인가서버의 로그인페이지로 이동하는 것을 보실 수 있습니다. 여기서 제가 궁금한 것은 oauth2-client-app 이라는 링크를 누르는 순간 /oauth2/authorization/keycloak 경로의 요청이 Client 로 보내지게 되고, Client 에서 해당 경로로 요청이 들어오길 기다리고있던 OAuth2AuthorizationRequestRedirectFilter 가 내부적으로 권한부여 요청을 보낼 수 있는 uri 인 authorization-uri 로 Redirection 시키게되어 현재 로그인페이지로 이동한것인가요? 보다 정확하게 알고싶어 이렇게 질문드립니다!! 아 그리고 강의 너무나도 잘듣고있습니다!
test device 실행 버튼 왼쪽편에 거꾸로 되있는 삼각형을 누르면 AVD manager가 있습니다. 거기서 위 사진과 같이 cold boot now를 클릭 해주시면 재부팅을 시켜주는것 같아요. 앱을 실행시키는 시간이 단축되더라구요 혹시라도 다른 팁 있으면 댓글로 부탁드려요. 나름 최신형 노트북인데 실행시키는데 시간이 너무 많이 걸려서요. 사양은 i5 1340p 16gb arc350m 입니다.
안녕하세요! 강의를 수강하다가 질문이 생겨서 글 남깁니다. Serialization #3[08:30] name = "ABCD"의 문자열의 길이는 4이지만 byte배열로 변환하면 길이가 4byte가 아니라 8byte가 되는 것 까지는 이해하였습니다. 왜냐하면 C#은 UTF-16을 사용하므로 UTF-16은 문자들이 각 2Byte이기 때문입니다. Encoding.Unicode.GetByteCount( this.name )에서 UTF-16기준으로의 바이트 배열로 변환됐을 때의 수를 가져오는 것이니까 그러면 위와 같이 8Byte인 것 같아서 어떻게 4Byte인지 궁금증이 생겨 질문 남깁니다!