목록전체 글 (381)
만족
https://sass-lang.com/ Sass: Syntactically Awesome Style Sheets Sass is the most mature, stable, and powerful professional grade CSS extension language in the world. sass-lang.com Scss는 css를 더 유연하게 사용할 수 있게 해 주는 언어이다. 실제로 웹에서 적용할 때는 전처리기를 통해 css로 변환한 후 사용한다. React에서 Scss 사용하기 yarn eject eject 스크립트를 통해 webpack 설정파일을 끄집어낸다. yarn add node-sass sass-loader 모듈 두개를 설치한다. 단 webpack의 버전에 따라 최신 버전의 node-..
Image Classification 등 입력의 갯수가 많을 때 Full-connected Neural Network를 사용하면 조정해야 할 파라미터의 갯수가 너무 많아 학습시간이 너무 오래 걸린다. 크기가 64*64 해상도인 사진 입력과 히든 레이어 2겹, 각 1000개의 뉴런에 대해 y를 계산하려면 64*64*1000+ 1000*1000+ 1000개의 파라미터에 대해 최적화를 진행해야 한다. 이것은 학습 시간이 오래 걸린다는 것을 의미하기도 하지만, 너무 많은 학습 데이터를 요구한다는 것을 의미하기도 한다. (학습 데이터의 갯수는 가중치를 원하는 정확도로 나눈 값이 최소값으로 하는 것이 권장된다) Convolutional Neural Network 바로 Neural Network를 사용하지 않고, N..
뉴럴 네트워크는 각각이 가중치로 연결되어 신호를 주고받는 간단한 프로세싱 유닛(뉴럴)로 구성되어 있다. 각각의 프로세싱 유닛들이 신호를 주고받는 모습이 마치 사람 뇌의 뉴럴이 상호작용하는 것과 비슷해서 이런 이름이 붙었다. 뉴럴 네트워크는 인풋 레이어, 히든 레이어, 아웃풋 레이어로 나누어볼 수 있다. 예를 들어 y= a*x1+ b*x2+ c일때 입력 x1,x2에 대해 인풋 레이어에 뉴런 2개가 들어가고 출력 y에 대해 아웃풋 레이어에는 1개의 뉴럴이 들어간다. 히든 레이어는 출력 y를 계산하기 위한 여러 겹의 뉴럴들이 존재한다. Neural Network: 각 뉴럴의 입출력 어떤 하나의 뉴럴 N에서 입력값과 그 입력에 대한 가중치의 곱의 합에 bias를 더한 후 그 값을 Activiation funct..
어떤 입력에 대해 맞냐 아니냐와 같이 이분법적인 결과를 예측하기 위해서는 Linear Regression 대신 다른 방법을 사용해야만 한다. 예를 들어 X가 공부시간이고 Y가 시험 합격여부라고 한다면, 그 데이터를 Linear regreesion으로 예측하는 것은 별로 적합하지 않을 것이다. Logistic Regression Logisic Regression은 sigmoid 함수를 이용해 나타낼 수 있다. 이렇게 하면 위와 같이 결과가 0,1로 나타나는 값에 대해 더 적합한 방법으로 분석할 수 있게 된다. Logistic Regression에서 입력 X1, X2 ... Xn에 대해 충분히 반영하여 y를 계산할 수 있도록 sigmoid와 Linear Regression 을 결합한 형태를 갖는다. Sigm..
Gradient Desent (경사 하강법) 경사 하강법은 cost의 변화량에 따라 파라미터를 움직여가며 cost가 최소가 되는 지점을 찾는 방법이다. J(w)를 cost를 계산하는 함수라고 했을 때, 우리는 J(cost)가 최소가 되면서 변화량이 최소가 되는 지점을 찾고 싶다. J가 최소가 되면서 변화량(미분계수)가 최소가 되는 지점을 찾을 때, w값을 움직여가면서 J'(w)의 값이 양수이면 J(w)가 커지고 있다는 뜻이므로 파라미터를 반대 방향으로 움직인다. => parameter의 변화에 따라 cost가 커지고 있으면 그 변화의 반대 방향으로 움직여야만 cost가 작아진다 반대로 J'(w) 값이 음수이면, cost가 줄어들고 있다는 뜻이므로 파라미터를 정방향으로 움직인다. 경사하강법: 사용 J의 변..
전자서명 전자적 데이터에 서명자에 대한 인증을 추가하는 것 비대칭 키를 이용해 서명할 때 개인키로 서명하고 공개키로 검증한다. => 서명: Signiture(M, 개인키) => 검증: Verify(S, 공개키) 따라서 서명은 본인만 할 수 있지만 검증은 공개키를 알고있는 모두가 할 수 있다. 전자서명: 해시 => 서명: Signiture(M, 개인키) => 검증: Verify(S, 공개키) 에서 M이 원본 메시지 그대로에 서명하는 것은 아니다. 메시지를 Hash해서 Hash(M)값에 대해 서명한다. 그러므로 더 정확하게는 => 서명: Signiture(Hash(M), 개인키) 가 맞다. 전자서명: 알고리즘 대표적으로 RSA알고리즘을 사용한다. RSA암호화와 기본 개념은 동일하지만, 여기에서 목적은 서명과..
암호화를 통해 복호화 키를 가지지 않은 사람은 메시지의 원문을 확인하지 못하게 할 수 있다. 대칭키 암호화 대칭키 암호화는 암호화 키와 복호화 키가 같은 암호화 방식을 발한다. 대칭키 암호화는 대표적으로 DES 암호화가 있다. https://yjshin.tistory.com/entry/%EC%95%94%ED%98%B8%ED%95%99-%EB%8C%80%EC%B9%AD%ED%82%A4-%EC%95%94%ED%98%B8-DESData-Encryption-Standard [암호학] 대칭키 암호 - DES(Data Encryption Standard) 데이터 암호화 표준 DES(Data Encryption standard) 1. 개요 DES는 대칭형 암호(비밀키 암호)이다. 즉, 암호화 및 복호화 키가 동일하다..
포맷 스트링 공격은 버퍼 오버플로우 공격과 매우 유사하다. 포맷 스트링 int main(){ char* buf= "str"; printf("%s", buf); } 위와 같이 %s 와 같이 출력 서식을 지정하는 문자를 포맷 스트링이라고 한다. 조금 특이한 %n에 대해서 알아볼 것이다. int main(){ int n; printf("hahaha%n", &n); } %n은 현재까지 출력된 바이트 수를 지정한 변수에 넣는다. 여기에서 %n 전에 출력된 문자열은 hahaha로 6byte이므로, n에 6이 들어간다. %n은 값을 4byte크기로 쓰기작업을 하는데, 만약 2byte만 쓰기에 사용하고 싶을 경우 %hn을 사용한다. 포맷 스트링 공격 원리 만약 printf에서 포맷 스트링을 사용하고 추가 인자를 넘겨주..
아직 블록체인에 대해 오래 공부하지는 않았기 때문에 틀린 내용이 있을 수 있으니 오해설을 발견하게 된다면 댓글을 통해 알려주시면 감사하겠습니다. https://bitcoin.org/files/bitcoin-paper/bitcoin_ko.pdf 이 포스트에서는 위 문서(비트코인 백서)를 해설할 것이다. 비트코인의 목적은 무엇인가? 기존의 인터넷 기반 상거래(쇼핑몰에서 물건 사기 등)에서 재화를 거래하기 위해서는 판매자와 구매자가 직접 재화를 거래하지 않고 금융기관과 같은 중개 기관을 통해 거래한다. 그러나 이런 중개 기관의 개입은 분쟁 등의 이유로 거래의 취소가 발생할 수 있기 때문에 서로 완전히 믿고 거래를 진행할 수 없다. 비트코인은 위 문제를 해결하기 위해 탄생한 1) 중앙통제를 받지 않고, 2) 거..
150분(2시간 30분)동안 3문제를 풀어야 한다. 프로그래머스를 통해 시험이 진행되며, 주어진 기간 내 아무때나 시험을 보면 되서 이 점은 지원자를 배려해준 것 같아 매우 감사했다. (여태까지 본 모든 회사들은 정해진 시간에 다같이 모여서 보는 방식이라 그 날 스케줄이 있을 경우 매우 곤란했다) 난이도는 쉬운 수준이였지만, 3문제 중 두 문제가 효율성 테스트(시간복잡도 줄이기)가 있어 조금 멈칫했다. 단순 문제의 정답을 맞추는 것(정확성 테스트)은 바로바로 가능했고, 효율성 테스트에서 2번 문제 10분, 3번 문제에서 30분정도 소모했다. 특히 3번 문제는 조금 황당했는데, 이분 탐색에 트리까지 써가며 일부 로직의 시간복잡도를 O(N^2)에서O(logN)으로 줄이면서 별 난리를 쳐도 안되던데 극단적으로..
문제 길이가 4인 [1,2,3,4] 배열이 있다. 여기에서 인덱스 0번부터 2번까지의 합을 구하라. 또, 인덱스 1번의 값을 10으로 변경했을 때의 인덱스 0번부터 2번까지의 합을 구해보라. 생각해볼 것 가장 간단한 방법은 주어진 범위(0~2)까지 배열을 순회하며 합계값을 구할 수 있다. 중간에 값이 바뀌면, 배열의 해당 인덱스의 값을 바꾼 후, 다시 주어진 범위에 대해 순회하며 합계값을 구할수 있다. 그러나 여기서 배열의 길이가 4가 아니라, 천만으로 증가하고 구간이 0~500만, 200만~700만, ... (구간의 길이가 500만)처럼 구해야 하는 누적합의 종류가 100가지라고 해보자. 이렇게 되면 매 구간에 해당하는 인덱스 위치를 모두 순회하여 부분합을 새로 계산해야 하므로 구간의 길이인 500만에..
요번에 산 책의 페이지 수가 1200페이지로 들고다니기 힘들 정도의 무게를 자랑한다. 그래서 아이패드에 넣어 보려고 북 스캐닝을 진행했는데, 스캔 상태가 좋지가 않다... 저렇게 페이지 전체가 심하게 기울어져있는 경우가 많았다. 이미 비싸게 돈 주고 책 절단+ 스캔+ 재제본까지 진행한 터라, 여기에서 OCR을 진행해도 큰 의미가 없다고 생각해 그냥 집으로 왔다. (OCR이 페이지당 추가비용이 발생하기도 했고...) 스캔 향상을 통해 기울음 보정하기 Adobe Acrobat DC나 기타 PDF 보정 툴을 통해 기울음을 보정할 수 있다. 왼쪽이 기울음 보정을 한 것이고, 오른쪽이 원본 스캔 파일이다. 확실히 오른쪽은 페이지가 휘어있는 모습을 확인할 수 있다. 그러나 기울음 보정을 하면 화질이 말 그대로 갈려..
올해 초부터 급격한 가격 상승이 있었던 GPU는 아직까지도 최고가 갱신을 계속하고 있으며 떨어질 기미가 보이지 않고 있다. 이 포스트가 GPU가 왜 이렇게 비싸졌는지, 언제쯤 살 수 있을지 전혀 모르는 사람들에게 도움이 될 것이다. 현재 가격은 얼마이고, 얼마나 비싸진 것인가? 2021-11-14 기준 최저가/평균가 가격표이다. 일반적인 사용자에게 맞춰진 3060과 3060ti를 보면 92만, 111만원에 가격이 형성되어 있다. 2팬 3060의 권장소비자가(MSRP)는 329달러로, 원화 환산 시 약 38만원이고 부가세와 관세를 합친다고 해도 45만원 내외가 정상 가격이다. 여기에서 유통사가 먹는 가격이 진짜 잘 쳐줘서 20%라고 해도 55만원 정도가 적절한 가격일 것이다. 그러나 현재 3060의 최저가..
node index.js 이런 형태로 js 파일을 실행시킨다. 그런데, 특정 매개변수를 입력받아야만 할 때가 있다. node index.js --slow 이런 식으로 실행 파일에 매개변수를 넘겨줘서 코드 수정 없이 다른 동작을 하게 만들 수 있다. 그렇다면 입력한 매개변수를 js에서 어떻게 받을 수 있을까? console.log(process.argv) process.argv에 매개변수가 들어있다. 그러나 node index.js --slow 했을 때 process.argv[0]에 --slow가 들어가지는 않는다. [ "...../node", "...../index.js", "--slow" ] 이런 식으로 node의 경로, index.js의 경로, 그 다음부터 매개변수가 들어간다. 따라서 매개변수만 들어..
Crontab Crontab은 특정 시간에 특정 작업을 트리거할수 있게 해 주는 명령어이다. https://jdm.kr/blog/2
Attempting to renew cert (secret.kr) from /etc/letsencrypt/renewal/secret.kr.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration. The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping. sudo certbot renew 인증서 유효 기간이 30일도 남지 않아..
가령 새로운 문의사항이 있다거나, 서버의 컴퓨팅 자원 소모량이 갑자기 늘어날 때 항상 모니터링을 하고 있는 것이 아니기 때문에 즉시 인지하기 어렵다. 그렇다고 별도의 알림 서버를 구축하자니 시간과 비용이 만만치 않은데, 텔레그램에서 지원하는 봇 API 를 사용하면 간단히 구현할 수 있다. https://telegram.org/ 텔레그램 – 새로운 메시징의 시대 빠르고. 안전하며. 강력함 telegram.org 먼저 텔레그램 계정을 생성하고, 앱을 다운로드받는다. Bot 생성 BotFather를 검색하고 우측에 파란색 체크 아이콘이 이있는 봇(맨 위)을 선택한다. start또는 시작 버튼을 누르면 다음과 같은 채팅이 표시된다. /newbot을 입력하면 두 종류의 봇 이름을 결정하게 된다. 첫 번째 봇 이름..
갑자기 예고도 없이 서버가 다운되었다. 물론 서버 전원이 나간다거나 컴퓨팅 자원이 모두 소모된것은 아니고, 아파치 프로세스만 맛탱이가 간 상태였다. 보통 이런식으로 과부하가 걸리면 속도가 느려진다던가, 서버 자체가 다운되는 경우가 많았는데 이번에는 조금 달랐다. error.log 아파치에서 오류 발생 시 에러 로그를 기록하도록 설정해두었다. 각종 접근해서는 안되고, 애초에 존재하지도 않는 파일에 접근을 시도한 흔적이 잔뜩 남아 있었다. 정상적인 서비스 사용자들은 저 경로에 접근할 일이 전혀 없으며, /var/www/html에 직접 접근하는 방법은 ip를 이용해 접근할 때만 가능하므로, 명백한 공격 행위임을 알 수 있다. 또한 동일한 아이피가 아닌 여러 아이피로 번걸아가며 찔러보고 있다. 아이피 위치를 조..
Performance 만들어진 회귀모델이 얼마나 예측을 잘 해낼 수 있는지를 측정할 수 있는 몇 가지 지표가 있다. Performance: R square (R^2) R^2= 1- Sigma(y- Predict(y))^2 / Sigma(y- E(y))^2 = 1- Sigma(실제값- 예측값)^2/Sigma(실제값- 평균값)^2 (단 y: 실제값, Predict(y): 예측값, E(y): y의 실제 평균값) R^2는 위와 같이 구할 수 있으며, 값은 [0,1]사이값으로 나타난다. 값이 1에 가까울 수록 성능이 좋다는 것을 의미하며, 즉 예측 데이터가 실제 데이터에 얼마나 가깝게 예측되는지를 나타낸다. (Higher is better) Performance: Standard Error of Estimate ..
Deterministic Model (결정적 모델) 변수 간 관계가 명확하여 무작위성이 주는 영향이 없거나 미미한 경우 BMI지수를 계산할 때 BMI= 몸무게/(키^2) 로 계산한다. =>몸무게와 키 정보가 주어지면 정확하게 BMI값을 계산해낼 수 있다. =>무작위성이 없다 Probablistic Model (확률론적 모델) 무작위성이 존재하며 확률론적 모델은 결정적 모델과 오차(Random Error)가 합쳐져 구성된다. 수축기혈압을 계산할 때의 공식은 다음과 같다. SBP= 6* age+ ε (ε은 오차) => 수축기혈압은 나이와 연관이 있지만, 동일한 나이를 가진 사람 전부가 동일한 수축기혈압을 가지지는 않는다 => 20살인 어떤 사람은 SBP가 123일수도, 117일수도 있다. 오차 ε는 명시된 ..