분류 전체보기
-
inconsistent use of tabs and spaces in indentationweb/backend 2022. 4. 13. 10:44
Flask프레임워크를 사용하여 API 구현하기 위해 app.py에 아래와 같은 코드를 작성했다. @app.route('/tweet', methods=['POST']) def tweet(): payload = request.json user_id = int(payload['id']) tweet = payload['tweet'] if user_id not in app.users: return '사용자가 존재하지 않습니다.', 400 if len(tweet) > 300: return '300자를 초과했습니다', 400 user_id = int(payload['id']) app.tweets.append({ 'user_id' : user_id, 'tweet' : tweet }) 저장하고 API 콜을 했는데 오류가..
-
macOS shell을 bash에서 ZSH로 바꾸기CS/OS 2022. 4. 11. 16:58
Shell(셸) 터미널 환경에서 운영체제의 커널과 사용자의 유저 스페이스를 이어 주는 인터페이스 역할을 하는 프로그램이다. 인터페이스 역할 외에도 셸 스크립트(Shell Script)라는 셸 전용 프로그래밍 언어를 사용해서 터미널 환경에서 다양한 자동화를 실행할 수 있다. Bash(Bourne-Again Shell) 거의 대부분의 리눅스 기반 운영체제에서 default Shell로 설치된다. ZSH(Z shell) 'Oh My Zsh(설정 관리 툴)로 인해 인기를 얻고 있는 shell이다. 기본적인 기능은 Bash와 큰 차이는 없으나 여러 다양한 편리한 기능을 제공한다. Oh My Zsh이라는 ZSH 설정 매니저 플러그인을 통해서 편리하게 Shell을 설정할 수 있다. Bash -> ZSH 1. ZSH을..
-
'authorizationStatus()' was deprecated in iOS 14.0ios/개발하다가 2022. 4. 9. 21:48
접근 권한 사용자의 위치 정보 서비스에 접근하려면 다음과 같이 작성하면 된다. switch CLLocationManager.authorizationStatus() { case .notDetermined: // blah blah case .restricted: // blah blah case .authorizedAlways: // blah blah case .authorizedWhenInUse: // blah blah @unknown default: break } 하지만 'authorizationStatus()' was deprecated in iOS 14.0 라는 경고가 뜨는데 이 경고는 iOS 14부터 authorizationStatus를 사용하지 않아 수 없어 위 코드가 작동이 안된다는 것을 말한다...
-
Concurrency & Threadingios/Etc 2022. 4. 8. 14:37
모든 작업들은 스레드라고 불리는 곳에서 실행되고 있다. 스레드는 고속도로와 같다고 생각하면 될 것 같다. 차선들은 스레드이고, 이동 중인 차량은 실행되는 작업이다. 1차선은 비교적 깔끔하고 빠르게 이동해야 하는 곳이고 나머지 차선들은 1차선에 비해 그렇지 않다. 1차선은 메인 스레드이고 나머지 차선은 백그라운드 스레드라고 생각하면 될 것 같다. 메인 스레드를 빠르고 깨끗하게 유지해야 하는 이유는 UI가 수행되는 곳이기 때문이다. 만약 메인 스레드가 시간 집약적인 작업으로 막히게 되면 사용자는 앱이 제대로 동작하지 않다고 생각하게 될 것이다. 따라서 우리는 무거운 작업들을 백드라운 스레드에서 수행해서 메인 스레드를 여유롭게 두어 UI가 응답할 수 있도록 해야 한다. 이 조건들을 만족하기 위해서 메인 스레드..
-
Trie code by Phython코테 2022. 4. 5. 14:44
class Trie: head = {} def add(self, word}: cur = self.head for char in word: if char not in cur: cur[char] = {} cur = cur[char] cur['*'] = True def search(self, word): cur = self.head for char in word: if char not in cur: return False cur = cur[char] if '*' in cur: return True else: return False
-
동적 계획법(Dynamic Programming)코테/Dynamic Programming 2022. 3. 24. 16:58
Dynamic Programming(동적 계획법) 다이나믹 프로그래밍은 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상하는 방법 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 함 다이나믹 프로그래밍의 구현은 일반적으로 두 가지 방식(탑다운, 보텀업)으로 구성됨 Dynamic Programming의 조건 1. 최적 부분 구조(Optimal Substructure) 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다. 2. 중복되는 부분 문제(Overlapping Subproblem) 동일한 작은 문제를 반복적으로 해결해야 한다. 피보나치수열은 다음과 같은 형태의 수열이며, 다이나믹 프로그래밍으로 효과적으로 계산할 수 ..
-
Swift 메모리 관리: ARCios/Etc 2022. 3. 22. 15:06
ARC(Automatic Reference Counting) 자동으로 참조 카운팅을 해주는 것 (+MRC(Manual Reference Counting): 수동으로 참조 카운팅을 하는 것) // 일반적인 클래스 선언 class Person { let name: String init(name: String) { self.name = name } } //ARC 클래스 선언 class Person { let name: String init(name: String) { self.name = name } deinit { print("\(name)은 디이니셜됩니다.") } } ARC는 어떻게 동작할까 강한 참조를 자동으로 카운트한다. 강한 참조는 프로퍼티, 상수 또는 변수에 클래스 인스턴스를 할당하는 것을 강한 참..
-
가상메모리CS/OS 2022. 3. 20. 21:07
가상 메모리 메모리 관리 기법 중 하나로 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법 사용자 프로그램이 물리 메모리의 제약에서 벗어남 각 프로그램이 더 작은 메모리를 차지하기 때문에 더 많은 프로그램을 동시 수행 가능한 것처럼 보임 프로그램을 메모리에 올리고 swap 하는데 필요한 IO 횟수가 줄어듦 가상 메모리가 왜 필요할까? 프로세스란 실행되는 프로그램이며, 이는 메인 메모리에 올라와있어야 한다. 하지만 메인 메모리의 공간은 그렇게 크지 않고 여러 개의 프로그램을 실행할수록 할당되는 공간의 크기는 줄어들고, 어느새 공간은 꽉 차게 될 것이다. 다른 프로세스를 사용하기 위해 기존의 프로세스를 스왑 영역으로 내보내고 올리는 Swap In, Swap Out을 빈번히 한다면 큰..