본문 바로가기

분류 전체보기

[EFC#] effective c# - 3. 제네릭 활용 # 반드시 필요한 제약조건만 설정하라 - 제너릭 타입을 활용할때 타입 조건을 넣고싶다면 제약조건 예약어 [where](parkdoyeon.github.io/study-log/2018-12-05-csharp-2.0-Generic)를 사용하는 것이 좋다 - 그러나 기본값을 할당하는데 있어서 default()와 new()는 분명한 차이가 있으므로, 제약조건에 new()를 넣을땐 이용자가 구현에 어려움을 겪을수도 있다는 것을 생각해야한다. # 런타입에 타입을 확인하여 최적의 알고리즘을 사용하라 - 제약조건을 사용하지 않고 제너릭 타입을 사용하게되면 런타임에 타입확인이 이뤄진다. - 이때, 런타임 환경을 최대한 고려하여 최적화된 타입별 생성자/메소드 오버로드등을 작성하는 것이 좋다. # IComparable와 I..
[EFC#] effective c# - 2. 리소스 관리 # .NET 리소스 관리의 이해 finalizer/IDisposable 1. 닷넷은 가비지 수집기가 있기 때문에 개발자가 메모리 해제/누수와 같은 문제를 직접적으로 처리할 필요가 없다. 2. 그러나 비관리 리소스의 경우 관리가 필요하며, 이를 위해 finalizer와 IDisposable 라는 두가지 메커니즘을 제공한다. 3. finalizer의 경우 가비지로 간주된 이후에도 메모리 점유시간이 길어져(언제 해제될지도 알 수 없다) 둘 중 IDisposable이 더 권장된다 - 가바지로 간주된 객체는 다음 가비지 수집세대에서 삭제되지만 - finalizer를 갖고있는 객체는 가비지로 판단되더라도 finalizer를 호출하기 전까지 공간이 해제가 안된다. # 할당구문보다 멤버 초기화 구문이 좋다. - 생성자..
[EFC#] effective c# - 1. 언어요소 # 지역변수를 선언할때는 var를 사용하는 것이 낫다 1. c#은 익명함수를 지원하면서 타입을 암시적으로 선언하는 방법을 제공한다. 2. 정확한 타입을 알지 못하는 상태에서 명시적으로 선언할경우 득보다 실이 많다 - 예1 잘못된 형변환: IEnumerable를 상속받는 IQueryable을 IEnumerable 타입으로 선언하는 경우 - IQueryable 타입은 원격 데이터를 참조할 경우, 여러단계에서 수행되는 LINQ 쿼리식을 SQL쿼리로 합한 후 그 값을 순회하는 시점까지 SQL쿼리 수행을 연기한다. (=네트워크 트래픽을 적게 씀) - 반면 IEnumerable는 단계별로 모두 원격에 SQL쿼리를 전달하고 로컬에 반환한다. - 예2 숫자 형변환: 특정 숫자값을 반환하는 메서드를 var 변수를 통해 ..
[Linux] 리눅스 용량, 메모리 정보 확인하기 리눅스 환경에서 도커로 ELK 스택 서비스를 운영 사용하다보면 로그관리때문에 메모리나 디스크정보 확인을 할 일이 많은데,자주 사용하게 되는 기능들 위주로 정리해보았다. # 메모리 - 전체 메모리 정보 확인하기cat /proc/meminfo | grep MemTotal - 사용중인 메모리 확인하기free # CPU 확인하기cat /proc/cpuinfo | more # 디스크 - 전체 디스크, 파티션 용량 확인하기df -h - 디렉토리 기준 용량 확인하기du -hsx * | sort -rh | head -10 * : 경로위치, 생략시 현재 폴더du -h : 용량을 읽기좋은 포멧으로 정리 ex)1K, 200M, 3G ..du -s : 요약du -x : 디렉토리 하위 스킵sort -r : 비교 결과 역순sor..
[SVM] 2. svm 사이의 최대 거리값 찾기 다시 그래프로 돌아오자.svm의 가장 기본적인 목표는 경계(decision boundary)에 가장 가까운 서로 다른 클래스 두 점의 '거리 최대값'을 찾는 것이다.위 그래프에서 초록색 선은 x-클래스 벡터, 하늘색 선은 x+클래스 벡터이다.뺄셈으로 두 벡터의 거리를 찾고, 벡터값을 스칼라로 바꾸기 위해 w벡터의 단위벡터값을 내적해준다. 왜 하필 w벡터일까? SVM 조건식을 통해 도출한 X와 W의 내적값을 1과 b에 대한 상수식으로 치환하면,아래와 같이 아주 깔끔한 식이 도출된다. ||w||가 분모에 있다는 것은 다시말해 최대값을 찾기위해서는 가장 작은 w를 찾아야한다는 얘기가 된다.수학적 편의에 차원에서 w의 최솟값을 찾기 위해 아래와같이 식을 변형한다. '왜 이렇게 변형해야 하는가'는 또 다른 문제이..
[SVM] 1. yi(x·w+b) >= 1 도출하기 위 그래프는 두개의 그룹을 나누는 가장 최단의 경계가 되는 서포트 벡터 라인 두개와,두 그룹의 경계가 되는 점선라인(dicision boundary)을 표현하고 있다. 여기서 dicision boundary를 통과하는 범선 벡터 w와(파란색), 특정할 수 없는 어떤 벡터 u(주황색)가 있다. 이 둘의 내적(dot product) 값은 상수 c보다 크다고 할 수 있다고 했을때,c를 이항하여 b(c=-b)로 치환하면 다음과 같다. 여기서 벡터 u가 decision boundary에 위치한 벡터 X중 하나라고 했을 때,w와 X의 정의에 따라 직교하는 벡터의 내적은 0이 되므로, 아래와 같다. 나아가, w와 X의 내적과 좌표계상의 위치를 조정하는 편향값(bias, Decision Boundary 그래프가 원점에..
[ES] 403 index read-only 에러가 발생했을 때 어느날 ElasticSearch index에 데이터가 제대로 들어오지 않는 것같아서 logstash의 log를 열어보니 다음과 같은 로그가 여러개 발생해 있었다. logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)] 그래서 찾아보니 이런 내용의 글이 있었다. (원문 페이지: https://discuss.elastic.co/t/forbidden-12-index-read-only-allow-delete-api/110282) ..
[mssql] insert into select 사용하기 다음과 같은 상황이 있다. 1. table_1의 특정 컬럼값(Coupon)을 table_2에 인서트하고 싶을때. 2. table_2에 다른 컬럼(RegDate)이 있어서 고정된 값('2019-03-04')을 넣어줘야 할때. 3. 인서트하는 pk 컬럼(AccountNo)이 있어서 인서트 row마다 값을 임의로 지정해줘야 할때. (table_2 인덱스 넘버에서 1씩 추가 하는 것으로지정) 이때 서브쿼리처럼 조회 쿼리를 생성해서 insert할 수 있다. INSERT INTO [table_2] (AccountNo, Coupon, RegDate) (SELECT (SELECT MAX(Seq) FROM [table_2])+(ROW_NUMBER() OVER(Order BY @@identity)), Coupon, '20..