Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
현재 디폴트 레이아웃이 나오지 않아, 막히고 있습니다ㅠ quasar.config.js 실행시 localhost:9000/ 경로에서는 잘 나오고 있습니다 확인결과 아래 코드를 추가해주어야만 헤더가 잘 뜹니다.. <route lang="yaml"> meta: layout: default </route>
var body: some View { NavigationStack { ScrollView { } } .navigationBarBackButtonHidden() .toolbar { ToolbarItem(placement: .topBarLeading) { Button { dismiss() } label: { Image(systemName: "arrow.backward") .tint(.black) } } } //:TOOLBAR 위와 같이 ProfileView에서 body를 정의하셨는데, NavigationStack에 toolbar가 항상 나타나는 것으로 이해가 됩니다. 그렇다면, 앱을 실행하고 바로 Profile tab을 누른다면, .toolbar가 자동으로 생성되면서 dismiss()가 작동하지 않는 toolbar가 생기는 상황이 발생했습니다. 다시 FeedView로 돌아가면 기존 toolbar는 없어지지 않은채로 "<- : arrow.backward" 가 나타나고, FeedView에서 .overlay { } 로 정의된 NavigationLink 를 클릭한다면 toolbar 가 두개 생기는 것을 확인할 수 있었습니다. 두 개중 위의 버튼은 작동하지 않으며, 아래의 버튼을 누르면 dismiss()가 작동하여 Stack에 쌓인 ProfileView가 없어지면서 FeedView로 돌아가는 것을 확인할 수 있었습니다. 상황에 따라 toolbar 가 보일 수 있도록 따로 설정을 해야하는 것일까요? 다시 말해, ProfileView를 Profile을 tab하여 이동하는 경우는 .toolbar가 나타나지 않도록 해야하는 걸까요?
✅ 모든 질문들은 슬랙 채널에서 답변드리고 있습니다. 💡 ”로펀의 인프런 상담소” 슬랙 채널 가입하기 💡 평일중에는 퇴근 이후(저녁 7시)에 답변을 받아보실 수 있고, 주말중에는 상시 답변드리고 있습니다. 강의보고 todolist할때 컴포넌트 분리 안했던 것 같은데... dropbox (선택수강)UI구축에 보면 supabase-todo-list vscode에 컴포넌트폴더에 ui컴포넌트 들이 있네요... 혹시 추가 작업을 하셨던 것일까요??
안녕하세요, 강의 잘 듣고 있습니다. Jetpack Compose View 강의를 수강하면서 궁금한 점이 생겨 질문드립니다. 강사님께서는 Error Message를 Flow로 collect하여 View에 전달하는 방식 을 사용하셨는데, 아래와 같은 상황에서는 에러 메시지가 출력되지 않는 문제 가 발생합니다. 사용자가 이메일 혹은 비밀번호 검증에 실패 합니다. Firebase에서 "비밀번호 혹은 아이디가 틀렸습니다" 라는 에러 메시지를 반환 하고, Flow가 이를 collect하여 화면에 출력합니다. 사용자가 이메일 또는 비밀번호를 수정 한 후 다시 로그인 요청을 보냅니다. 검증이 다시 실패 하여 Firebase에서 동일한 에러 메시지 를 반환합니다. 하지만 Flow는 같은 값을 연속으로 emit하지 않기 때문에 View에서는 변경을 감지하지 못하고 에러 메시지가 출력되지 않습니다. 사용자는 아무런 메세지가 없어 무슨 상황인지 모른다 이걸 해결하기 위해 errorMessage의 Flow의 값을 null 처리 해도 똑같습니다. 해당 문제를 해결할수 있는 방법이 있을까요? 전 비록 Text을 쓰지 않고 SnackBar을 썼지만 저의 코드를 봐주시면 감사하겠습니다. viewModel : https://github.com/sonny8569/DietJetpackCompose/blob/main/app/src/main/java/com/sungil/jetpackcomposediet/ui/intro/IntroViewModel.kt Activity: https://github.com/sonny8569/DietJetpackCompose/blob/main/app/src/main/java/com/sungil/jetpackcomposediet/ui/intro/IntroActivity.kt view : https://github.com/sonny8569/DietJetpackCompose/blob/main/app/src/main/java/com/sungil/jetpackcomposediet/ui/intro/screen/LoginScreen.kt
안녕하세요 강의 잘 보고 있습니다 궁금한 내용 정리해서 질문드립니다. Init 관련 발음하실 때 아이닛 이라고 하시는 이유가 궁금? 합니다 보통 이닛 이라고 하지 않나요? 몬스터 추적 강의에서 Player 스크립트 작성할 때 FindClosetTarget(Spawner.m_Monster.ToArray()); 이렇게 ToArray 배열로 넘기는 부분이 있던데 꼭 배열로 넘겨야 하는지 궁금합니다 T로 받을거면 FindClosetTarget(Spawner.m_Monster); 이렇게 넘겨도 상관 없지 않을까 싶어서요
Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
Pinia setup stores user 사용자 관리 8분 32초에 아래 에러가 나오는데, 별다른 언급이 없는데, 뒤에 해결을 하는지요? 답변 주시면 감사하겠습니다. Cross-Origin-Opener-Policy policy would block the window.closed call.
WITH base as ( SELECT event_date, event_timestamp, event_name, user_id, user_pseudo_id, platform, MAX(IF(params.key='firebase_screen', params.value.string_value, NULL)) as firebase_screen, -- MAX(IF(params.key='food_id', params.value.int_value, NULL)) as food_id, MAX(IF(params.key='session_id', params.value.string_value, NULL)) as session_id, FROM advanced.app_logs CROSS JOIN UNNEST(event_params) as params WHERE -- event_date = "2022-08-01" # 적은 데이터로 쿼리를 작성하기 위해 만든 조건 event_date BETWEEN "2022-08-01" AND "2022-08-18" GROUP BY ALL ), fileter_event_and_concat_event_and_screen AS( -- event_name + screen 하면서(필요한 이벤트만 WHERE 조건에 걸어서 사용) SELECT * EXCEPT(event_name, firebase_screen, event_timestamp), CONCAT(event_name, "-", firebase_screen) AS event_name_with_screen, DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul") AS event_datetime FROM base WHERE event_name IN("screen_view", "click_payment") ) -- step_number + cnt 만들기 -- step_number : CASE WHEN을 사용해 숫자 지정 , pivot_base as ( SELECT event_date, # 일자별로 퍼널별 유저 수 쿼리, 일자별로 처리하기 위해 event_date 추가 event_name_with_screen, CASE WHEN event_name_with_screen = 'screen_view-welcome' THEN 1 WHEN event_name_with_screen = 'screen_view-home' THEN 2 WHEN event_name_with_screen = 'screen_view-food_category' THEN 3 WHEN event_name_with_screen = 'screen_view-restaurant' THEN 4 WHEN event_name_with_screen = 'screen_view-cart' THEN 5 WHEN event_name_with_screen = 'click_payment-cart' THEN 6 ELSE NULL END AS step_number, COUNT(DISTINCT user_pseudo_id) as cnt FROM fileter_event_and_concat_event_and_screen GROUP BY ALL HAVING step_number IS NOT NULL ORDER BY event_date -- WHERE -- user_pseudo_id = "2173465695.8694960923" -- user_pseudo_id = "2173465695.8694960923" :event_name_with_screen = screen_view-welcome의 user_id는 NULL -> home에서 로그인 -- food_detal, search 등 event_name_with_scree의 여러 요소들을 확인해보기 ) # [자습] 위 테이블을 screen_view 타입별로 피벗 테이블 만들기 쿼리 (위 테이블을 with 절로 만들고 아래 쿼리 실행) SELECT event_date, MAX(IF(event_name_with_screen="screen_view-welcome", cnt, NULL)) as `scren_view-welcome`, MAX(IF(event_name_with_screen="screen_view-home", cnt, NULL)) as `scren_view-home`, MAX(IF(event_name_with_screen="screen_view-food_category", cnt, NULL)) as `scren_view-category`, MAX(IF(event_name_with_screen="screen_view-restaurant", cnt, NULL)) as `scren_view-restaurant` FROM pivot_base GROUP BY event_date ORDER BY event_date 과제 올립니다 감사합니다
안녕하세요, 강의 수강하면서 Weekly, Monthly Retention 쿼리를 작성해보았습니다! 그리고 질문이 하나 있는데, 첨부해드린 코드는 현재 첨부해드린 사진처럼 오류가 발생합니다. 그런데 Weekly Retention 쿼리를 전부 주석처리하면 Monthly Retention 쿼리는 정상 작동합니다. 반대로 Monthly Retention 쿼리를 주석처리하면 Weekly Retention 쿼리는 정상 작동합니다. 이 현상의 원리에 대한 감이 잡히지 않아서 질문드립니다! 그 외에 쿼리 관련해서 고칠 점이 있다면 편하게 말씀해주시면 감사하겠습니다! WITH base AS ( SELECT user_id, user_pseudo_id, event_name, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM advanced.app_logs WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03" ), first_week_and_diff AS ( SELECT *, -- DATE_DIFF(event_date, first_date, DAY) diff_of_day DATE_DIFF(event_week, first_week, WEEK) diff_of_week FROM ( SELECT DISTINCT -- 일자별로 중복 제거 user_pseudo_id, -- DATE_TRUNC DATE_TRUNC(MIN(event_date) OVER (PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, MIN(event_date) OVER (PARTITION BY user_pseudo_id) AS first_date, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week, event_date FROM base ) ), first_month_and_diff AS ( SELECT *, -- DATE_DIFF(event_date, first_date, DAY) diff_of_day DATE_DIFF(event_month, first_month, MONTH) AS diff_of_month FROM ( SELECT DISTINCT user_pseudo_id, --DATE_TRUNC DATE_TRUNC(MIN(event_date) OVER (PARTITION BY user_pseudo_id), MONTH) AS first_month, DATE_TRUNC(event_date, MONTH) AS event_month, MIN(event_date) OVER (PARTITION BY user_pseudo_id) AS first_date, event_date FROM base ) ) -- Weekly Retention SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_cnt), 3) AS week_retention_rate FROM ( SELECT *, FIRST_VALUE(user_cnt) OVER (ORDER BY diff_of_week) AS first_cnt FROM ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week ) ) ORDER BY diff_of_week; -- 추가. Monthly Retention SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_cnt), 3) AS month_retention_rate FROM ( SELECT *, FIRST_VALUE(user_cnt) OVER (ORDER BY diff_of_month) AS first_cnt FROM ( SELECT diff_of_month, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_month_and_diff GROUP BY diff_of_month ) ) ORDER BY diff_of_month;
안녕하세요 카일스쿨님! 1-9 PIVOT문제를 풀어봤습니다. 먼저 PIVOT전에 제방식대로 푼코드를 드리겠습니다. 제가 WITH문을 자주 쓰지않고 그냥 한코드에 다쓰는 습관이 있어서 이런식으로 코드를 짜면 안좋은점이 있는지 피드백받고싶습니다. 또한 PIVOT문제를 풀긴 했는데 맞는 답인지 피드백받고싶습니다. -- PIVOT하기전에 제가 푼 것 -- 내가 쓴 답 -- SELECT -- event_date, -- concat(event_name,'-', param.value.string_value) AS event_name_with_screen, -- CASE -- WHEN (event_name='screen_view' AND param.value.string_value='welcome') THEN 1 -- WHEN (event_name='screen_view' AND param.value.string_value='home') THEN 2 -- WHEN (event_name='screen_view' AND param.value.string_value='food_category') THEN 3 -- WHEN (event_name='screen_view' AND param.value.string_value='restaurant') THEN 4 -- WHEN (event_name='screen_view' AND param.value.string_value='cart') THEN 5 -- WHEN (event_name = 'click_payment' AND param.value.string_value='home') THEN 6 -- ELSE 0 -- END AS step_number, -- COUNT(DISTINCT user_id) AS cnt -- FROM `expanded-idiom-446706-d4.advanced.app_logs` -- CROSS JOIN UNNEST(event_params) AS param -- WHERE -- (event_date BETWEEN "2022-08-01"AND '2022-08-18') AND key='firebase_screen' -- GROUP BY event_date,event_name,param.value.string_value,step_number -- HAVING step_number !=0 -- ORDER BY step_number ,event_date -- PIVOT문제 푼것 WITH base AS ( SELECT event_date, event_timestamp, event_name, user_id, user_pseudo_id, platform, MAX(IF(event_param.key = 'firebase_screen',event_param.value.string_value,null)) AS firebase_screen, MAX(IF(event_param.key = 'food_id',event_param.value.int_value,null)) AS food_id, MAX(IF(event_param.key = 'session_id',event_param.value.string_value,null)) AS session_id FROM advanced.app_logs CROSS JOIN UNNEST(event_params) AS event_param WHERE -- event_date = '2022-08-01' # 적은 데이터로 쿼리를 작성하기 위해 만들어둔 조건 event_date BETWEEN '2022-08-01' AND '2022-08-18' GROUP BY ALL ) , fliter_event_and_concat_evnet_and_screen AS( -- screen과 event_name을 합치자(필요한 이벤트만 where 조건에걸어서 사용) SELECT * EXCEPT(event_name,firebase_screen,event_timestamp), CONCAT(event_name,'-',firebase_screen) AS event_name_with_screen, DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul')AS event_datetime FROM base WHERE event_name IN ('screen_view','click_payment') ) SELECT event_date, SUM(IF(event_name_with_screen='screen_view-welcome'),cnt,0) AS `screen_view-welcome`, SUM(IF(event_name_with_screen='screen_view-home'),cnt,0) AS `screen_view-home`, SUM(IF(event_name_with_screen=' screen_view-food_category'),cnt,0) AS `screen_view-food_category`, SUM(IF(event_name_with_screen='screen_view-restaurant'),cnt,0) AS `screen_view-restaurant`, SUM(IF(event_name_with_screen='screen_view-cart'),cnt,0) AS `screen_view-cart`, SUM(IF(event_name_with_screen='click_payment-cart'),cnt,0) AS `click_payment-cart` FROM fliter_event_and_concat_evnet_and_screen GROUP BY ALL ORDER BY event_date
Axe, Mana, Dice 까지는 firebase에 추가가 되었는데, 이후에 추가로 아이템을 등록을 해보려고 Scriptable/Item 폴더 안에 Scriptable Object를 추가했더니 인게임에서 키값도 못찾고 DB에 당연히 등록도 안되네용.. 어떻게하면 좋을까요 ㅠ
ItemDB 강의를 듣고 있는 중입니다. Data_Mng에 item_holder를 Dictionary로 만드셧는데 초기화 하는 부분이 어디인지 모르겠습니다. Character_Holder는 데이터 초기화 하는 부분 Holder s_holder = new Holder(); if(Character_Holder.ContainsKey(data.m_Character_Name)){ s_holder=Character_Holder[data.m_Character_Name]; }else{ Character_Holder.Add(data.m_Character_Name, s_holder); } 이 존재 해서 데이터 잘나오고 있는데요 item_holder 는 어디서 초기화를 진행하는지 모르겠습니다.
import com.yuyakaido.android.cardstackview.CardStackLayoutManager 해당 라이브러리들을 가지고 오지 못하는 것으로 보입니다. implementation " com.yuyakaido.android :card-stack-view:2.3.4" 와 jcenter() // Warning: this repository is going to shut down soon maven{url ' https://jitpack.io'}//추가 구문을 추가하였지만 문제가 해소 되지 않아 문의드립니다. 버전을 올리고 내리면서 새로운 프로젝트로 생성하여 진행하였으나 구현되지 않아, 남겨주신 프로젝트를 다운받아서 실행보아도 문제 해소가 되지 않아 문의드립니다. [오류가 해소되지 않는 프로젝트] https://drive.google.com/file/d/1S5xBtcu6b3CJ8AP1V7Ji0_ANqICNWoxq/view?usp=drive_link
리텐션 과제 제출합니다 ! 쿼리를 짜는 것보다 유저를 어떤 기준으로 나눌 것인지, 리텐션을 어떻게 해석할 것인지 등의 부분이 항상 어려운 것 같습니다 . . ㅠㅠ 최대한 배운 내용을 활용해서 인사이트를 도출해보고자 했습니다. 한번 봐주시면 감사하겠습니다 ㅎㅎ! https://bubble-supernova-783.notion.site/19defe88476380ef91abc06719a01ba9#1a4efe88476380e6bd84d4ac9602522d
플러터 프로젝트가 안보여요 플러터 정상적으로 설치후 선생님 강의 보며 따라 하면서 이미 New Project 하고 Flutter Project 선택 클릭하면서 플러터 프로젝트 만들었습니다. 당연히 flutter doctor 는 문제없이 잘 통과 했으니 플러터 프로젝트를 만들었겠죠. 그런데 어느날 부턴가 (아마 안드로이드 스튜디오 업데이트 이후) 갑자기 플러터프로젝트를 선택할수 있는 버튼이 사라졌어요 New Project 하면 Flutter Project 를 선택할수 있는 버튼이 보여야 하는데 안보이네요. 어떻게 하나요? 혹시 업데이트 이후 다른 사람도 그런가요?