func main() { var num1 int = 10 var num2 float32 = 3.2 var num3 complex64 = 2.5 + 8.1i var s string = "Hello, world!" var b bool = true var a []int = []int{1, 2, 3} var m map[string]int = map[string]int{"Hello": 1} var p *int = new(int) type Data struct{ a, b int } var data Data = Data{1, 2} var i interface{} = 1 fmt.Printf("정수: %d\n", num1) // 정수: 10 fmt.Printf("실수: %f\n", num2) // 실수: 3.2 fmt...
Go lang으로 대용량 파일 chunk 단위로 나누기 Go lang으로 대용량 파일에 대해서 chunk 단위로 나누어 보자. 나누기 위해서 우선 대용량 파일을 생성한 후 나누기를 진행 할 것이다. 대용량 파일 생성 파일 나누기 1. 대용량 파일 생성 package main import ( "fmt" "math" "os" "runtime" "strconv" "time" ) const MAX_CONCURRENT_JOB = 10 const NUMBER_OF_UNORDERED = 100000000 const BIG_DATA_ROOT = "data" const BIG_DATA_FILE_PATH = "data/big_data.txt" const FILE_CHUNK_SIZE = 10 * (1
Python TTS 방법 TTS(Text to Speech) 기술은 유튜브, 트위치 등 인터넷 방송 뿐만 아니라 네이버, 구글 번역 사이트 등 발음 기능 등으로 웹 서비스로도 많이 사용 되는데 TTS는 어떻게 작동 되는지 한번 알아보자. 1. TTS 개요 TTS는 머신 러닝 등을 이용하여 텍스트에서 인간의 발언으로 구현해주는 것이다. TTS를 이용하여 메뉴얼 녹음이라든지 회사 비지니스 관점에서 시간이나 돈 등을 절약할 수 있는데 https://github.com/pndurette/gTTS TTS 구현 방법 연결 (Concatenative) 방식 녹음된 오디오의 조각을 이어 붙이는 방식으로 매우 고품질을 제공하지만 머신 러닝을 위해서 많은 데이터가 필요하다. 매개변수 (Parametric) 방식 주어진 텍..
Python Speech Recognition 방법 파이썬에서 음성 인식 하는 방법. 음성 인식을 기술을 활요하여 이미 아마존 알렉사, 카카오 미니 등 다양한 제품들이 현재 집에서 서비스를 하고 있다. 그럼 음성인식이란 어떤것이고 어떻게 작동을하고 간단한 개요를 확인하고 파이썬에서 음성인식과 TTS를 활용하여 간단한 데모를 구현 해보자 1. 음성인식 개요 음성인식은 1950년대 Bell Labs에서 연구의 기초를 둔다. 처음에는 한명의 말과 수십개 정도의 단어 정도에서 였지만 현재는 수많은 사람의 말과 수많은 언어의 단어를 인식 한다. 작동 방법 → Physical Sound with Microphone → Electrical Signal → Digital Data with Analog-to-Digita..
Python Thread와 Async를 이용한 비동기 방법 이후 Client에서 Request 보낼 Server의 소스는 다음과 같다. @router.get("/second") async def second(): return { "second": random.randint(1, 100), } 그리고 일반 함수를 생성해서 Server로 Request 했을 때, 약 20초 걸린다. import datetime import requests def second_request(): resp = requests.get("http://localhost:8090/second") start = datetime.datetime.now() for _ in range(0, 10): second_request() print(d..
Validate Class Attributes in Python Python에서 DTO, Data Class로 사용하는 Class를 Validation 하는 여러 방법을 알아보자 1. Validation method 사용 간단한 방법으로 __init__ 메소드에서 validate 하는 방법이다. 만약 유효하지 않다면 ValueError Exception 처리 될것이다. class Person(object): def __init__(self, id: int, name: str, age: int): self.id = id self.name = self._clean_name(name) self.age = self._clean_age(age) def _clean_name(self, name: str): if n..
Ubuntu 20.04 고정 IP 할당 방법 개요 DHCP 로 설치 했을 경우 네트워크 설정 yaml 파일 : /etc/netplan/xx.yaml 경로 (이름은 상이할 수 있음) 변경 전 # This is the network config written by 'subiquity' network: ethernets: ens160: dhcp4: true version: 2 변경 후 이더넷 인터페이스 이름은 꼭 확인 필요 (인터페이스 이름은 ifconfig 명령어로 확인 가능) network: ethernets: ens160: # 이더넷 인터페이스 이름 (확인 필요!) dhcp4: no dhcp6: no addresses: [192.168.10.85/24] # 원하는 IP 주소 gateway4: 192.16..
Python With Go Python 은 쉽고, 깔금하고, 독립적이며, 짧은 시간안에 개발을 할 수 있으며, 수많은 라이브러리들을 사용 할 수 있다는 점에서 좋은 언어 이다. 다만, 파이썬의 장점의 모든 것들은 속도 라는 대가를 가진다. (numpy 같은 c 라이브러리 제외 하고는...) pypy 나 pyc 등에 속도 향상을 대체도 있지만 실제 사용해보면 현실은 녹록치 않다. Go to Python Go 에서는 Go 를 C에 연결을 혹은 C를 Go에 연결을 도와주는 라이브러리를 제공한다. https://golang.org/cmd/cgo/ Python 에서는 C 모듈을 가져와서 사용 할 수있는 기능이 있기 때문에 Go도 마찬가지로 사용이 가능하다. Go .so 파일 만들기 import "C" 와 사용 할..
Github Action Github Action 개요 Github action 은 github에서 공식적으로 제공하는 work flow 자동화 툴. github repo 안에서 .github/workflows 경로에 yml 파일 작성으로 생성. Github Action 구성 다음 6가지의 개념으로 구성 되어 있음 Workflows Events Runners Jobs Steps Actions 워크 플로우(workflows) 자동화된 프로세스 단위. 하나 이상의 job으로 이루어져 있으며 설정한 이벤트에 의해 실행된다. 이벤트(Events) 워크 플로우를 실행하는 특정 활동이나 규칙이다. 커밋의 push, pull request가 생성 되었을 때뿐만 아니라 Github 외부에서 발생하는 활동으로도 이벤트를..
Go Go 소개 2007년 구글에서 개발을 시작하여 2012년 GO 버젼 1.0을 완성. (현재 1.17 까지 realase) 디자인은 로버트 그리즈머, 롭 파이크, 케네스 톰슨 (대학교 전공 서적에 나오는 사람, C언어 만든 사람) 이 진행 Using at Use cases https://go.dev/solutions/#case-studies 특징 컴파일 언어 정적 타이핑 언어 함수형 언어 빠른 속도 일차적 개발 목적은 시스템 프로그래밍 직접 개발하면서 느낀 장점과 단점 장점 Go 는 문법이 매우 간단하고 배우기 쉽다 문법은 C++, Java, Python 장단점 섞어 놓은 느낌 동시성 기능 구현 쉬움 배포 Architecture 관점에서 진짜 진짜 쉬운 배포 모든 Go 프로젝트는 누가 개발하든 모두 ..
문제 https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 문제 풀이 import collections import sys dx = [-1, 0, 1, 1, 1, 0, -1, -1] dy = [-1, -1, -1, 0, 1, 1, 1, 0] def bfs(graph, y, x): graph[y][x] = 0 queue = collections.deque([(y, x)]) while queue: yy, xx = queue.popleft() for..
문제 https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 문제 풀이 import collections import sys dx = [0, 1, 0, -1] dy = [-1, 0, 1, 0] N = int(sys.stdin.readline().strip()) MAX_VALUE, MIN_VALUE = 0, 0 maps = [] for _ in range(N): case = list(map(int, sys.stdin.readline().split())) MIN..
문제 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 문제 풀이 import sys from collections import deque n, k = map(int, sys.stdin.readline().split()) MAX = (10 ** 5) def bfs(root, find): distance = [0] * (MAX+1) queue = deque([root]) while queue: x = queue.pople..
문제 https://www.acmicpc.net/problem/11403 11403번: 경로 찾기 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 풀이 import sys N = int(sys.stdin.readline()) maps = [list(map(int, sys.stdin.readline().split())) for _ in range(N)] for k in range(N): for y in range(N): for x in range(N): if maps[y][k] and maps[k][x]: maps[y][x] = 1 for m in maps: print(' ..
문제 https://www.acmicpc.net/problem/9372 문제 풀이 import collections import sys T = int(sys.stdin.readline()) def bfs(graph, i, visited, count): # visited[i] = 1 queue = collections.deque([i]) while queue: node = queue.popleft() if visited[node] == 0: visited[node] = 1 count += 1 queue.extend(graph[node]) return count for _ in range(T): N, M = map(int, sys.stdin.readline().split()) graph = [[] for _..
문제 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 문제 풀이 import collections import sys M, N, H = map(int, sys.stdin.readline().split()) tomato = [[] for _ in range(H)] queue = collections.deque([]) for h in range(H): for y in range(N): temp = list(map(int, s..
slots 기본적으로 파이썬에서는 객체의 인스턴스 속성을 저장하기 위해서 dict 를 사용 하는데 이를 통해 런타임 중 속성을 변경할 수 있다. 하지만 dict 는 메모리를 낭비하는 경향이 있다. slots를 사용하는 경우 두가지 효과가 있다. 속성에 대한 빠른 접근 class Normal(object): pass class UsingSlots(object): __slots__ = ['name'] normal = Normal() use_slots = UsingSlots() def fn_set_get_delete(cls): def set_get_delete(): setattr(cls, 'name', 'foo var') getattr(cls, 'name..
파이썬 Magic Method https://docs.python.org/ko/3.7/reference/datamodel.html#special-method-names new 인스턴스 생성시 호출되며 Static method 이다. 일반적인 구현은 super().new(cls) 로 인스턴스 생성후 Return 전에 필요한 작업을 함 만약 인스턴스를 Return 하지 않는다면 init 은 호출되지 않는다. class Sample(object): def __new__(cls, *args, **kwargs): print('new', args, kwargs) this = super().__new__(cls) cls.args = args cls.kwargs = kwargs return this def __init..