
Bounded-Buffer 문제 (유한 버퍼 문제) 생산자(Producer)는 데이터를 생성하고, 소비자(Consumer)는 데이터를 소비한다. in과 out의 값으로는 버퍼에 있는 데이터의 양을 알 수가 없다. (위의 그림 참조) 따라서 counter 변수를 사용한다. 하지만 counter 변수는 생산자와 소비자가 동시에 접근하므로 Race condition이 발생한다. 따라서 동기화가 필요하다. Race condition 여러 프로세스(또는 스레드)가 공유자원에 동시에 접근할 때, 접근 순서에 따라 결과가 달라질 수 있는 상황 Synchronizaiton (동기화) Multi-threaded application 스레드는 프로세스 안에서 메모리를 공유한다. (스택은 별개로 가진다.) 데이터 손상을 막..

이번에는 우리가 OpenStack에 contribute하기 전에 Gerrit을 어떻게 사용해야 하는지 알아볼 것입니다. Gerrit 흐름도 위의 그림은 Gerrit을 통한 코드 리뷰의 흐름을 나타낸 것입니다. 위의 그림을 간단하게 설명하자면 다음과 같습니다. 코드를 수정하고자 하는 프로젝트를 로컬 환경으로 clone합니다. 로컬 환경에서 수정하고자 하는 버그에 대해서 브랜치를 생성합니다. 변경사항에 대해 저장하고, 유닛 테스트를 진행한 다음, git commit을 실행합니다. (가장 첫 번째 커밋만 git commit으로 로컬 환경에 변경사항을 저장합니다.) git review를 통해 Gerrit 리뷰시스템에 변경사항을 제출합니다. 자동 테스트 툴을 통해, 빌드 및 테스트를 진행하고, 제출한 코드를 리뷰..

문제 보기 이 문제는 힙 문제이다. 힙 자료구조를 사용해서 우선순위 큐를 구현하는 것이 문제의 의도이다. 문제를 푼 로직은 다음과 같다. 주어진 스코빌 리스트를 힙으로 변경한다. (7~8번째 줄) 문제에서 주어진 방식대로 음식 2개를 섞어 새로운 음식을 만들고, 이 때의 스코빌 지수를 추가한다. (11~15번째 줄) 모든 음식의 스코빌 지수가 K보다 높아야하므로, 힙의 루트가 K보다 작을 동안(= 힙의 최소값이 K보다 커지면 모든 음식의 스코빌 지수가 K보다 크다) 반복한다. (9~10번째 줄) 더이상 섞을 음식이 없고, 스코빌 지수가 K보다 낮다면 -1을 반환한다. (17~18번째 줄) import heapq def solution(scoville, K): answer = 0 # make scovill..

문제 보기 이 문제는 스택/큐 문제이다. 주식이 시간이 지남에 따라 가격이 떨어지지 않은 시간이 얼마인지 구하는 문제이다. 현재 시간에서 미래에 가격이 떨어지는 시간까지 탐색을 해야하기 때문에 O(n^2)이 나올거라고 생각했다. 문제를 푼 로직은 다음과 같다. 각 시간에서의 주식 가격에 대해서 (5~6번째 줄) 주식 가격이 떨어지지 않는 시간을 구한다. (8~15번째 줄) 각 시점에서의 주식 가격이 떨어지지 않는 시간을 업데이트한다. (17번째 줄) 여기서 눈여겨 볼 점은, 11~15번째 줄이다. 먼저 시간부터 센 다음, 만약 주식 가격이 떨어지면 break를 통해 반복문을 벗어난다. 이는 예제 입력을 보면 알 수 있다. 주식 가격이 상승을 하던 하락을 하던 일단 1초는 지나가기 때문에 시간을 먼저 세는..

문제 보기 이 문제는 스택/큐 문제이다. 문제를 해결하는데 스택이 사용되긴 했지만, 오히려 개념은 DP에 가까운 느낌이다. 문자열을 하나씩 읽을 때마다, 레이저를 만나게 되면 잘린 막대기가 몇 개인지 판단하였다. 문제를 푼 로직은 다음과 같다. 레이저는 "()"로 구분되므로, 더 쉬운 이해를 위해서 다른 문자 하나로 치환한다. (나의 경우 '.'로 치환했다.) 문자열을 읽으면서 '('를 만나면 막대기를 현재에서 한 개 더 올린다는 뜻이므로, '('를 만날 때마다 스택에 추가하고, 쇠막대기의 개수를 한 개 더한다. (7~9번째 줄) 문자열을 읽으면서 ')'를 만나면 젤 위의 막대기가 끝이 났다는 뜻이다. 그러므로 스택에 추가한 '('를 한 개 뺀다. (10~11번째 줄) '.'를 만나면 (=레이저를 만나면..

본 포스트는 우리가 Git 가이드를 완료한 상태라고 가정합니다. Gerrit Account Gerrit이란? Gerrit은 OpenStack 커뮤니티가 사용하는 리뷰 시스템입니다. 회원가입 OpenStack의 Gerrit 페이지를 방문하고 sign in 링크를 클릭합니다. 사용자 이름을 선택하라는 메시지가 나타날 것입니다. StoryBoard나 Launchpad에서 사용했던 것과 같은 이름으로 사용합니다. 사용자 이름을 신중하게 입력하세요. 한 번 설정하면 변경할 수 없습니다. 지금부터 Gerrit에 로그인하면 StoryBoard나 Launchpad 로그인 정보를 입력하라는 메시지가 나타날 것입니다. 개인 기여자 라이선스 계약 (Individual Contributor License Agreement) ..
본 포스트에서는 OpenStack에 contribute 할 커밋들을 작성하는 좋은 예시와 나쁜 예시를 알아볼 것입니다. 공식 문서를 번역하는 것만으로도 도움이 되는 것을 느낍니다. Git Commit의 좋은 관행 개요 이 글에서 제기될 핵심과 예제들은 변경 사항을 개별적인 커밋들로 분할하는 것에 대한 가치와, 좋은 커밋 메시지들을 작성하는 중요성에 대해서 증명할 것입니다. 만약 이 가이드라인들이 광범위하게 적용된다면 OpenStack Git 기록들의 질을 향상하는 데에 엄청난 기여를 할 것입니다. 이 글은 사람들에게 여러 혜택들을 인식하게 하는 당근과 같은 반면에, Gerrit code를 리뷰하는 누구나 채찍이 될 수 있습니다. 바꿔 말하면, Gerrit에서 변경사항들을 리뷰할 때, 코드의 정확성에 대해..
Git 관련 포스트인데 내용이 길다 보니 아마 2편 이상으로 나눠서 작성할 것 같습니다. 대부분의 OpenStack 개발 도구(예: git-review)들은 Windows 환경에서 잘 돌아가지 않으니, 리눅스 환경을 기준으로 포스팅합니다. 본 포스트는 Git 설치법과 OpenStack에 contribute 할 때의 커밋 메시지에 대해서 소개합니다. 이것저것 알아보면서 느낀 것이지만, 아무리 공식 문서라도 프로젝트나 버전마다 권장하는 내용이 조금씩 다르니 참고 바랍니다. 본 포스트는 우리가 Account Setup 가이드를 완료한 상태라고 가정합니다. Git Git이란? Git은 OpenStack 커뮤니티가 소스 코드와 문서의 변경사항을 관리하기 위해 사용하는 무료 오픈 소스 분산 버전 컨트롤 시스템이다...

OpenStack 커뮤니티에서 채팅 서비스로 IRC를 사용한다지만 저는 사용할 일이 없을 것 같아서 포스팅하지 않습니다. OpenStack Foundation Account 구성하기 OpenStack Foundation Account는 우리가 선거에서 투표할 수 있게 합니다. OpenStack 프로젝트에서 특정 포지션에 지원할 수 있게 합니다. OpenStack 컨퍼런스에서 발표할 수 있게 합니다. OpenStack 컨퍼런스에서 투표할 수 있게 합니다. (딱히 쓸 일이 없어보이는 장점들...) 회원가입 만약 코드 기여를 하고싶다면 반드시 같은 이메일을 사용하도록 하세요. 왜냐하면 나중에 각 계정들의 이메일 주소가 일치하는 것이 중요합니다. OpenStack Foundation 회원가입 페이지로 이동하세요..

개인적으로 OpenStack의 프로젝트에 기여하는 Developer가 돼보고 싶어서 시작하는 프로젝트입니다. 공식 문서를 참고해 차근차근 진행해 볼 계획이니, 프로젝트의 진행 속도는 많이 느릴 것 같습니다. (핑계 +1) 공식 문서가 OpenStack의 버전 별로 매번 업데이트 되기 때문에, 이것 저것 찾아보고, 번역하면서 포스팅하겠습니다. OpenStack이란? Software OpenStack은 기업과 통신회사를 포함한 다양한 사용 사례들을 다루는 사설 및 공인 클라우드 플랫폼을 제공하는 소프트웨어 패키지입니다. 주요 초점은 IaaS(Infrastructure as a Service)와 IaaS위에서 빌드된 추가적인 서비스들입니다. 소프트웨어로써, OpenStack은 실제 다른 구조로 결합될 수 있는..
- Total
- Today
- Yesterday