프로그래밍/Python

 RPC framework라는것을 배웠는데, 참 편리한거 같다.

 RPC는 Remote procedure call의 약자로 원격으로 프로시저를 호출한다고 할 수 있다. 또한 네트워크나 콜방식에 상관없이 프로그래머가 원격으로 함수를 실행할 수 있게 해준다. 또한 IDL을 사용한다.

게임서버에 RPC Framework를 적용한것에 배웠다.

먼저 페이스북에서 만든 Thirft다.

Thrift (θrift)
•“scalable cross-language services development” 를 위해 Facebook
에서 개발, RPC framework 로 사용됨
•다양한 언어를 지원 ( http...[각주:1]

Thrift
•Server, Processor, Protocol, Transport 로 구성
•Thrift 를 통해서 code 생성을 하면 RPC Client 코드도 생성
•서버 / 클라이언트 의 가장 큰 차이는 당연하...[각주:2]

간단히 Register - Login 서버를 짠다고 치면 아래와 같이 짤 수 있다.

othello.thrift
namespace csharp othello
struct User {
1: optional i64 id=0;
2: optional string token="";
3: optional strin...[각주:3]

먼저 왼쪽에는 유저와 플랫폼 타입을 설정했다.  ※Thrift는 Unsigned를 구별하지 않는다.

그다음 위쪽 동그라미는 , exception을 통해 에러를 반환할 수 있게한다.

그다음 아랫쪽 동그라미는 서비스 부분으로 User Register의 input parameter을 설정하고 thorows도 설정한다.

othello.server.py
import asyncio
import thriftpy
from aiothrift.server import create_server
# ...
othello = thriftpy.load(...[각주:4]

다음은 서버부분인데, 이 부분은 제대로 이해는 안되었으나 이해한 바로는 서버를 생성하고, 서비스를 넣어주며, 핸들러를 받고, 서버설정을 하고, 프로토콜을 넣어준다.

아래코드는  Login과 Register을 받으면 코드를 실행하고 user를 반환하게되는데,  아래 이미지에 있는 설명 처럼 db_transaction을 작성함으로써 processor에 반영하고 오류발생시 db를 rollback하는 것 까지 완료하였다.othello.server.py
class Dispatcher:
# ...
@db_transaction
def Login(self, platform_type, platform_token):
# ...
return use...[각주:5]

  1. 저작자 : 박준철, https://www.slideshare.net/joongom/python-rpc-framework-78718414 [본문으로]
  2. 저작자 : 박준철, https://www.slideshare.net/joongom/python-rpc-framework-78718414 [본문으로]
  3. 저작자 : 박준철, https://www.slideshare.net/joongom/python-rpc-framework-78718414 [본문으로]
  4. 저작자 : 박준철, https://www.slideshare.net/joongom/python-rpc-framework-78718414 [본문으로]
  5. 저작자 : 박준철, https://www.slideshare.net/joongom/python-rpc-framework-78718414 [본문으로]

https://www.slideshare.net/hongjoo/speaker-diarization


# What us Speajer Diarization

    * Audiotrack 

    * Segmentation : 분리

    * Clustring : Speacker별로

# Time domain vs Frequency domain

    * TimeDomain -> Frequency domain(3D)

# Feacture Extraction

    * 20~30ms단위로 쪼갬 

    * 10ms 정도로  overlaping되게 움직임

# Time domain to Frequency domain

    * 고음역대 -> 저음역대(8khz미만으로 이동) Mel 스펙트럼

# Chromagram

    * 12음계로 쪼개서 그 피치를 표시

# Mel-Frequency Cepstral Coefficients

    * Scale

# Segmentation

    * Wave -> Cromagram

    *  2~5s 간격으로

    * 각 음계별로 가장 maximum 부분을 구별해낸다.

    * 12 * N개의 매트릭스를 만들 수 있다.

# Clustring

    * k-means

        * 가까운것들을 묶고 센터를 정해서 계속 샌트로이드가(Centroids) 일정한 위치가 되도록 

        * 썩 좋은 방법은 아니다.

        * 남자와 여자들이 많을때에는 피치가 구분이 잘 안된다. 

        * 피치가 섞이는것은 좋지 않다.

        * 동시에 말하는 경우 : 구별이 힘들다.

# Use MFFC

    * 가변적인 Segmentation

    * Speaker와 Speaker사이에 변환되는 지점을 찾는다.

    * 두사람의 목소리들을 MFCC의 가옵션 그래프를 그리면 다르게 나르게 난다.

    * 프레임이 흐를때 바뀌는 부분을 찾느다.

# Bayesian Inforamtion Criterion

    * MOdesl selection;

    * 주어진 모델에서 그것이 발견될 확률을 구하는것.

    * 이 모델이 이 데이터에 적합하는가를 구하는 function과 비슷.

    * Window를 왼쪽에서 오른쪽으로 움직이면서 모델이 한인안 경우와 2개 경우의 BIC 더 좋은지 찾는다.

    * BIC가 Maximum되는 부분이 Speacker가 바뀌는 부분

    * Code

        * rang_n_cluster : 클러스트 구별

    * 맨 왼쪽의 그래프는 (maximum = 1 minmum = 0)으로 그린것으로, 0으로 가까울수록 적합한 Cluster의 갯수임을 알 수 있다.

# Agglomerative CLustring

    * 제일 가까은 cluster를 merge하고 이 과정을 계속 반복하여 모든 데이터가 하나의 cluster가 될때까지 돈다.

    * linkage : Cluster와 Cluster의 거리를 구하는 방법을 정의

    * Code

        * arr 설명 : fst | sec | dis | 갯수

# Hierarchical Clustering & Dendrogram

    * Dendrogram을 그려보면 어디서 끊어야할지(예: 5번같은경우는 이상하다. 그런데 대부분 1미만이다. 5번만 클러스트 한개를 차지한다.)

# Agglomerative CLustring

    * 색깔별로 같은 사람의 목소리라고 치면

    * BIC값을 제일 가까운것을 뽑아서 계속 묶는다. △BIC(C9,C10) < 0일때까지만 묶어도된다. (∴ Speacker = 3)

Python Django 와 AWS로 쇼핑몰 만들기

쇼핑몰의 특징 :  제품에 딸린 정보가 많음.

    * 제품

    * 장바구니

    * 관리연동

    * 관리자 페이지

    * 매출 통계

    * 비동기 작업 / 작업 스케출링


직접 개발의 장점

    * 차별화된 UI/UX

    * 자유도 높은 프로모션/이벤트 가능

    * 방문 고객에 대한 세밀한 분석


왜 직접 개발해야하는가? 고민해볼 것들:

    * 유지보수 이슈 발생

    * 타 솔루션보다 좋은가?


기본 프로세스

   고객 : 제품 > 장바구니 > 결제

   관리자 : 관리자페이지 / 매출 통계 / 비동기작업

   메일링 등등


제품

    * 제품의 정부(고객 side, 물류 side, 관리자 side 30개 이상의 attribute 필요

    * 하나의 모델에 넣을경우 유지보수가 어려움


카테고리 기능은 필수!

    * 3depth 이상의 복잡한 구조의 경우 Foreign key : Foreign key Hell

# Django-mptt


장바구니 : 주문을 위한 시작점

        * 상품담기, 수량변경, 삭제

    Django-carton : 장바구니 라이브러리(Session 기반)


추가적인 요구사항(주문총액/상품종류에 따른 배송비 처리기능 구현)


로그인 한 유저에 대해 JSON serialize로 DB저장

    * 분석가능


PG직접연동은 하지말것 : 지옥문


I'mport;(아임포트)를 사용하는것이 좋음


Django admin

    * 대상 : 개발자 or 최종관리자(MD)

    * Django-Grappelli : 보완

    * Django-summernote : Summernote의 Django Add-on

    * Django Firn Assets.


직접 개발

    * Admin LTE (Bootstrap 기반)


매출 통계

    * Djpoango aggregation

    * cacheops

    * Google chart

DevOps  - Cloud 필수



+ Recent posts

티스토리 툴바