목록분류 전체보기 (25)
동산로의 블로그

Happens-Before은 java의 쓰레딩(threading)에서 등장하는 개념입니다. 자바에 이런 예약어 혹은 객체가 있는 것은 아니고 일종의 개념으로만 보면 됩니다. 두 개의 연산이 happens-before 관계(relationship)에 있다는 말은, 말 그대로 연산에 순서가 있다는 말 입니다. 매우 간단한 말 이지만 우리가 모르는 컴퓨터가 알아서 하는 뒷면에는 복잡함이 숨겨져 있습니다. 코드의 순서와 실행 순서 우리의 생각과 달리 코드의 순서와 실제 실행 순서는 다릅니다. 코드의 의미(semantic)을 바꾸지 않는 선에서 JVM 혹은 CPU는 최적화를 위해서 코드 진행 순서를 변경 혹은 병렬처리 할 수 있습니다. 여기서 Happens-before은 이런 일이 일어날 때에 의미를 보존하기..
정규식 표현 Regular Expression ( 통칭 RegEx) Python에 내장된 re 모듈을 사용해서 정규식 표현을 해 보자. 정규식은 여러모로 사용할 일이 많습니다.텍스트에서 패턴 찾을 때에 정규식 만한 것이 없기 때문인데요.cli 환경에서 스크립트를 짜다보면 sed, grep과 함께 많이 사용하게 됩니다. 가장 활용하기 쉬운 python을 활용해서 설명하겠습니다.우선 regex의 기본 사용법을 먼저 설명하고 후에 python의 re에서의 사용법을 작성하겠습니다.Regex는 입력된 문자열에서 패턴을 찾는 기능입니다. Python은 기본 내장으로 're'라는 라이브러리가 있습니다. regular expression의 약자 re를 사용합니다.패턴은 \(escape)를 많이 사용하기 때문에 ra..
스택(stack)과 힙(heap)은 프로그램이 실행될 때 사용하는 두 가지 주요 메모리 영역이다. 스택은 함수 호추로가 로컬 변수를 저장하는 작고 고정된 영역이고, 힙은 동적 메모리 할당을위한 넓고 유연한 영역이다. 프로그램이 실행되면 운영체제는 프로그램에 필요한 메모리를 할당한다. 이 과정에서 먼저 프로그램의 코드와 전역 변수가 메모리에 적재된다. 프로그램 코드는 text segment로 불리며, 전역 변수와 static 변수는 data segment로 불린다. 그리고 stack과 heap이 각각 할당된다. 스택은 일반적으로 고정된 크기를 가진다. 반면, 힙은 처음에는 작게 설정되지만 필요에 따라 점진적으로 커질 수 있다. 스택(stack)스택은 자료구조에서의 스택(LIFO Last In First O..

개인적으로 이미지 변환 프로그램을 만들고 싶어서 이것 저것 찾아보는 중에 단순히 jav를 추가했는데 java의 기본 라이브러리의 기능 늘어나더라구요. e.g)twelveMonkeys의 jav파일들을 가져오면 java.awt.image.BufferedImage의 기능이 추가됩니다.c++나 c에서는 header 파일의 로딩 순서에 따라서 오버라이딩이 어떻게 되는지 바뀌긴 하는데 java에서는 어떤 규칙을 가지고 기능을 바꾸나 몰라서 찾아봤습니다. Service Provider Interface ArchitectureService Provider Interface는 하나의 서비스(interface 혹은 class)의 기본 구조를 바꾸지 않고도 새로운 기능을 추가하는 방식입니다. 얼핏 들으면 상속과 같아 ..

Q-learningQ -learning은 강화학습의 일종입니다. 행동에 대해서 보상을 받을 때에, 보상을 가장 높게 만드는 방법을 찾는 알고리즘입니다. 상황 설명주어진 상태에서 에이전트는 행동을 할 수 있습니다. 행동에 따라서 상태가 변화되며, 각 행동에 따라서 보상\(\mathcal{R}\)을 얻을수 있습니다. 가장 직관적인 예시는 게임을 할 때에 컨트롤은 행동이고, 게임 상태는 상태, 점수가 보상인 것입니다. 알고리즘의 목표는 가장 높은 \(Q\)값을 주는 행동을 했을 때에 보상을 최대로 받도록 \(Q\)를 찾는 것 입니다.이론상 완벽한 \(Q\)가 있다면 모든 상황에서 가장 높은 \(Q\)를 만들어 주는 행동만 취하면 됩니다.\(Q\)는 주어진 상태 \(S\)에서 행동\(A\)를 했을 때에 그 행..
jupyter가 실행 중일 때에 pip를 사용하게 되면 가끔 library가 오류나게 됩니다. 이 경우 python을 완전히 삭제해야할 필요가 있습니다. 특히나 의존성 때문에 pip가 자동으로 다른 library를 다운그레이드 할 경우 발생합니다. 완전 깨끗하게 삭제하기 위해서는 파이썬 삭제를 수동으로 해야합니다. 여러번 해 본 결과, pip로 library를 삭제해도 완전히 삭제되지가 않습니다. 또한 제어판 혹은 python 설치프로그램을 통해서 python을 삭제할 수 있습니다. 하지만 이 경우에는 완전히 삭제가 되지 않습니다. 이 경우에는 수동제거가 확실합니다. 1. 제어판 - 프로그램 제거- 파이선 삭제 2. C:\Users\USER\AppData\Local\Programs의 python 폴더..
저는 평소에 matplotlib을 자주 사용합니다 .쉽고 빠르지만 가끔 뭔가 부족하다는 생각이 듭니다.matplotlib은 그림의 확장이나 변형이 불가능합니다. 상호작용하는 그래프 오브젝트가 아닌 그림을 그려주는 라이브러리이기 때문입니다. 스케일을 바꾸거나 보는 방향을 바꾸는 등의 상호작용이 불가능합니다. Plotly를 사용하면 상호작용이 가능한 그래프를 만들 수 있습니다. plotly는 파이썬 뿐만 아니라 javascript으로도 사용가능합니다. 이 기능을 활용하면 python에서 그린 그래프를 웹페이지로 들고오는 것도 가능합니다. (혹은 javascript에서 직접 그릴 수도 있습니다. ) 마우스호버링, 확대 축소, 방향 전환 등의 여러가지 상호작용이 가능합니다. 간단하게 만든 iris 그래프를 티스..
SOLID 원칙은 객체지향디자인을 할 때에 이해성, 유연성, 유지보수성을 위해서 고안된 원칙입니다. 유지보수 하고 확장하고 디버깅하기 쉬워집니다. Rober C. Martin (a.k.a Uncle Bob)에 의해서 고안되었습니다.다섯가지의 SOLID 원칙은 5개로 이루어져 있으며, 각각의 이니셜을 따서 이름이 붙었습니다.1. S - Single Responsibility Principle2. O - Open/Closed Principle3. L - Liskov Substitution Principle4. I - Interface Segregation Principle5. D - Dependency Inversion PrincipleSingle Responsibility Principle(SRP)단일 책..