전체 글 122

Python 최대 int 범위

Python 2: sys 패키지에서 max값을 제공한다. sys.maxint로 정수 최대값을 구할 수 있다. 이 최대값을 초과할 시 int->long으로 자동전환 된다. Python 3: python3에서 int와 long의 구분이 없어져 int은 unbound다. 만약 word size를 구하고 싶다면 sys.maxsize를 사용한다. PEP 237: Essentially, long renamed to int. That is, there is only one built-in integral type, named int; but it behaves mostly like the old long type. 결론: Python에서 int의 범위는 고려할 필요가 없다. 출처: https://stackoverfl..

algorithm/python 2022.03.27

Java PermGen 영역

PermGen(Permanent Heap)은 Java 8 버전 이하에서 존재했다. 클래스 메타데이터가 들어갈 곳인데 이 공간의 크기를 예측하기 어려웠다. 자바에서는 클래스의 메타데이터(class 메타정보, Method의 메타정보, static변수, 상수정보)를 읽고 해당 메타데이터를 통해 객체를 생성할 수 있다. PermGen 영역은 OS, JVM버전마다 각기 다른 default값을 가지고 있으며 대부분 매우 작게 할당되어 있어 java.lang.OutOfMemoryError와 같은 에러를 접할 수 있다. PermSize를 commandline에서 늘릴 수 있으나 임시방편이다. Java 8 버전에서는 PermGen 영역이 Metaspace로 대체되었다. Metaspace는 Native memory에 속하..

Elasticsearch와 mongodb 차이점

템플릿기반 검색엔진을 만드는 방법을 찾던 중 제일 먼저 생각난 것이 (1) Logstash + ES 같이 사용하는 방법과 (2) mongodb 였다. 하나는 로그수집에 많이 쓰이는 검색엔진이고 mongoDB는 NoSql 형식의 DB로만 알고 있었기에 좀 더 알아보았다. 1. 데이터 저장 아키텍쳐 Elasticsearch: indexing 및 검색에 적합 Lucene 검색엔진을 기반으로 Java로 작성되어 있는데 이 검색엔진에서 데이터 update가 리소스를 많이 사용한다. 세그먼트 단위로 저장되는데 세그먼트는 변경할 수 없고 커밋될 때마다 새 세그먼트가 생성되고 자동으로 병합된다. Mongodb: 많은 wirte 및 update 처리량 작업에 적합 C++로 작성되었으며 메모리맵 파일을 사용하여 디스크 데..

우선순위 큐/Priority Queue

queue인 것에서 알 수 있듯이 push, top, pop 메소드가 있으며, 일반 queue에서는 FIFO 구조로 저장하는 선형 자료구조인데 반해, prioirty queue의 비선형 자료구조로 우선순위가 가장 높은 데이터를 가장 먼저 삭제한다. 우선순위는 MAX, MIN으로 지정하기 나름이다. 구현 방식으로는 배열, 연결 리스트, 힙 등이 있다. 보통 최악의 경우라도 가장 나은 성능을 보이는 heap이라는 자료구조로 구현된다. 원소들을 넣고 정렬할 때 heap sort를 사용한다. heap은 완전 이진 트리 구조인데, BST(Binary Search Tree)와 달리 중복된 값이 허용된다. Enqueue(삽입) 예시로 15라는 데이터가 들어왔을때 동작 순서이다. Dequeue(삭제) 20이라는 데이터..

algorithm/common 2022.02.27

만능 로그 출력기

import logging 만 하면 handler가 붙지 않아 콘솔에 출력이 안된다. 그래서 보통 logging 설정해주는 다음 모듈을 한번 만들어 놓고 사용하는 편이다. 실행되는 main 모듈에 한번만 import 하면 된다. 나머지 하위 모듈에서는 import logging 만 해주면 알아서 handler가 붙는다. # -*- coding: utf-8 -*- import logging def setLog(): logging.basicConfig( format="[%(asctime)s] [%(process)s] [%(filename)-s:%(lineno)-s] [%(levelname)s] %(message)s", level=logging.DEBUG, handlers=[ logging.StreamHand..

codility/lesson5/prefix sums/passingCars

https://app.codility.com/programmers/lessons/5-prefix_sums/passing_cars/ 코딜리티는 (1) 시간제한이 있어 늦장부리지 않고 풀 수 있어 좋다. (2) 테스트케이스도 정확도, 성능측정으로 분리되어 있으며 (3) 화면녹화도 제공하고 (4) 내 소스 시간복잡도도 계산해 주고 (5) 문제도 영어라 가끔 영어문제를 내는 큰 회사들 대비하기 좋다. 나는 성능이 구린 풀이를 잘 하기 때문에 코딜리티로 점검해 보았다. 곧이곧대로 풀지말고 그 안의 룰을 찾아내자 def solution(A): west_sum = 0 len_A = len(A) cnt_one = sum(A) for i in range(len_A): if A[i] == 0: west_sum += cnt..

algorithm/python 2022.02.14

[vscode] java language server requires a JDK 11+ to launch itself

java 8 작업이 생겼다. 기존에 11을 쓰고 있었어서 환경설정을 해야한다는 생각에 설정파일 .vscode/settings.json 에 다음을 추가해주었다. { "java.configuration.updateBuildConfiguration": "automatic", "java.home": "/usr/lib/jvm/java-8-openjdk-amd64" } 그리고 다음 에러가 발생했다. java language server requires a JDK 11+ to launch itself runtimes 속성에 8을 추가해주어 해결했다. "java.home": "/usr/lib/jvm/java-11-openjdk-amd64", "java.configuration.runtimes": [ { "name": ..

Annotation 생성시 @Retention

Custom Annotation을 만들어 사용할 때 @Retention() annotation을 다들 접한 적 있을 것이다. @Retention() 은 annotatin의 life cycle, 즉 언제까지 살아 남아 있을지를 결정한다. import java.lang.annotation.ElementType; import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE_USE)..

ubuntu 에서 방화벽 끄기..

하... 반성의 하루 꼭 1년에 한번씩 방화벽 때문에 시간 낭비하는 일이 생긴다. 꼭 확인하자. 방화벽 끄기 sudo ufw disable + 참고) 방화벽 status 확인 sudo ufw status verbose UFW 기본 룰 UFW에 설정되어 있는 기본 룰은 다음과 같다. 들어오는 패킷에 대해서는 전부 deny 나가는 패킷에 대해서는 전부 allow 기본 룰 확인 sudo ufw show raw 기본 정책 deny/allow sudo ufw default {deny/allow} 사용자 룰 추가 sudo ufw allow 22/tcp sudo ufw deny 22/tcp // 룰 삭제는 delete sudo ufw delete deny 22/tcp ssh 서비스 설정 다음 경로에 서비스를 등록할 ..

알고리즘을 위한 Java 입출력

Hackerrank에서 입출력 소스는 기본으로 제공해주다 보니 타기관 알고리즘 문제를 풀 때 입출력 처리를 못하는 문제가 발생했다. python에서는 input, c++에서는 cin으로 간편하게 처리 가능이지만, Java IO를 위해서는 Scanner, BufferedReader 객체를 사용해야 한다. 주로 Scanner를 많이 사용하지만 속도측면에서는 BufferedReader가 우수하다. Scanner, Sysout import java.util.Scanner; class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int a; String b; a = sc.nextInt(); sc.nextLine..

algorithm/java 2022.02.07

BERT

BERT 정의: 문맥을 양방향으로 이해해서 숫자로 바꿔주는 딥러닝 모델 기존 모델과의 비교 ELMo: 정방향, 역방향으로 학습하여 hidden state들의 linear 결합을 통해 최종 token 도출 GPT: decoder를 사용하여 후반부 단어들 masking 시켜놓고 다음 단어를 예측하는 방식으로 학습 BERT: encoder를 사용하여 방향성 없이 한꺼번에 모두 처리, masked 단어를 예측하는 방식으로 학습 SQuAD, NER, MNLI 같은 layer 1개만 BERT 위에 쌓음으로써 기존 모델들을 앞지를 수 있는 우수한 성능을 보인다. 모델 아키텍쳐 transformer의 encoder 블록만 사용 Sentence: 일련의 연속적인 text, 완벽한 문장이 아니어도 됨 (rather tha..

공부/NLP 2022.02.04

Transformer

배경 seq2seq를 처리하기 위해 기존 모델들은 recurrent model로 long-term dependency에 취약했다. 긴 문장에 어떤 정보와 다른 정보 사이의 거리가 멀때 해당 정보를 이용하지 못하는 문제가 발생했다. transformer는 recurrence를 사용하지 않고 attention mechanism만 사용해 input과 output의 dependency를 포착한다. recurrence : neural network에서 다음 step으로 넘어갈 때 출력 결과가 이전 계산 결과에 영향을 받는(=되풀이) 특징 recurrence와 convolution을 제거하고 attention을 사용하여 병렬처리를 가능케 하였다. Encoder (좌측) N개의 동일한 layer로 구성되어 있으며, ..

공부/NLP 2022.02.04

블로그 스킨 날려먹기

지난 몇 년 동안 티스토리 기본 스킨을 사용하면서 뭐 추가하고 싶은게 있을 때마다 조금씩 커스터마이징 하였었다. 가끔 html/css 하면 재밌기도 하고... 그러던 중 티스토리 무료 스킨이라는 것들이 많다고 해서 다른 스킨을 적용해보려고 기존 스킨을 보관함에 저장해두고 작업했는데 마우스 막 쓰다가 날려먹었다;; 좌우여백 간격이나 글씨체, 블로그 이웃 리스트 추가 등등 사소하게 조금씩 했던거라 기억도 안나는데 불편하다;; 이왕 이렇게 된거 새로이 단장해보고자 한다... 참고하기 좋은 사이트 - css 색상 사이트: https://flatuicolors.com/

일상/창고 2022.02.02

Resouce leak: 'applicationContext' is never closed

자바 스프링 공부를 하다 다음과 같이 ApplicationContext를 사용할 때 resource leak 오류를 볼 수 있다. 스프링 컨테이너가 중지되면 암시적으로 닫히므로 실행되는데는 문제가 없지만 warning으로 뜨는 것이 꽤 신경쓰여 한번 알아보았다. - ApplicationContext란? 해당 어플리케이션에 대한 구성정보를 제공하는 인터페이스이다. 객체를 생성하고 스프링 컨테이너를 초기화하기 위해 Bean들을 불러오는데 BeanFactory interface를 상속 받은 인터페이스이다. BeanFactory와의 차이점이라면 BeanFactory는 lazy-loading 방식인데 반해 ApplicationContext는 pre-loading 방식으로 더 좋은 성능을 보인다. 아래가 내가 작성..

퍼셉트론(perceptron)

- 퍼셉트론(perceptron) 알고리즘은 딥러닝의 기초가 된다. - 다수의 신호를 받아 가중치와 편향 파라미터를 사용하여 계산한 뒤 임계값과 비교하여 하나의 신호로 출력한다. - 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다. - AND, OR 게이트 등의 논리 회로를 표현할 수 있고, 다층 퍼셉트론을 사용하면 XOR 게이트를 표현할 수 있다. - 다층 퍼셉트론은 이론상 컴퓨터를 표현할 수 있다. * 편향(bias) : 하나의 뉴런으로 입력된 모든 값을 다 더한 다음(= 가중합), 이 값에 더해주는 상수(=성향이라고 이해하면 된다)로, 최종적으로 출려되는 값을 조절하는 역할 참고: https://jh2021.tistory.com/3

공부/NLP 2022.01.17