글

ext 파일시스템 관련 . 참고용.

이미지
공유하기 · 안드로이드 시스템에서 은닉 데이터 탐지에 관한... · G901:A-0005769026 · [출판사]아주대학교 정보통신대학원...

MySQL 의 Password 함수의 알고리즘

MySQL에서 사용되는 password 함수는 입력되는 문자열을 Hashing 하여 돌려준다. MySQL 4.x 버전 이전까지는 아마 MD5 알고리즘을 사용하였는데 4.x 이후에는 PASSWORD함수의 알고리즘이 SHA1으로 바뀌고 이전 호환성을 위해 이전 함수는 OLD_PASSWORD()라는 이름으로 제공한다. (위 버전은 정확하지 않음) 알고리즘은 sha1을 두번 사용한다고 한다. 그런데, MySQL 에서 password()를 이용해서 생성해보면 ( https://www.browserling.com/tools/mysql-password  에서 password를 생성가능) sha1(sha1('문자열')) 한 결과와 다르게 나온다. 찾아보니 이유는 sha1의 입력도 문자열, 출력도 문자열 인데 password함수는 sha1의 출력을 바이너리 그대로 sha1의 입력으로 넣는다. 아래 C코드를 보면 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #incldue<stdio.h> #include<openssl/sha.h> typedef unsigned char u8; int main ( int argc, char * argv[]){ u8 ibuf[ 20 ] = "abc" ; u8 obuf[ 20 ] = { 0 ,}; SHA1(ibuf, strlen(ibuf), obuf); SHA1(obuf, 20 , outbuf); for ( int i = 0 ;i < 20 ;i ++ ) printf( "%02x" , outbuf[i]); printf( " \n " ); return 0 ; } 이렇게 하면 MySQL의 password 함수와 동일한 결과를 얻을 수 있다. MySQL에서는 sha1(unhex(sha1('abc'...

책: 완벽한 공부법

완벽한 공부법(완공) - 읽는중 생각나는 부분만 적음.(작성중) 1. 성장형 사고방식: 공부가 재능이 아니라 할 수록 잘 할 수 있다는 생각. 실패하거나 잘 못하더라도 연습하면 잘하게 된다는 생각을 당연히 하는것. "역시난 안되", "공부 잘 하는 애들은 타고 난거야" 라는 생각을 안하는것. 2. 잘한것에 대한 초점을 맞추자. 3. 믿음 Think about thinking. 메타인지 해마 작업기억(=단기기억) - 4가지 작업대: 음운회로(phonological loop), 시공간메모장(visual-spatial sketchpad), 일화완충기(episodic buffer), 중앙집행기(central executive)

용적률, 건페율 과 도로

용적률은 어떤 땅에 건물을 지을때 바닥면적의 합과 땅의 비율이다. 바닥면적이란 건물의 각층의 면적이고, 하늘에서 정확하게 수직으로 내려다 보았을때 면적을 말한다. 예를 들어 100평 크기의 땅에 50평에만 건물을 2층을 지으면 바닥면적의 합은 50x2 이므로 100이다. 이때 용적률은 100%가 된다. 건폐율은 100평땅에 50평만 건물이 세워져 있으므로 50%가 된다. 여기까진 쉽게 알 수 있는 사실이고... 용적률을 정하는 큰 기준은 용도지역구분이다. (아래 자료는 작성중임) 용도지역( 국토의 계획 및 이용에 관한 볍률 시행령) 주거지역 구분 건폐율 용적률 전용주거지역 (양호한 주거환경을 보호하기위해) 1종(단독주택) 50% 이하 50~100% 2종(공동주택) 50%이하 100~150% 일반주거지역 (편리한 주거환경을 조성하기 위해) 1종(저층주택) 60% 이하 100~200% 2종(중층주택) 60%이하 150~250% 3종(중고층주택) 50%이하 200~300% 준주거지역 (주거기능을 위주+일부 상업기능 및 업무기능) 70%이하 200~500% 상업지역 구분 건폐율 용적률 중심상업지역 (도심,부도심의 상업/업무 기능 확충) 90% 이하 400%~1500% 일반상업지역(일반적인 상업/업무기능담당) 80% 이하 300%~1300% 근린상업지역(근린지역에서 일용품/서비스 공급) 70%이하 200%~900% 유통상업지역(도시내-지역간 유통기능 증진) 80%이하 200%~1100% 공업지역   - 전용공업지역(주로 중화학공업, 공해성 고업 등을 수용하기 위해) 70% 150~300%   - 일반공업지역 : 호나경을 저해하지 아니하는 공업의 배치 70% 200~350%   - 준공업지역 : 경공업 그 밖의 공업, 주거+상업+업무기능 보완 70% 200~400% 녹지지역   - 보전녹지지역 : 도시의 자연환경/경관/사림 및 녹...

Python map() , zip()

Python 의 map() 과 zip() - map( ) :  https://docs.python.org/ko/3.7/library/functions.html#map map ( function ,  iterable ,  ... ) iterable  의 모든 항목에  function  을 적용한 후 그 결과를 돌려주는 이터레이터를 돌려줍니다. 추가  iterable  인자가 전달되면,  function  은 그 수 만큼의 인자를 받아들여야 하고 모든 이터러블에서 병렬로 제공되는 항목들에 적용됩니다. 다중 이터러블의 경우, 이터레이터는 가장 짧은 이터러블이 모두 소모되면 멈춥니다. 함수 입력이 이미 인자 튜플로 배치된 경우에는,  itertools.starmap()  를 보세요. - zip() :  https://docs.python.org/ko/3.7/library/functions.html#zip zip ( *iterables ) 각 iterables 의 요소들을 모으는 이터레이터를 만듭니다. 튜플의 이터레이터를 돌려주는데,  i  번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의  i  번째 요소를 포함합니다. 이터레이터는 가장 짧은 입력 이터러블이 모두 소모되면 멈춥니다. 하나의 이터러블 인자를 사용하면, 1-튜플의 이터레이터를 돌려줍니다. 인자가 없으면, 빈 이터레이터를 돌려줍니다. map(str , [1,2,3]) 의 결과는 ['1','2','3'] 1,2,3 이라는 숫자가 각각 str함수를 거쳐서 문자열 1,2,3 으로 바뀐다.  만약 x2 라는 함수를 아래와 같이 정의하면 def x2(x):     return x*2 map(x2, [1,2,3]) 의 결과는  [2,4,6] map의 인자...

토마스 기찻길

이미지

토마스 기찻길

이미지

토마스 기찻길

이미지

토마스 기찻길

이미지

토마스 기찻길

이미지

토마스 기찻길

이미지

토마스 기찻길

이미지

토마스 기찻길

이미지
하면 할수록 이빠가 더 잼있는 듯

토마스 기찻길

이미지

JBL Flip2 Charging issue. replace micro usb(b)

이미지
JBL Flp2 이쁘게 생기고, 음질도 좋다. 문제는 국내 정식수입업체도 AS가 되지 않는다.(AS를 보내면 교환이 원칙이라며 10만원에 가까운 돈을 요구한다.)   문제 Flip2의 충전단자가 접촉불량인듯 충전이 되질 않는다. 구글링 해보면 충전단자를 케이브롤 뽑아낸 자료가 있었다.( https://www.youtube.com/watch?v=-VNsuGodUkk )  개인적으로 이런건 별로 좋아하지 않아서 분해하였다.   허... 충전 단자가 실리콘으로 떡칠이 되어있다. 자세히보면 충전단자도 피스로 고정이 되어있기 때문에 저렇게 떡칠할 필요가 없을것 같은데, JBL측에서도 문제가 있다는걸 알고 있었던것 같다. 칼로 조심해서 실리콘을 잘라내고 usb 단자를 분리 하였다.  자세히 보면 usb 커넥터가 기판에서 떨어져 있다. 부품이 불량 같다. 저런부품은 엘레파츠에서 비슷한 것들이 많아서 구매하였다. 아래쪽에 micro usb 커넥터 이다. 혹시 몰라 케이블에서 커넥터를 빼서 쓸까해서 같이 구매하였다. 원래 파워케이블을 잘라서 납땜해주고 연결하였다. 잘 동작한다. 사진은 없지만, 새로산 micro usb 커넉터의 보드가 조금 더 커서 플라스틱 케이스를 잘라내었다. 제일 힘들 부분이었다. 딱 맞추어 잘라내는데 2시간 정도 걸린것 같다. 정확히 맞추어 준 후 실리콘으로 떡칠 해주었다. 잘 굳었는지 확인하고 다시 조립. 다 조립후 잘 되는지 한번더 확인. 부품 구매에 1만원도 쓰지 않았다. 뿌듯함. ㅋㅋ

OpenCL Vector type 간 비교

OpenCL에는 벡터 형 자료가 있다. 아래 표는  https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/ 에서 긁어왔다. Type in OpenCL Language Description API type for application char n A vector of  n  8-bit signed two's complement integer values. cl_char n uchar n A vector of  n  8-bit unsigned integer values. cl_uchar n short n A vector of  n  16-bit signed two's complement  integer values. cl_short n ushort n A vector of  n  16-bit unsigned integer values. cl_ushort n int n A vector of  n  32-bit signed two's complement integer values. cl_int n uint n A vector of  n  32-bit unsigned integer values. cl_uint n long n A vector of  n  64-bit signed two's complement  integer values. cl_long n ulong n A vector of  n  64-bit unsigned integer values. cl_ulong n float n A vector of  n  32-bit floating-point values. cl_float n double n A vector of  n  64-bit floating-point valu...

OpenCL 워크 그룹 사이즈 결정(How to determine work group size on OpenCL)

OpenCL을 사용하여 워크그룹 사이즈(CUDA에서는 Dimension, block, thread)를 결정해야 할때 Global workgorup size 는 해결하고자 하는 총 문제수를 커버 해야한다.  즉, 1024 x 1024 행렬이 있다면 커맨드큐에 NDRagneKernel을 할때 global workgroup size는 1024 x 1024 = 1048576 이 된다. Local workgorup size를 NULL 로 입력해주면 OpenCL이 알아서 실행하여 준다. 하지만 성능향상을 위해서는 local workgorup size를 수동으로 넣어주어야 할때가 있다. 연산장치(GPU 또는 기타장치)의 프로필을 보면 Max work group size 정보를 알 수 있다. 예를 들어 Max work group size 가 256 이었다면 local work group size는 모든 Dimenstion을 곱했을때 256 보다 같거나 작아야 한다. 저 256이라는 숫자는 보통 FrontWave(CUDA에서는 WARP) 에 의해서 결정되는데 Hardware 적으로 context switching 할 수 있는 총 그룹수와 PE( processing element ) 수에 의해 결정된다. PE가 64개 이고 FraoneWawe가 4이면 256이기 때문에 local workgorup 에서 처리할수 있는 work item 갯수는 256개가 된다. 총연산 유닛(compute unit)이 32개 라면 64(PE)*32(CU) = 2048 개가 동시에 처리되고 2048*4 = 8192 개 의 work-item이 스위칭되면서 실행된다.  이때 work-item들이 메모리에 동시에 접근할때 대역폭 정보 등까지 고려되어야 성능 향상에 대한 이해와 최적화를 할 수 있다.

Data dependence

Data dependence Flow Dependence(True dependence) Anti Dependence Output Dependence Flow Dependence(True dependence) 어떤코드 S1이 메모리 영역에 쓰고난 다음 어떤코드S2가 해당 위치를 읽음 S1과 S2는 동시에 실행하거나 순서를 바꿀수 없음 Anti Dependence 어떤코드 S1이 메모리 영역에서 읽고 , 그다음 어떤코드 S2가 해당 영역에 씀 S1과 S2는 동시에 실행하거나 순서를 바꿀수 없으나 S2코드를 수정하여 dependence를 제거할 수 있음 Output Dependence 어떤코드 S1이 메모리 영역에 쓰고, 그다음 어떤코드 S2가 해당 영역을 읽음 Anti Dependence와 마찬가지로 순서를 바꿀수 없으나 코드 수정으로 dependence 제거 가능 루프 캐리드 디펜던스(Loop-carried dependence) 루프 안에서 이전 이터레이션과 다음 이터레이션에 dependence가 존재 이터레이션들을 각각 동시에 실행 불가능 루프 인디펜던트 디펜던스(Loop-independent depecdence) 루프 안에 있으나 루프와 무관하게 루프안 코드들이 depecdence가 존재(Flow, anti, output 이 loop안에 있으면 loop-independent depecdence라고 하는것 같음)

C pointer #2 ( 2 Dimension, 3 Demension pointer )

int *i; int형 자료를 가르키는 포인터 i double (*a)[SIZE]; double이 SIZE개 있는 배열을 가르키는 포인터 a a++ 를 실행하면 a의 주소크기가 SIZE*8만큼 증가한다. a = (double (*)[SIZE])malloc(sizeof(double) * SIZE * SIZE); cast는 위와 같이 한다. 그럼 3차원은? double (*a)[SIZE][SIZE] = (double (*)[SIZE][SIZE]) malloc(sizeof(double) * SIZE * SIZE );

C pointer

int *(*func)(int *(*)(int *, char *), int **(*)(int **, char) ); int 포인터를 반환하는 func라는 함수 포인터 선언 이 함수의 인자 형식은 2개의 함수 포인터를 받음 첫번째 함수포인터는 int포인터를 return하고 인자로 int 포인터와 char 포인터를 받음 두번째 함수포인터는 int 2중포인터를 반환하고 인자로 이중 int포인터와 char 를 받음 질문은 댓글로 ㅎㅎ