MVVM 패턴을 이용해서 View의 TextBox 등에 바인딩은 간단하게 <TextBox Text="{Binding mystring}"/> 이렇게 하면 된다. RichTextBox 도 마찬가지 일것 같지만, 해보면 안된다. 먼저 RichTextBox가 Content를 표현하는 구조를 알아야 되는데, 그건, 다음에 정리하고, 바인딩 하는 방법은 아래와 같다. 먼저 ViewModel 을 DependencyObject 를 상속고 DependencyProperty 를 정의해준다. public class MyViewModel : DependencyObject { public FlowDocument Document { get { return (FlowDocument)GetValue(DocumentProperty); } set { SetValue(DocumentProperty, value); } } public static readonly DependencyProperty DocumentProperty = DependencyProperty.Register("Document", typeof(FlowDocument), typeof(MyViewModel), new PropertyMetadata(OnDocumentChanged)); public void OnDocumentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { } } 그 다음 View 의 code-behind 의 생성자에 InitializeComponent(); Binding b = new Binding("Document"); b.Source = richTextBox; b.Mode = BindingMode.OneWay; BindingOperations.SetB...
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들이 메모리에 동시에 접근할때 대역폭 정보 등까지 고려되어야 성능 향상에 대한 이해와 최적화를 할 수 있다.
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'...
댓글
댓글 쓰기