프로그래밍 354

[Github] 원격서버에서 git 권한 없음 해결방법 (Permission denied (publickey))

Cloning into 'xxx'... Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. SSH를 통해 git을 이용하기 위해서는 올바른 공개키가 등록되어있어야한다. 보통 본인 컴퓨터에서 할때는 문제가 없지만, 원격지에서 pull을 땡기거나 할때 위와 같은 오류처럼 Repository 액세스 권한이 없다며 오류를 뱉게 된다. 현재 사용중인 SSH 파악하기 먼저, 원격지 서버에서 사용중인 SSH키가 어떤 것인지 알아야하고, 해당키가 github의 어느 Repository에 권한이있..

Python 특정 키 값을 기준으로 Dictionary List에서 더하기

문제 arr = [] arr.append({"name": "A", "acquired_xp": 200, "key": 1, "data": 1}) arr.append({"name": "B", "acquired_xp": 500, "key": 2}) arr.append({"name": "B", "acquired_xp": 500, "key": 3}) arr.append({"name": "C", "acquired_xp": 750, "key": 4}) arr.append({"name": "A", "acquired_xp": 300, "key": 5})이렇게 Dictionary로 이루어진 리스트가 있고, acquired_xp항목을 이름에 따라 더하려고 한다. key는 고유값이므로 더하면 안되며, 첫번째로 만나는 key값을..

Python 정규식 그룹명으로 match 결과 가져오기 (group name)

filename = "backup_20220409180756_20220423180756" regex = re.compile(r"^backup_(?P\d+)_(?P\d+)$") match = regex.search(filename) if match: print(match.group("end")) # "20220423180756" 정규식 그룹명을 이용하면 편리하게 원하는 부분을 추출해낼 수 있다. (?P) 같은 식으로 사용할 수 있는데 위 예제는 정규식을 활용하여 파일명에서 시작시간과 끝시간을 뽑아내는 예제이다. 정규식 작성에 앞서 정규식을 테스트 해보기위해 regexr.com를 많이 이용하는데, 그룹명 테스트 만큼은 regex101이라는 사이트가 훨씬더 친절하게 결과가 나온다.

LiveData를 버리고 StateFlow를 써야할까요?

Flow 비동기식으로 계산할 수 있는 데이터 스트림. Flow는 값 시퀀스를 생성하는 Iterator와 매우 비슷하지만 정지함수를 사용하여 값을 비동기적으로 생성하고 사용한다. Python의 generator와 비슷하게 이해하면 될 듯. 생산자: 스트림에 추가되는 데이터를 생산. 코루틴 덕분에 비동기적으로 생산도 가능. (Remote Datasource) 중개자(*optional): 스트림에 내보내는 각각의 값이나 스트림 자체를 수정할 수 있다. 소비자: 스트림의 값을 사용한다. 생산자는 저장소, 소비자는 UI 인터페이스라고 받아들일 수 있다. 하지만 UI 레이어가 사용자 입력이벤트의 생산자 역시 될 수 있다. StateFlow의 특징 항상 값을 가지고 있다. 단 하나의 값만을 가진다. 여러 옵저버를 가..

안드로이드 Unity 플러그인 만들기

회사에서 GoogleAnalaytics나 AppsFlyer처럼 게임 중 발생하는 이벤트들을 캐치해서 보내는 SDK를 개발할 일이 생겼는데, Native를 왠만하면 이용하지 않는 편으로 구현하려했으나 최종 코드 가독성이라던가 파일 관리, 추상화 등의 이유로 Native를 사용하기로 했다. 오늘은 그때를 돌아보며 귀찮지만...처음 연결했던 방법을 적어보려한다. 1. classes.jar 추출하기 이번이 나의 처음 SDK 개발이었으며, Unity조차도 잘 몰랐다. 처음엔 Unity와 Android가 어떻게 소통한다는거지? 부터 이해가 필요했다. 둘 사이의 소통을 위해, Unity 라이브러리가 존재한다. 일반적으로는 아래 경로들에 위치하며, 이름은 classes.jar다. 이 파일을 복사하여 어딘가에 저장해두자..

kotlin dsl 적용중 versionNeededToExtract 오류 해결방법

java.lang.IllegalArgumentException: Unexpected versionNeededToExtract (0) at androidx/viewbinding/R.class at org.jetbrains.kotlin.cli.jvm.compiler.jarfs.ZipImplementationKt.parseCentralDirectory(ZipImplementation.kt:110) at org.jetbrains.kotlin.cli.jvm.compiler.jarfs.FastJarHandler.(FastJarHandler.kt:25) at org.jetbrains.kotlin.cli.jvm.compiler.jarfs.FastJarFileSystem$myHandlers$1.fun(FastJarFil..

Falcon req.get_param()으로 모든 파라미터를 받아보자

일반적으로 Falcon에서는 Query parameter에 있는 값을 req.get_param('name')으로 읽어올 수 있다. 하지만 폼데이터 역시 동일한 방법으로 얻어오면 구분은 안가긴 하지만 편할 것이다. 간단한 세팅으로 이를 실현시킬 수 있다. application/x-www-form-urlencoded application/x-www-form-urlencoded로 들어오는 값들도 req.get_param()을 통해 얻고 싶다면 아래 라인을 추가하면 된다. app.req_options.auto_parse_form_urlencoded = True multipart/form-data 추가로 falcon-multipart라는 모듈 설치가 필요하다. pip install falcon-multipart ..

해싱, 암호화에 대한 정리

# 단방향 암호화 (One-way Encryption) *단방향 알고리즘? 암호화했을때 다시 평문으로 복호화할 수 없는 암호화 알고리즘이다. 해시함수 (Hash Function) / 해시 알고리즘 (Hash algorithm) 임의 길이의 메세지를 고정 길이의 해시 값으로 변환시켜주는 단방향성 함수, 알고리즘 아주 작은 확률로 입력값이 다름에도 출력값이 같은 경우가 발생하는데, 이를 해시 충돌이라고 한다. 이 충돌 확률이 낮을 수록 좋은 함수로 평가된다. 해시값, Fingerprint, Message Digest 모두 같은 말이다. 단방향성 해시 함수의 출력값이다. 대표적인 단방향 알고리즘 MD5 임의 길이의 메세지를 512bit 단위로 처리해 128bit로 암호화 한다. 애국가 가사 4절 전부를 MD5..