분류 전체보기

md5 :  RSA Data Security, Inc. MD5 Message-Digest Algorithm을 사용하여 MD5의 해시값을 반환합니다.

md5는 취약한 해시 알고리즘이기 때문에 민감한 정보를 저장할 시에는 SHA-256이상을 이용하여 저장하는것을 강력히 권합니다. 

MD5는 해시충돌이 있습니다.

1
2
3
4
5
<?
    $text = "apple";
    echo(md5($text)); 
    //1f3870be274f6c49b3e31a0c6728957f
?>
cs

sha1 :  US Secure Hash Algorithm 1을 사용하여 sha1 해시를 반환합니다.

SHA1역시 보안성 위험하오니, 단순 무결성 검사를 위한것이 아닌 이상, 사용하면 안됩니다.

1
2
3
4
5
<?
    $text = "apple";
    echo(md5($text)); 
    //d0be2dc421be4fcd0172e5afceea3970e2f3d94
?>
cs


hash : 지정한 알고리즘에 의해 값을 반환합니다. hash(알고리즘,입력값)

이용가능한 알고리즘 : http://php.net/manual/kr/function.hash.php


1
2
3
4
5
<?
    $text = "apple";
    echo(hash("sha256",$text));
    //3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b
?>
cs


'Web Programming > PHP' 카테고리의 다른 글

PHP에서 해시값 뽑아내기  (0) 2017.08.15
PHP explode & array_push  (0) 2017.08.15
PHP에서 GET과 POST를 사용하기  (0) 2017.08.15

PHP explode & array_push

2017.08.15 22:40

array_push는 배열의 끝에 데이터를 추가해줍니다. (http://php.net/manual/en/function.array-push.php)

PHP 문법 특성상 array_push(배열,추가할 값) 처럼 사용해야합니다.

1
2
3
4
5
<?
    $array = array("a","b","c");
    array_push($array,"d");
    # array = ["a","b","c","d")
?>
cs


explode는 문자열을 나누는 함수입니다. explode(기준 문자열, 입력 문자열) (http://php.net/manual/kr/function.explode.php)

입력 문자열이 "" 이면, explode()은 FALSE를 반환합니다. 또한 기준 문자열이 입력 문자열에 존재하지 않을시에는 입력문자열을 반환합니다.

옵션으로 limit을 줄 수 있습니다. limit은 반환 배열의 최대값을 지정합니다. explode(기준 문자열, 입력 문자열, 5)


1
2
3
4
5
<?
    $text = "Red,Blue,Green";
    $array = explode(",",$text);
    # array = ["Red","Blue","Green")
?>
cs


'Web Programming > PHP' 카테고리의 다른 글

PHP에서 해시값 뽑아내기  (0) 2017.08.15
PHP explode & array_push  (0) 2017.08.15
PHP에서 GET과 POST를 사용하기  (0) 2017.08.15

※GET은 URL통해 값을 전달한다. 처음에는 ?을 쓰고 그 다음에는 &으로 이어붙인다. 예 :a.html?name="Kim"&from="Korea"

※POST는 겉으로 보이지 않으며 주로 form submit으로 보내게 된다. 

※또한 GET으로 민감한 정보를 전송해서는 안되며, 반드시 POST를 써야한다.

PHP에서 GET과 POST를 사용하는 방법은 간단하다.

$_GET['key']와 $_POST['key']를 사용하면된다. ('key'대신 변수명을 넣어주면 된다.)

아래는 예제코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Example URL = https://test.com/test.html?KEY=URL
<form action = "https://test.com/test.html?KEY=URL" method = "post"> 
<input type="hidden" name="KEY" value="Form Data">
<input type="submit">
</form>
 
<?
    $get_data = $_GET['KEY'];
    $post_data = $_POST['KEY'];
    echo($get_data);
    # URL
    echo($post_pata); 
    # Form Data
?>
cs


여기서 주의해야할 점이 있는데, 사용자의 입력값을 함부로 쓰면 안된다는 것이다.

사용자가 어떤 공격을 할지 모르기 때문에, 반드시 XSS와 SQL Injection을 방지할 수 있는 코드를 넣어야 한다.

'Web Programming > PHP' 카테고리의 다른 글

PHP에서 해시값 뽑아내기  (0) 2017.08.15
PHP explode & array_push  (0) 2017.08.15
PHP에서 GET과 POST를 사용하기  (0) 2017.08.15

DB백업하기

2017.08.15 20:47

::: 서버 DB가 날라가서 쓰는글 :::

MariaDB나 Mysql에서 사용할 수 있다.


mysqldump -u[userId] -p[password] --all-databases > backup.sql

위의 명령어는 서버의 모든 데이터베이스를 backup.sql로 저장하는것이고,

mysqldump -u[userId] -p[password] --databases [DatabaseName] > backup.sql

위의 명령어는 특정 데이터베이스를 backup.sql로 저장하는것이다.


복원하려면 mysql 접속후에 아래의 명령어를 사용하면된다.

mysql> source dump.sql


DB백업과 파일백업은 필수입니다.

'Programming > SQL' 카테고리의 다른 글

DB백업하기  (0) 2017.08.15

 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

티스토리 툴바