Posts

react-native hook dependency setting (feat.RN-0.76)

react 리렌더링에 큰 영향을 미치는 hook dependency. 예전에는 lint 로 hook dependency 체크해주는 설정이 잘 안되어 힘들었던 기억이 나서 정리해보고자 새로운 리엑트 네이티브 프로젝트를 생성했다. React re-rendering is significantly affected by hook dependencies. In the past, it was challenging for me to configure linting to check hook dependencies, so I created a new React Native project to document settings for managing them. 그런데 아무런 설정 없이도 hook dependency check 가 자동으로 잘 된다...? To my surprise, the hook dependency check works automatically, even without any additional setup. .eslintrc.js 파일을 살펴보니 (예전에는 자동으로 생성이 안되었던 것 같은데) After reviewing the .eslintrc.js file (which didn’t seem to auto-generate in previous versions), I found this configuration: ``` module.exports = { root: true, extends: '@react-native', }; ``` 하여 node_modules/@react-native 를 살펴보니 eslint-config/index.js 에 아래와 같은 설정을 발견 I explored node_modules/@react-native and found the following settings in eslint-config/index.js: ``` plugins: [ 'eslint-comments',

스티키 헤더 여러개 만들기 (Multiple sticky header)

# 스티키 헤더 여러개 만들기 ScrollView 에서 제공하는 stickyHeader 를 사용하려면 단순히 [stickyHeaderIndices](https://reactnative.dev/docs/scrollview#stickyheaderindices) 에 스티키 헤더가 될 인덱스를 넣으면 된다. 하지만 인덱스 여러개를 넣게되면 인덱스에 포함되는 행들이 차례로 쌓이는게 아니라 두번 째 행이 위에 붙게되면 원래 붙어있었던 첫번 째 행은 위로 올라가 사라지고 만다. 나는 여러개의 행이 차례로 쌓이는 이른바 multiple sticky header 를 만드는 방법에 대해 내가 고민했던 방법을 정리하고자 한다. There is [stickyHeaderIndices](https://reactnative.dev/docs/scrollview#stickyheaderindices) option in ScrollView if you need simple sticky header. However, i need multiple sticky headers that stack upon each other. Usually when a user scrolls up, the previous sticky header is replaced by the new one. 기본적인 원리는 스크롤 뷰 위에 스티키 헤더를 absolute 로 겹쳐놓고 스크롤의 y 좌표가 해당 헤더 위치를 지나가면 겹쳐놓은 스티키 헤더의 display 를 none 에서 flex 로 변경해주는 것이다. Basic idea is overlapping invisible header over scrollView and when the header moving up touching top of the view, make the invisible header visible. ```js <SafeAreaView> <View> <ScrollView onScroll={handl

react native gps foreground service - android, kotlin (1)

react native 에서 gps 트래킹을 해야한다. 앱이 백그라운드에 있어도 동작하도록 네이티브 모듈을 만드는 것만 해도 많이 안하다보니 까다로운데 gps + 서비스 동작을 해야한다니. 기본으로 돌아가기로 했다. 일단 안드로이드 앱에서 GPS 트래킹하는 코드부터 시도해보았다. ### MainActivity.kt ``` package com.example.gpstracker import android.annotation.SuppressLint import android.content.Context import android.content.pm.PackageManager import android.location.LocationListener import android.location.LocationManager import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.core.app.ActivityCompat import com.example.gpstracker.ui.theme.GpsTrackerTheme val T

Modularization of react NativeModules

써드파티 SDK를 붙이는데 해당 업체에서 npm package 가 아닌 각 OS의 SDK 와 react native 코드를 주면서 앱에 내장하라는 가이드를 받았다. 물론 이를 그냥 앱에 넣을 수는 없어서 package 로 분리하는 작업을 하였다. 이 작업을 하며 겪었던 트러블슈팅을 정리하고자 한다. # Android ## 자바와 코틀린간 패키지 참조 불가 build.gradle (app) 에 하단 설정 추가 ``` apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' ``` ## Could not find com.this.repo. 모듈의 example 프로젝트에서 받고자하는 sdk 라이브러리가 없다는 에러. example 프로젝트의 build.gradle 에 아래 코드를 추가하여 필요한 sdk 를 다운받을 수 있도록 한다. Can’t find module in example project, and I fixed it adding below codes in build.gradle (example) ``` allprojects { repositories{ maven { url 'https://repository.something/‘ } // change this line to download the sdk you aimed } } ``` ## Workspaces can only be enabled in private projects. 모듈을 붙이고자 하는 프로젝트는 프라이빗 프로젝트이기 때문에 npm 에 퍼블리쉬되지 않은 패키지의 경우 package.json 에 "private:true" 를 추가해야 한다. Because my project is “private:true”, If I want to add non-published package, the package should be

Operating System Concept Eng(1)

Image
1.1 In a multi-programming and time-sharing environment, several users share the system simultaneously. This situation can result in various security problems. a. What are two such problems? Because of storage or memory resource sharing,  security is weak. Someone strangers can still or copy others' data. b. Can we ensure the same degree of security in a time-shared machine as in a dedicated machine? Explain your answer. I think, dedicated machine(like a computer for military purpose) have more external technology security plan, so we can't ensure the same degree of security in general used machines. 1.13  The issue of resource utilization shows up in different forms in different types of operating systems. List what resources must be managed carefully in the following settings: a. Mainframe or minicomputer systems Because many people connect to A computer, we have to consider fair distribution of cpu time, memory resource and I/O b. Workstations

블로거에서 마크다운 사용하기 - Markdown in Google Blooger

Image
### Reference : https://github.com/cs905s/md-in-blogger?tab=readme-ov-file 참고한 문서가 작성된지 오래되어 따라하기 힘들어서 2024년 4월 기준으로 설명합니다. I write this document because the reference I refered is too old to follow. So I had some trouble to apply markdown in Blooger using the reference. ## 1. 마크다운을 사용할 수 있도록 스크립트 코드 추가 / Add markdown script 1. 블로거 관리자페이지 왼쪽의 테마를 누르고 나오는 테마 페이지에서 버튼 오른쪽에 있는 화살표를 누릅니다. 메뉴에서 HTML 편집이 있는데 이 버튼을 누르면 테마 HTML 편집을 할 수 있는 창이 열리고 여기서 마크다운 지원을 위한 스크립트 코드를 추가해야 합니다. In admin page, you can see theme on leftside, after clicking theme, click small arrow down icon. A menu will be released and click `Edit HTML`. You can add script code to support markdown in HTML editing page. 2. 헤드 태그를 찾아야합니다. /head 를 검색하여 `</head>` 바로 위에 하단 5줄의 스크립트 코드를 붙여넣어주세요 Find head tag. Search /head (using ctrl + f). Copy below 5 lines and paste just above of `</head>` ``` <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js" type="text/javascri

카카오 내비 리엑트 네이티브 모듈 만들기 ft.코틀린

사용자를 카카오 내비로 이동시키는 기능이 최근 카카오네비 딥링크가 막혀서 더이상 사용하지 못하는 이슈가 있었습니다. 카카오 SDK 를 포팅한 React Native 모듈이 있는지 찾아보았으나 대부분은 Out-Dated 된 모듈들이어서 새로 만들기로 하였습니다. A~Z 까지 모든것을 설명하려는 것은 이 포스팅의 목적이 아니고, 개인적으로 조금 헤매었던 부분을 정리하고자 합니다. ### create react native module React Native 공식 문서에도 나와있듯 모듈을 쉽게 만들기 위해 이미 보일러 플레이트가 완성되어있는 코드를 베이스로 삼아 만들어 줍니다. ``` npx create-react-native-library@latest react-native-awesome-module ``` ### react module 에서 app context 사용 방법 SDK 문서에 따르면 사용자 기기에 카카오내비 앱의 설치 유무를 확인하기 위해서 아래와 같은 코드를 사용할 수 있습니다. ``` if (NaviClient.instance.isKakaoNaviInstalled(context)) { Log.i(TAG, "카카오내비 앱으로 길 안내 가능") } else { Log.i(TAG, "카카오내비 미설치") } ``` 하지만 안드로이드 네이티브가 아닌 우리는 리엑트 네이티브의 모듈을 가져와서 context 로 넣어주어야 하고 이는 네이티브 모듈에서 아래와 같이 잡아올 수 있습니다. ``` class KakaoNaviModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { private var context: Context = reactContext.getApplicationContext() ``` ### modul

Popular posts from this blog

Operating System Concepts 9th

카카오 내비 리엑트 네이티브 모듈 만들기 ft.코틀린

Operating System Concept